黑马程序员技术交流社区

标题: Java内部类的编译错误处理 [打印本页]

作者: hanrongle    时间: 2013-7-10 15:03
标题: Java内部类的编译错误处理
本帖最后由 杨兴庭 于 2013-7-10 22:39 编辑

 在创建非静态内部类时,经常会遇到“No enclosing instance of type * is accessible. Must qualify the allocation with an enclosing   instance of type *(e.g. x.new A() where x is an instance of *).”这样的报错误,怎么处理?
作者: 左手神刀    时间: 2013-7-10 15:06
最好能把源代码贴出来 让大伙儿看看帮你找问题,光给个错误提示不好找原因。
作者: hanrongle    时间: 2013-7-10 15:09
  package com.csc.innerclasstest;
  /**
  *
  * @author csc
  *
  */
  //外部类
  public class OuterClass {
  /**
  * @param args
  */
  public static void main(String[] args) {
  InnerClass innerClass = new InnerClass();
  innerClass.say();
  System.out.println("I am in OuterClass!");
  }
  //定义一个内部类
  private class InnerClass{
  private void say() {
  System.out.println("I am in InnerClass!");
  }
  }
  }
  上面的代码的第16行将会报出“No enclosing instance of type OuterClass is accessible. Must qualify the allocation with an enclosing instance of type OuterClass (e.g. x.new A() where x is an instance of OuterClass).”这样的编译错误。

怎么处理?
作者: majunm    时间: 2013-7-10 15:11
外部类名。内部类名
new wai().new nei()
作者: camml    时间: 2013-7-10 15:14
你的16行是从哪里开始查的,能不能把代码写到代码的模式中
作者: changweihua    时间: 2013-7-10 15:18
static class InnerClass
作者: majunm    时间: 2013-7-10 15:28
hanrongle 发表于 2013-7-10 15:09
  package com.csc.innerclasstest;
  /**
  *

OutClass.InnerClass    in=new OutClass().new InnerCass();
in.say();
作者: 谢威    时间: 2013-7-10 15:28
  1. class OuterClass {
  2.         public static void main(String[] args) {
  3.                 //java中静态方法中不能调用非静态的方法
  4.                 InnerClass innerClass = new InnerClass();
  5.                 innerClass.say();
  6.                 System.out.println("I am in OuterClass!");
  7.         }

  8.         //定义一个内部类
  9.         // private class InnerClass{ 将这里添加一个static  
  10.     private static class InnerClass{
  11.                 private void say() {
  12.                         System.out.println("I am in InnerClass!");
  13.                 }
  14.         }
  15. }
复制代码

作者: majunm    时间: 2013-7-10 15:29
本帖最后由 majunm 于 2013-7-10 15:31 编辑

OutClass.InnerClass    in=new OutClass().new InnerCass();
in.say();

试试 行不行 兄弟!

作者: hanrongle    时间: 2013-7-10 15:33
majunm 发表于 2013-7-10 15:29
OutClass.InnerClass    in=new OutClass().new InnerCass();
in.say();
试试 行不行 兄弟!

            好了!
作者: hanrongle    时间: 2013-7-10 15:33
majunm 发表于 2013-7-10 15:29
OutClass.InnerClass    in=new OutClass().new InnerCass();
in.say();
试试 行不行 兄弟!

            好 了!
作者: camml    时间: 2013-7-10 15:45
本帖最后由 camml 于 2013-7-10 15:47 编辑

楼主的代码很明显会有编译错误,如果外部类的静态方法想创建非静态内部类的对象时,需要加上外部类的类名。
下面是修改后的代码
  1. public class OuterClass  {
  2.         public static void main(String[] args) {
  3.                 //原代码会出现“java中静态方法中不能调用非静态的方法”的错误,修改为
  4.                 OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();
  5.                 innerClass.say();
  6.                 System.out.println("I am in OuterClass!");
  7.         }

  8.         //定义一个内部类
  9.        private  class InnerClass{
  10.                 private void say() {
  11.                         System.out.println("I am in InnerClass!");
  12.                 }
  13.         }
  14. }
复制代码

作者: camml    时间: 2013-7-10 15:48
至于楼主所遇到的错误,真心没有遇到,请楼主重新打一次代码,看是否会有这样的报错提示,希望对楼主有帮助




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2