为了账号安全,请及时绑定邮箱和手机立即绑定

求大神解答,为啥按照静态内部类的方法编译,编译器会提示错误

在使用eclipse进行编译时,编译器一直提示错误,但是编译方法是正确的,为啥编译器会提示错误?求大神解答

http://img1.sycdn.imooc.com//58db28e800010ee807020466.jpg

正在回答

3 回答

静态内部类必须通过new 外部类().成员的方式访问非静态成员;

比如你的12行代码要这样写:syso("访问外部类中的成员b:" + new SOuter().b );

2 回复 有任何疑惑可以回复我~
#1

逆风落叶

少了一个2 new SOuter2().b
2017-03-29 回复 有任何疑惑可以回复我~
#2

小瘦学Java 提问者 回复 逆风落叶

大神,那这句话怎么去理解呢?如果外部类的静态成员与内部类的成员名称相同,可以通过“类名.静态成员”访问外部类的静态成员?
2017-03-29 回复 有任何疑惑可以回复我~
#3

逆风落叶 回复 小瘦学Java 提问者

就是成员名称相同的情况下,可以用类名.成员名访问成员。。。你那句话太绕了
2017-03-29 回复 有任何疑惑可以回复我~
#4

逆风落叶 回复 小瘦学Java 提问者

就是成员名称相同的情况下,可以用类名.成员名访问成员。。。你那句话太绕了
2017-03-29 回复 有任何疑惑可以回复我~
#5

小瘦学Java 提问者 回复 逆风落叶

(*^__^*) 嘻嘻……,这个是慕课老师写的,我是屌丝来的,悟性比较低,那么在这个代码中,他们都有相同的成员变量:int b ;老师给的案例也是直接为:System.out.println("访问外部类中的b:"+SOuter.b);但是,我在编译器也出现错误,是我把这个理解错误了吗?
2017-03-30 回复 有任何疑惑可以回复我~
查看2条回复

你外部的b不是静态变量

0 回复 有任何疑惑可以回复我~
#1

小瘦学Java 提问者

对的,我现在学完第二季,也理解了,谢谢大神
2017-04-19 回复 有任何疑惑可以回复我~

你对成员变量b用了private修饰,导致该变量不能被任何实例对象引用,针对你的问题,有两种改法:

  1.  将b用public static修饰,变成静态成员变量,这时就可以用SOuter2.b来引用它了

  2. 将SOuter2.b改为new SOuter2().b,这样做的实质是通过new SOuter2()产生了一个SOuter2类的匿名对象,然后再通过这个匿名对象去引用成员变量b,为了让b能够被对象引用,你还需要将b改成public修饰

1 回复 有任何疑惑可以回复我~
#1

小瘦学Java 提问者

在第二种方法中,可以直接添加一个(+new SOuter().b);也可以
2017-04-04 回复 有任何疑惑可以回复我~
#2

标准与或式 回复 小瘦学Java 提问者

哦,对,是我忘记了,内部类对象确实可以访问外部类的私有成员
2017-04-04 回复 有任何疑惑可以回复我~
#3

小瘦学Java 提问者 回复 标准与或式

哈哈,好棒棒,很感谢你
2017-04-04 回复 有任何疑惑可以回复我~
#4

标准与或式 回复 小瘦学Java 提问者

也不对,你这也不是内部类,应该是因为在类的内部访问成员变量b,所以private权限依然允许被访问,如果在类的外部就无法访问了
2017-04-04 回复 有任何疑惑可以回复我~
#5

标准与或式 回复 小瘦学Java 提问者

额,你这回复的好快,我还没来得及改正自己的错误
2017-04-04 回复 有任何疑惑可以回复我~
查看2条回复

举报

0/150
提交
取消

求大神解答,为啥按照静态内部类的方法编译,编译器会提示错误

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信