A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 崔利鹏 于 2012-11-14 14:59 编辑

程序总是报错提示,No enclosing instance of type Test2 is accessible. Must qualify the allocation with an enclosing instance of type Test2 (e.g. x.new A() where x is an instance of Test2).是什么意思,怎么错了

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
本帖最后由 张利 于 2012-11-14 14:19 编辑

没有可访问的内部类Test2的实例,必须分配一个合适的内部类Test2的实例(如x.new A(),x必须是Test2的实例。)
注意:由于实例创建是需要对象的,所以在同一个类中的静态方法不能直接访问非静态的内部类
需要先建立外部类的实例,再创建内部类的实例

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 吴愿涛 于 2012-11-14 14:06 编辑

意思是:没有可访问的内部类Test2的实例,必须分配一个合适的内部类Test2的实例(如x.new A(),x必须是Test2的实例。)

原因可能是你写的内部类是动态的,也就是开头以public class开头。而主程序是public static class main。在Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。所以解决办法是将public class改为public static class.
或者改成上面的new Test().new Beans():
当然如果想看起来不这么怪异,也可以写成另外加一个方法来实例化这个内部类,再用外部类的实例来调用方法。

回复 使用道具 举报
你应该是在静态方法(比如main方法)中调用了一个非静态的内部类造成的编译异常,试试把内部类声明为static。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马