类中直接定义的代码块分为两种,静态和非静态的,二者的区别如下:
一.非静态代码块
直接定义在类中的且没有static修饰符的代码块如下:
public class Father {
{
System.out.println("非静态代码块");
}
public static void main(String[] args) {
Father father=new Father();
}
}
它会在对象被创建的时候执行,所以该段代码的运行结果如下:
二.静态代码块
我们再来看看静态代码块,有static符修饰,它是在类加载的时候执行:
public class Father {
static{
System.out.println("静态代码块");
}
public static void main(String[] args) {
Father father=new Father();
}
}
三.区别
那么创建对象时执行和类加载时执行有什么区别呢?我们连续创建两个对象再来看看运行结果:
public class Father {
{
System.out.println("非静态代码块");
}
public static void main(String[] args) {
Father father=new Father();
Father father1=new Father();
}
}
这是非静态代码块的运行结果,每创建一个对象就会打印一次,创建了两个对象便打印了两次,接下来再看静态代码块:
public class Father {
static{
System.out.println("静态代码块");
}
public static void main(String[] args) {
Father father=new Father();
Father father1=new Father();
}
}
静态代码块的运行结果只打印了一次
这便是二者的区别,类加载时执行后再就不会执行了,而非静态代码块每创建一个对象就执行一次