静态代码块在何时调用

Posted jpfss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态代码块在何时调用相关的知识,希望对你有一定的参考价值。

概括的说:静态代码块在类加载时调用,并且只调用一次。
静态代码块最常用的作用就是:给一个对象的属性初始化。
具体的说:
1.当调用一个类的静态变量时,这个类中的静态代码块会执行。【只有静态代码块会执行】
2.当调用一个 类的静态方法时,这个类中的静态代码块会执行。【只有静态代码块会执行】
3.当创建一个 类的一个实例时,这个类中的静态代码块、非静态代码块(也叫构造代码块)、创建实例的相应的构造方法都会执行。
//示例代码如下:
 package com.qls.test;
/**
 * 在创建Test6的一个实例时:即Test6 test6=new Test6();
 * 调用的顺序依次是:静态代码块、非静态代码块、构造方法。并且静态代码块只运行依次。
 * 每创建一个Test6实例,非静态代码块、构造方法都会执行。这与静态代码块只执行一次是不同的。
 * @author 秦林森
 *
 */
public class Test6 {
/**
* 静态代码块
* @param args
*/
static{
System.out.println("Test6 static block");
}
/**
* 非静态代码块
* @param args
*/
{
System.out.println("Test6 non-static block");
}
/**
* 构造方法
* @param args
*/
public Test6() {
System.out.println("Test6 constructor with no arguments");
}
public Test6(String id){
System.out.println("Test6 constructor with one argument id"+ id);
}
public static int book=1;
public static  void sixi(){
System.out.println("static method");
}
 
public static void main(String[] args) {
// TODO Auto-generated method stub
/*new Test6();
System.out.println("*****************");
new Test6("1");*/
 
//System.out.println(Test6.book);//调用静态变量时,只有静态代码块会执行。
Test6.sixi();//在调用静态方法时,只有静态代码块会执行。
//Test6.class.getClassLoader().loadClass(Test6.class.getName());//在Test6下面的main方法写这个语句,静态代码块会执行,
//但是不在Test6这个类下面,这句话就不能让静态代码块执行。 
//Class.forName(Test6.class.getName());//加载Test6时,只有静态代码块会执行。 
}
 
}/*Output:
Test6 static block
Test6 non-static block
Test6 constructor with no arguments
*****************
Test6 non-static block
Test6 constructor with one argument id1*///:~
 












以上是关于静态代码块在何时调用的主要内容,如果未能解决你的问题,请参考以下文章

Java的静态块和初始化块分别何时执行?有啥区别?

静态代码块静态变量构造方法及构造块执行顺序

Java中静态代码块构造代码块的区别

java-普通代码块构造代码块和静态代码块的区别。

static{}(静态代码块)与{}(非静态代码块)的异同点(转自 べ袽猓柯苡づ)

java基础第五天_静态代码块类的继承和接口