Java静态代码块和普通代码块的区别
1、先看示例,写出main方法的输出结果
package com.example.demo;
public class ClassB extends ClassA{
/**
* 构造函数
*/
public ClassB(){
System.out.println("ClassB");
}
/**
* 普通代码块
*/
{
System.out.println("I`m B class");
}
/**
* 静态代码块
*/
static {
System.out.println("static B");
}
public static void main(String[] args) {
new ClassA();
new ClassA();
}
}
class ClassA{
/**
* 构造函数
*/
public ClassA(){
System.out.println("ClassA");
}
/**
* 普通代码块
*/
{
System.out.println("I`m A class");
}
/**
* 静态代码块
*/
static {
System.out.println("static A");
}
}
2、输出结果
static A
static B
I`m A class
ClassA
I`m A class
ClassA
3、总结
static {
//静态代码块,优先于普通代码块执行,静态代码块中使用的变量必须是静态变量。
//一般是为了加载properties文件信息,只会被执行一次。
}
{
//普通代码块,在静态代码块之后执行,在构造函数之前执行,所以执行顺序是【静态代码块->普通代码块->构造行数】
//每次new一个对象都会执行一次
}
static静态代码块,只会被执行一次。
普通代码块和构造函数,每次new一个对象都会执行一次。