黑马程序员技术交流社区
标题:
方法中的内部类?
[打印本页]
作者:
章成
时间:
2011-7-19 15:29
标题:
方法中的内部类?
public void m(){
int x=0;
class Inner{
public void n(){
system.out.ptintln(x);
}
}
}
方法的内部类不能调用方法中的x,要加fianl。自己对方法中的内部类不是很清楚,能不能帮忙解释下为什么?
作者:
匿名
时间:
2011-7-19 15:57
1、在一个方法内部定义一个类通常叫做局部内部类,由于在方法内部有效,所以不能使用访问修饰符修饰
2、对于局部成员(包括局部变量和局部内部类),上一级程序单元都是方法,所以用static修饰没有意义,所以不能用static修饰
因为static修饰的要和类相关的,
3、由于内部类在编译的时候我们看一下字节码的命名就会知道;外部类名字.内部类名字。这说明内部类所处的位置和外部类中的方法处在同一个等级上,外部类中的方法中的变量或参数只是方法的局部变量,这些变量或参数的作用域只在这个方法内部有效。因为编译的时候内部类和方法在同一级别上,所以方法中的变量或参数只有为final,内部类才可以引用
4、也许你这方法结束了那么这个常量就没有了。而使用final修饰符不仅会保持对象的引用不会改变,而且编译器还会持续维护这个对象在回调方法中的生命周期.
作者:
毕仁杰
时间:
2011-7-19 16:07
给一个很直白的解释:
因为局部变量是临时的,方法一旦执行完毕即被释放,而内部类是要在java虚拟机中动态运行的程序,它的生命周期不随方法的结束而结束 。用final定义的局部变量相当于是一个常量,它的生命周期超出方法运行的生命周期。
很简单吧!
[
本帖最后由 毕仁杰 于 2011-07-19 16:20 编辑
]
作者:
匿名
时间:
2011-7-20 00:13
1、因为用final定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期;
2、局部变量的生命周期是:当该方法被调用时,该方法的局部变量在栈中被创建,当方法调用结束的时候, 退栈,这些局部变量全部死亡;
3、而内部类对象的生命周期是:与其他的类一样,当创建一个内部类对象后,只有当没有其他人再引用它的时候,它才死亡。
4、所以,有可能会出现这样的情况,方法调用已经结束了(局部变量死亡),内部类对象还存在。
作者:
匿名
时间:
2011-7-20 09:02
内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。
作者:
匿名
时间:
2011-7-20 09:33
1.弄明白这个变了的作用域,(上面解释的很清楚了)
2.、使用方法,一个是加final 另种是在使用的是加上外部类名,再加this 比如: System。out。println(m.this.x);
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2