java学习——基础入门(3)

本文为学习笔记,留作自用,不会记载的特别详细,如有错误,欢迎指正

 一、this与super

this与super都指向对象,区别在于this指向当前对象,super指向父类对象

二、static与类、对象的初始化

static为静态标识,被static标记的成员变量、方法将会被在类被加载时初始化且只加载一次,并从属于类而非对象

this可以调用静态成员变量,反过来则不行,因为static变量在类加载时初始化,此时不一定存在对象。

我们知道子类在初始化时,会先调用父类的构造方法,我们结合static来一起看下

public class PorblemSolution {
    static{
        System.out.println("static  1");
    }
    static{
        System.out.println("static  2");
    }
    public static void main(String[] args){
        Son s = new Son();
    }
}

class GrandFather{
    Person person = new Person("GrandFather");
    static{
        System.out.println("GrandFather   static");
    }    
    public GrandFather(){
        System.out.println("GrandFather   构造函数");
    }

}

class Father extends GrandFather{    
    Person person = new Person("Father");
    static{
        System.out.println("Father  static");
    }    
    public Father(){
        System.out.println("Father  构造函数");
    }
}

class Son extends Father{    
    Person person = new Person("Son");
    static{
        System.out.println("Son   static");
    }    
    public Son(){
        System.out.println("Son   构造函数");
    }

}

class Person{
    static{
        System.out.println("person static");
    }

    public Person(String str) {
        System.out.println("person "+str);
    }
}

执行结果如下:

首先加载PorblemSolution类,按顺序执行2个静态初始化块,然后实例化Son对象,实例化前,会先

加载父类GrandFather与Father,依次执行父类的静态初始化块,子类的静态初始化块,再然后初始化父类成员变量,执行父类构造方法,初始化子类成员变量,

执行子类构造方法。

争取早日不再是一只菜鸡
原文地址:https://www.cnblogs.com/jchen104/p/14664887.html