问答详情
源自:7-8 Java 中的方法内部类

请问成员内部类和方法内部类的区别是什么?好混乱

请问成员内部类和方法内部类的区别是什么?好混乱

提问者:慕后端0385330 2015-03-02 10:14

个回答

  • Coda
    2015-03-02 10:58:37

    1.成员内部类:

    class Outer {
        class Inner{
        
        }
    }

    编译上述代码会产生两个文件:Outer.class和Inner.class


    2.方法内部类:

    把类放在方法内

    class Outer {
        public void doSomething(){
            class Inner{
            public void seeOuter(){
            }
            }
        }
    }

    (1)方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。

    (2)方法内部类对象不能使用该内部类所在方法的非final局部变量。

    因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。


  • _潇潇暮雨
    2015-03-02 10:27:06

    成员内部类是直接定义在类中的类,和成员变量和方法并列;而方法内部类是定义在方法中的类。例如:

    class Outter{
        private int id;
        // 这个是成员内部类,与成员变量和方法地位同等
        class MemberInner{
            ……
        }
        private void say(){
            ……
        }
        private void print(){
            // 这个是方法内部类,定义在方法内部
            class MethodInner{
                ……
            }
        }
    }