新人求问一个内部类问题,请求大神帮忙解答

a245066003 2017-06-18 12:28:49
/*
内部类可以存储在局部位置上。

内部类在局部位置上只能访问被final修饰的局部变量。
*/
class Outer
{
int num = 4;
void show()
{
int x = 5;
class Inner
{
void method()
{
System.out.println("method run..."+x);
}
}
Inner i = new Inner();
i.method();
}
}

class InnerClassDemo3
{
public static void main(String[] args)
{
Outer o = new Outer();
o.show();
}
}
我看的是毕向东的视频,讲内部类的时候,局部内部类访问局部变量的时候要用final修饰局部变量,但是我这个写的没有用final来修饰,也可以编译通过,打印的是method run...5
这是什么情况?
...全文
214 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
soton_dolphin 2017-06-18
  • 打赏
  • 举报
回复
1.8以后,只要变量实际作用上是final就没有问题。也就是说你声明变量以后,变量的值没有再改变,即使没有确切声明为final 编译器也会把这个变量当做final 变量来处理
springdy 2017-06-18
  • 打赏
  • 举报
回复
二楼正解,你可以尝试下用1.7和1.8分别编译,1.7会报错,1.8可以通过,jdk1.8很多位置的final可以省略
丄whistle 2017-06-18
  • 打赏
  • 举报
回复
可以试着给x赋值,这时候就会提醒,楼上正解
李德胜1995 2017-06-18
  • 打赏
  • 举报
回复
jdk1.8省略了,如果对x重新复制会报Local variable x defined in an enclosing scope must be final or effectively final

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧