本文共 4529 字,大约阅读时间需要 15 分钟。
import java.util.Random;/** * 在这里编写类的功能描述 * * @author wangkai * @created 2019/12/31 */public class MyTest7 { public static void main(String[] args) { System.out.println(FinalTest.x); System.out.println("---------"); System.out.println(FinalTest.y); }}class FinalTest{ public static final int x=3; public static final int y=new Random().nextInt(3); static { System.out.println("FinalTest static block"); }}
通过编译对比code为3的和18的可以看出
Compiled from "MyTest7.java"public class MyTest7 { public MyTest7(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."":()V 4: return public static void main(java.lang.String[]); Code: 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: iconst_3 4: invokevirtual #4 // Method java/io/PrintStream.println:(I)V 7: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 10: ldc #5 // String --------- 12: invokevirtual #6 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 15: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 18: getstatic #7 // Field FinalTest.y:I 21: invokevirtual #4 // Method java/io/PrintStream.println:(I)V 24: return}
/* * Copyright (c) 2019 maoyan.com * All rights reserved. * *//** * 在这里编写类的功能描述 * * @author wangkai * @created 2019/12/31 */public class MyTest9 { static{ System.out.println("MyTest10 static block"); } public static void main(String[] args) { Parent2 parent2; System.out.println("--------"); parent2=new Parent2(); System.out.println("--------"); System.out.println(parent2.a); System.out.println("--------"); System.out.println(Child2.b); }}class Parent2{ static int a=3; static { System.out.println("Parent2 static block"); }}class Child2 extends Parent2{ static int b=4; static { System.out.println("Child2 static block"); }}
/* * Copyright (c) 2019 maoyan.com * All rights reserved. * *//** * 在这里编写类的功能描述 * * @author wangkai * @created 2019/12/31 */public class MyTest9 { static{ System.out.println("MyTest10 static block"); } public static void main(String[] args) { Parent2 parent2; System.out.println("--------"); parent2=new Parent2(); System.out.println("--------"); System.out.println(parent2.a); System.out.println("--------"); System.out.println(Child2.b); }}class Parent2{ static int a=3; static { System.out.println("Parent2 static block"); }}class Child2 extends Parent2{ static int b=4; static { System.out.println("Child2 static block"); }}
/* * Copyright (c) 2019 maoyan.com * All rights reserved. * *//** * 在这里编写类的功能描述 * * @author wangkai * @created 2019/12/31 */public class MyTest10 { public static void main(String[] args) { //通过子类调用父类静态变量,静态方法,都是对父类的主动使用 System.out.println(Child3.a); System.out.println("---------"); Child3.doSomething(); }}class Parent3{ static int a=3; static { System.out.println("Parent3 static block"); } static void doSomething(){ System.out.println("do something"); }}class Child3 extends Parent3{ static { System.out.println("child3 static block"); }}
/* * Copyright (c) 2019 maoyan.com * All rights reserved. * *//** * 调用ClassLoader类的loadClass方法加载一个类,并不是对类的主动使用,不会导致类的初始化,反射调用会触发类的初始化 * * @author wangkai * @created 2019/12/31 */public class MyTest11 { public static void main(String[] args) throws ClassNotFoundException { ClassLoader loader=ClassLoader.getSystemClassLoader(); Class clazz=loader.loadClass("CL"); System.out.println(clazz); System.out.println("-----------"); clazz=Class.forName("CL"); System.out.println(clazz); }}class CL{ static { System.out.println("Classsss CL"); }}
转载地址:http://mobjn.baihongyu.com/