黑马程序员技术交流社区
标题:
关于内部类定义在局部的问题
[打印本页]
作者:
杨建聪
时间:
2013-1-8 14:35
标题:
关于内部类定义在局部的问题
本帖最后由 张向辉 于 2013-1-16 11:58 编辑
看毕老师的视频得到结论:
内部类定义在局部时:
1.不可以被成员修饰符修饰
2.可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问他所在的局部中的变量,只能访问被final修饰的局部变量
问题是这个定义在局部是个什么情况?那位同学有演示给详细解释下这个知识点
作者:
黑马王振宇
时间:
2013-1-8 14:50
就拿毕姥爷的代码给你说说,哈哈哈这里用到培根贡献的代码了
class Outer
{
int x = 3;
void method(final int a)
{
final int y = 4;
class Inner
{
void function()
{
System.out.println(y);
}
}
new Inner().function();
}
}
class InnerClassDemo3
{
public static void main(String[] args)
{
Outer out = new Outer();
out.method(7);
out.method(8);
}
}
复制代码
看到class Inner了吗?他定义在了类中的方法中里,这就是你说的定义在了局部,
第一点不说了就是字面意思,
第二点说的是他可以访问x,但是不能访问y,想访问y的话,需要加final。
其实没有为什么记住就行了,希望能帮到你。
作者:
王阳
时间:
2013-1-8 23:42
代码懒得写了,用楼上的代码做说明好了,首先,第一个问题,不能使用public private访问修饰符,但是可以使用protected 和默认访问修饰符,第二个问题,在于内部类与成员变量的生命周期,因为成员变量周期短,所以当方法结束时,成员变量已经不存在了,这是内部类中的方法再去访问成员变量,就会出错。所以需要家桑final类增加成员变量的生命周期
作者:
李培根
时间:
2013-1-9 08:52
黑马王振宇 发表于 2013-1-8 14:50
就拿毕姥爷的代码给你说说,哈哈哈这里用到培根贡献的代码了看到class Inner了吗?他定义在了类中的方法中 ...
我的代码?自己都不记得了。
作者:
舒远
时间:
2013-1-9 09:04
这种情况多见于匿名内部类,方法中直接new一个接口或者类的子类,并提供实现:例如
public static void main(String[] args){
new Thread(new Runnable(){
public void run(){
//TODO ....
}
}).start();
}
作者:
昨夜星风
时间:
2013-8-3 18:46
求解 :此代码如果 final int y = 4;这个代码去掉 ,System.out.println(a);
其它不变 这样 运行
class InnerClassDemo3
{
public static void main(String[] args)
{
Outer out = new Outer();
out.method(7);
out.method(8);
}
}
会有结果吗?
作者:
^o(孤8o|狼i¤F
时间:
2014-4-5 14:21
不明白你的意思
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2