加载类的初始化过程
1 static属于类的变量,static方法属于类方法,他们都通过类名.方法/属性进行调用。在JVM加载类时,首先会从下到下加载类的static代码块或static变量(它们是按照上下顺序加载的)。对于static方法也加载了,但是没有具体的实现。我的理解就是:static方法的加载和其他的方法加载都会在类被JVM加载的,但是只是加载了一个引用(这里不是类的引用而是方法的引用,就好像接口声明了一个方法差不多),并没有具体的实现,当通过类名+static方法的时候,static方法才会被真正的加载,普通方法在new class()+方法调用的时候才会被真正的初始化。
调用顺序如果有继承的话:父类的静态代码块->子类的静态代码块->父类的静态变量->子类的静态变量->父类的普通初始化对象->子类的普通初始化对象->父类构造方法->子类构造方法!
代码Father父类!
package com.demo.ex.demo;
/**
* 子类继承父类的加载过程
*
* @author dan.wang
*
*/
public class Father {
static ExternalConfig ec = new ExternalConfig("father's static param");
@SuppressWarnings("unused")
private String name;
@SuppressWarnings("unused")
private String age;
static {
System.out.println("Father's static field");
}
public Father() {
System.out.println("Faher constructure");
// display();
}
ExternalConfig ecc = new ExternalConfig("father' param no static");
public Father(String name, String age) {
this.name = name;
this.age = age;
System.out.println("Faher two params constructure");
}
public static void fatherSMA() {
System.out.println(