package com.hongxue;
public class FinalTest {
public static void main(String[] args) {
System.out.println(Test.x);
}
}
class Test{
//x是编译时候的常量,不会导致类被初始化
public static final int x=6/3;
static{
System.out.println("FinalTest static block");
}
}
package com.hongxue;
import java.util.Random;
class Test2{
//x是非编译时候的常量
public static final int x= new Random().nextInt(100);
static{
System.out.println("FinalTest2 static block");
}
}
public class FinalTestAnother {
public static void main(String[] args) {
System.out.println(Test2.x);
}
}
package com.hongxue;
public class Sample {
//加载过程将0赋给了a
//将1赋值给a
//将2赋值给a
//将4赋值给a
static int a=1;
static {
a=2;
}
static {
a=4;
}
public static void main(String[] args) {
System.out.println("a="+ a);
}
}
package com.hongxue;
class Parent2{
static int a=3;
static{
System.out.println("Parent static block");
}
}
class Child2 extends Parent2{
static int b=4;
static{
System.out.println(" Child2static block");
}
}
/**
*
* 对子类的主动使用,会导致父类的初始化
* 对父类的主动使用,不会导致子类的初始化
*
* */
public class Test5 {
static{
System.out.println("Test5 static block");
}
public static void main(String[] args) {
@SuppressWarnings("unused")
//下面的代码不是主动使用
Parent2 parent;
System.out.println("---------");
parent = new Parent2();
System.out.println(Parent2.a);
//在一个类加载器中,不能够两次初始化同一个类
System.out.println(Child2.b);
}
}
package com.hongxue;
class Parent{
static int a=3;
static{
System.out.println("Parent static block");
}
}
class Child extends Parent{
static int b=4;
static{
System.out.println("Child static block");
}
}
//程序的启动类先加载
//主动使用 先初始化父类
public class Test4{
static {
System.out.println("Test4 static block");
}
public static void main(String[] args) {
System.out.println(Child.b);
}
}
package com.hongxue;
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{
//此类不会被初始化,因为访问a的时候,a不在Child3中,所以不是对Child3的主动使用
//而是对父类的主动使用
static {
System.out.println("Child3 static block");
}
}
public class Test6 {
public static void main(String[] args) {
//不是对当前类的主动使用,Child3不会被初始化
System.out.println(Child3.a);
Child3.doSomething();
}
}
package com.hongxue;public class FinalTest { public static void main(String[] args) { System.out.println(Test.x); }}class Test{ //x是编译时候的常量,不会导致类被初始化 public static final int x=6/3; sta