
1、static代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象就执行。
package com.z.codeblock;
public class CodeBlockDetail01 {
public static void main(String[] args) {
DD dd = new DD();
DD dd1 = new DD();
}
}
class DD{
//静态代码块
static {
System.out.println("DD的静态代码块1被执行...");
}
}
输出:
DD的静态代码块1被执行...
class DD{
//普通代码块
static {
System.out.println("DD的普通代码块1被执行...");
}
}
输出:
DD的普通代码块1被执行... DD的普通代码块1被执行...
2、类什么时候被加载
1)创建对象实例时(new)。 2)创建子类对象实例,父类也会被加载。 3)使用类的静态成员时(静态属性、静态方法)。而且父类先被加载,子类后被加载。
package com.z.codeblock;
public class CodeBlockDetail01 {
public static void main(String[] args) {
//1)创建对象实例时(new)。
//BB bb = new BB();
//2)创建子类对象实例,父类也会被加载。
//AA aa1 = new AA();
//3)使用类的静态成员时(静态属性、静态方法)。
System.out.println(Cat.n1);
}
}
class Animal{
//静态代码块
static {
System.out.println("Animal的静态代码块1被执行...");
}
}
class Cat extends Animal{
public static int n1 = 1;
//静态代码块
static {
System.out.println("Cat的静态代码块1被执行...");
}
}
class BB{
static {
System.out.println("BB的静态代码块1被执行...");
}
}
class AA extends BB{
//静态代码块
static {
System.out.println("AA的静态代码块1被执行...");
}
}
输出:
1、 BB的静态代码块1被执行... 2、 BB的静态代码块1被执行... AA的静态代码块1被执行... 3、 Animal的静态代码块1被执行... Cat的静态代码块1被执行... 1
3、普通的代码块在创建对象实例时,会被隐式的调用。被创建一次,就会调用一次。如果只是使用类的静态成员时,普通代码块不会被执行。
package com.z.codeblock;
public class CodeBlockDetail01 {
public static void main(String[] args) {
System.out.println(DD.n1);
}
}
class DD{
public static int n1 = 2;
//静态代码块
static {
System.out.println("DD的静态代码块1被执行...");
}
//普通代码块
{
System.out.println("DD的普通代码块1被执行...");
}
}
输出:
DD的静态代码块1被执行... 2
小结:
1、static代码块是类加载时执行,只会执行一次。 2、普通代码块是在创建对象时调用的,创建一次调用一次。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)