父类的引用指向子类对象时 例如Animal animal = new Dog();(此处Animal时父类,Dog是子类)在new Dog这个子类的实例对象之前,编辑器会首先将父类Animal进行类初始化,如果父类中有静态的属性或者方法,就会随着父类的初始化进行运行,因为静态的属性或者方法是从属于类的,不是属于某个对象。
类初始化完成后,创建子类的实例对象时会先将父类的实例对象创建好,再创建子类的实例对象。
而在调用子类中的构造方法(有无参数都可以)时,如果再构造方法中没有明确指出调用父类的哪个构造方法,系统会自动默认调用父类中的空参构造器,意思就是,在调用子类的构造器的同时,父类的构造器也会被调用到。
一个类中可以定义:属性、代码块、构造器(构造方法)、普通方法
代码块: 定义方式有 静态代码块 和 非静态代码块 。 定义方式为:静态代码块定义方式(static { }; ) 非静态代码块定义方式为( { }; ),静态的代码块优先级高于非静态的代码块 (静态代码块从属于类,会在类初始化时就跟随着执行)
构造器分有参构造器和无参构造器
其中在运行时,代码块的优先级大于构造器,即在运行过程中是先执行代码块里面的代码,再执行后面的代码