Java基础重温

动态绑定

  • 动态绑定,是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法
  • Animal animal = new Cat();
  • animal.eat();

类对象的加载

public class StaticDemo {
    private static StaticDemo instance = new StaticDemo();
    static int n1;
    static int n2 = 3;
    private static StaticDemo instance2 =  new StaticDemo();
    int n3;
    int n4 = 5;

    public StaticDemo() {
        System.out.println("------构造------");
        System.out.println(++n1);
        System.out.println(++n2);
        System.out.println(++n3);
        System.out.println(++n4);
    }

    public static StaticDemo getInstance(){
        return instance;
    }

    public static void main(String[] args) {
        StaticDemo instance = StaticDemo.getInstance();
        System.out.println("--------main---------");
        System.out.println(n1);
        System.out.println(n2);
        System.out.println(instance.n3);
        System.out.println(instance.n4);
        System.out.println(instance2.n3);
        System.out.println(instance2.n4);
    }
}

//////////////////////////////////////////////////    
------构造------
1
1
1
6
------构造------
2
4
1
6
--------main---------
2
4
1
6
1
6
////////////////////////////////////////////////////
分析:
1、先对static按照文件中顺序,先默认初始化,再显示初始化。
2、显示初始化时,创建对象,则接下来继续执行如下:
    1)对成员变量默认初始化
    2)对成员显示初始化
    3)执行构造方法

局部内部类访问局部变量,局部变量必须被final修饰

因为局部变量会随着方法的调用结束而消失,这个时候,局部对象还没有从堆内存中消失,还要使用那个局部变量。为了让数据还能继续使用,使用final修饰,这样在堆内存里存储的实际上是一个常量值。(可通过反编译查看)
文章目录
|