技术问 - 成员内部类、局部内部类

成员内部类

在类的成员位置

使用:

外部类.内部类  对象名 = 外部类对象.内部类对象;

代码:

/**
 * 在内部类中访问外部类:使用  外部类.this
 */
public class InnerDemo1 {

    public static void main(String[] args) {
        Outer.Inner inner = new Outer().new Inner();
        inner.show();
    }
}

class Outer{
    public int num = 10;
    class Inner{
        public int num = 20 ;
        public void show(){
            int num = 30;
            System.out.println(num);//30
            System.out.println(this.num);//20
            System.out.println(Outer.this.num);//10
        }
    }
}

局部内部类:

定义在方法内的类

使用:

可以创建内部类的对象,通过内部类对象操作内部类成员

代码:

public class InnerDemo2 {

    public static void main(String[] args) {
        Outer1 inner = new Outer1();
        inner.show();
    }
}

class Outer1 {
    public void show() {
        //应该使用final修饰,但是1.8没有报错呀?
        //查看class文件发现:int num = 30; 变成了 final int num = 30;
        int num = 30;
        class Inner1 {
            public void method() {
                /*
                 * 查看class文件发现:num还是num,而不是30;       
                 */
                System.out.println("局部内部类--method"+num);
            }           
        }
        Inner1 inner1 = new Inner1();
        inner1.method();
    }
}

局部内部类访问局部变量的注意事项?

局部变量需要使用final修饰
    1.8之前:局部内部类使用局部方法,书写时使用final修饰,
        编译后的class文件中使用变量位置是变量值
    1.8版本:局部内部类使用局部方法,书写时不使用final修饰,
        编译后的class文件中自动给变量加入final修饰,且使用变量位置还是变量名

说明:不确定是1.7之前还是1.8之前

你可能感兴趣的:(技术问 - 成员内部类、局部内部类)