关于静态代码块、非静态代码块、构造函数、普通成员函数的调用顺序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Legends_Never_Die/article/details/84780145
import java.util.Scanner;
public class HelloJava {
	static String name;
	static {
		System.out.println(name + "静态代码块");
	}
	
	public HelloJava(String name)
	{
		this.name=name;
		System.out.println(name + "构造方法");
	}
	public void method()
	{
		System.out.println(name + "成员方法");
	}
	
	{
		System.out.println(name + "非静态代码块");
	}
	public static void main(String []args)
	{
		HelloJava s1;
		HelloJava s2=new HelloJava("s2");
		HelloJava s3=new HelloJava("s3");
		s3.method();
	}
}

输出为:
null静态代码块
null非静态代码块
s2构造方法
s2非静态代码块
s3构造方法
s3成员方法


总结:
静态代码块在声明类s1的时候就已经运行了,并且由始至终只运行一次
非静态代码块,在每次创建对象的时候会在构造方法之前运行
构造方法只有在使用new创建对象的时候才会被调用
成员方法只有主动调用的时候才会执行

这里因为name是static修饰的静态成员变量,在创建s2对象时将字符串“s2”赋给了name,所以创建s3对象时,重新调用了类的静态代码块,此时name的值还没有被s3对象所改变,于是就会输出“s2非静态代码块”

猜你喜欢

转载自blog.csdn.net/Legends_Never_Die/article/details/84780145