JAVA方法加载顺序

类加载机制:
类加载器的任务就是根据一个类的全限定名来读取次类的二进制字节流到JVM转换成 java.lang,class类
类加载过程:加载、验证、准备、解析和初始化。

双亲委托模型(确保加载的唯一性):当类收到加载请求时,它首先不会尝试加载这个类,
而是把请求委托给父类加载器执行,每个类都是如此(如果还有父类继续上交),如果父
类加载不了,子类加载才会进行加载。

关于加载、执行顺序
A a=new B() 调用顺序
先加载父类静态代码区(类方法)->子类静态代码区(类方法)->父类非静态代码区(构造块)->父类构造方法–>子类非静态代码区(构造块)->子类构造方法

public class B extends A{

	
	public B()
	{
		System.out.println("这是B类的构造方法");
	}
	
	 static 
	{
		System.out.println("这是B类的静态代码区(类方法)");
	}
	
	 public static void staticB()
	 {
		 System.out.println("这是B类的静态方法");
	 }
	{
		
		System.out.println("这是B类的构造块");
	}
	
	public static void main(String[] args) {
		
		A a=new B();
	}
	
}


class A {

	public A()
	{
		System.out.println("这是A类的构造方法");
	}
	static  
	{
		
		System.out.println("这是A类的静态代码区(类方法)");
	}
	
	public static void staticA()
	{
		System.out.println("这是A类的静态方法");
	}
	{
		System.out.println("这是A类的构造块");
	}
}

运行结果:
在这里插入图片描述
静态方法与静态代码区(类方法)的区别
静态代码块是自动执行的; 静态方法是被调用的时候才执行的
静态代码块在类加载时调用,并且只调用一次。

类中的加载顺序:
静态块-》main()->构造块(直接用{}定义 创建对象时调用)->构造函数·

由此拓展:
静态代码区不依赖于 new,即 User u =null;
User.get() //依旧可以使用其静态方法

猜你喜欢

转载自blog.csdn.net/weixin_40990818/article/details/82995488