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条)