版权声明:本文为博主原创文章,未经博主允许不得转载。 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非静态代码块”