非静态代码块如:
以上代码块就是非静态的代码块,请注意这里的方法名、作用域、返回值、参数一概没有,非静态代码块会在每次类被调用或者被实例化时就会被执行。
静态代码块如:
- static {
- System.out.println("3");
- }
上面的代码块就是静态的代码块,同样没有方法名、作用域、返回值以及参数,静态代码块类似于静态变量,不论类被调用多少次,该区域代码只在第一次时执行一次
大家可以通过下面的代码做进一步的测试
- public class test1 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- new test1();
- new test1();
- }
- {
- System.out.println("2");
- }
- static {
- System.out.println("3");
- }
- public test1(){
- System.out.println("1");
- }
- }
输出结果为
3
2
1
2
1
从结果中发现静态代码块以及非静态代码块都会在构造函数前执行,首次访问时,静态代码块会在非静态代码块前执行
静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块