1,外部类如何引用内部类 Outer.Inner inner = outer.new Inner();其中 Outer是外部类 Inner是内部类 我直接创建一个内部类对象不是一样的吗 如Inner inner = new Inner()
2,    1,在方法内部定义的内部类只能访问方法中的final类型的局部变量  2,因为用final定义的局部变量相当于是一个常量 它的生命周期超出方法运行的生命周期
问:2怎么能作为1的依据呢
谢谢   

解决方案 »

  1.   

    方法结束后,方法所调用的局部变量也就free掉了,为了使方法所调用的变量起到作用,只能把变量设为final,所以,内部类的对象也只能在方法中使用,因为方法结束后内部的对象也会free掉。
    大概是这个意思吧
      

  2.   

    1.你不能Inner   inner   =   new   Inner() 这样创建,这样程序不知道你要创建的是指那个类,如果有另个类也叫Inner()也是可以的,内部类对他不产生影响,你想创建内部类是应该这样: 
    Outer outer=new Outer();Outer.Inner   inner   =   new   outer.Inner();
      

  3.   

    1.你不能Inner   inner   =   new   Inner() 这样创建,这样程序不知道你要创建的是指那个类,如果有另个类也叫Inner()也是可以的,内部类对他不产生影响,你想创建内部类是应该这样: 
    Outer outer=new Outer();Outer.Inner   inner   =   new   outer.Inner();
      

  4.   

    它的生命周期超出方法运行的生命周期
    这句话不一定对的,虽然很多地方都是这么说
    这个应该是表面看起来的现象和实际效果一样才导致可以这么说这要从final的意义讲起,很多书上都有误导的意思,而且根本没有解释final的意义,只是告诉你什么样的情况下不可以使用它
    而常常在面试的时候回答也是一塌糊涂.
    实际上final不是不可修改,恰恰是可以修改,只是不能重新赋值,也就是不能更改的它的引用接下来再说Java的垃圾收集机制,简称GC
    简单来讲,当Java的GC发现变量没有指向即指向null的时候,这个变量所占的空间就有可能会被回收掉现在来说方法内部定义的final变量
    假如不是final的,那么要是此变量指向了null,那么内部类所做的引用就会出现问题
    但是假如是final的话,就能保证不会因为指向null而发生异常
      

  5.   

    外部不能直接访问内部类 因为他们是在某个类内部的 外部不知道有这个类的存在 只可以通过outter 类的实例来访问