java的几个基础问提
1,外部类如何引用内部类 Outer.Inner inner = outer.new Inner();其中 Outer是外部类 Inner是内部类 我直接创建一个内部类对象不是一样的吗 如Inner inner = new Inner()
2, 1,在方法内部定义的内部类只能访问方法中的final类型的局部变量 2,因为用final定义的局部变量相当于是一个常量 它的生命周期超出方法运行的生命周期
问:2怎么能作为1的依据呢
谢谢
------解决方案--------------------1.你不能Inner inner = new Inner() 这样创建,这样程序不知道你要创建的是指那个类,如果有另个类也叫Inner()也是可以的,内部类对他不产生影响,你想创建内部类是应该这样:
Outer outer=new Outer();
Outer.Inner inner = new outer.Inner();
------解决方案--------------------它的生命周期超出方法运行的生命周期
这句话不一定对的,虽然很多地方都是这么说
这个应该是表面看起来的现象和实际效果一样才导致可以这么说
这要从final的意义讲起,很多书上都有误导的意思,而且根本没有解释final的意义,只是告诉你什么样的情况下不可以使用它
而常常在面试的时候回答也是一塌糊涂.
实际上final不是不可修改,恰恰是可以修改,只是不能重新赋值,也就是不能更改的它的引用
接下来再说Java的垃圾收集机制,简称GC
简单来讲,当Java的GC发现变量没有指向即指向null的时候,这个变量所占的空间就有可能会被回收掉
现在来说方法内部定义的final变量
假如不是final的,那么要是此变量指向了null,那么内部类所做的引用就会出现问题
但是假如是final的话,就能保证不会因为指向null而发生异常