首頁 >Java >java教程 >重寫: 有哪些方法可以引用Java類別?

重寫: 有哪些方法可以引用Java類別?

PHPz
PHPz轉載
2023-05-10 09:28:081207瀏覽

1、類別的主動引用,一定會發生類別的初始化。 當虛擬機器啟動,先初始化main方法所在的類別

實例化一個類別的物件

呼叫類別的靜態成員(除了final常數)和靜態方法

使用java.lang.reflect包的方法對類別進行反射調用

當初始化一個類,如果其父類沒有被初始化,則先會初始化它的父類

2、類別的被動引用,不會發生類別的初始化

當存取一個靜態域時,只有真正宣告這個域的類別才會被初始化。如:當透過子類別引用父類別的靜態變量,不會導致子類別初始化

透過數組定義類別引用,不會觸發此類的初始化

引用常數不會觸發此類別的初始化(常數在連結階段就存入呼叫類別的常數池中了)

實例

package com.volcano.reflection;
//什么时候会发生类的初始化,除了第一个注释一直开着,其他都要独立打开测试,否则不准确
public class TestReflection3 {
    static {
        //1.虚拟机启动就会最先初始化main方法所在的类 会
        System.out.println("main方法被加载");
    }
    public static void main(String[] args) throws ClassNotFoundException {
        //2.实例化一个对象 会
        //new Father();
        //3.调用类的静态成员(除了final常量)和静态方法 会
        //System.out.println(Son.a);
        //4.使用java.lang.reflect包的方法对类进行反射调用 会
        //Class cls = Class.forName("com.volcano.reflection.Father");
        //5.当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类 会
        //new Son();
 
        //6.当访问一个静态域时,只有真正声明这个域的类才会被初始化 不会
        //System.out.println(Father.a);//两个都是只加载Father
        //System.out.println(Son.a);//因为a是Father的静态成员
        //7.通过数组定义类引用,不会触发此类的初始化 不会
        //Father[] fathers = new Father[10];
        //8.引用常量不会触发此类的初始化 不会
        //System.out.println(Father.B);
 
    }
}
class Father{
    static {
        System.out.println("Father被加载");
    }
    static int a=100;
    static final int B = 300;
}
class Son extends Father{
    static {
        System.out.println("Son被加载");
    }
    static int c=200;
 
}

以上是重寫: 有哪些方法可以引用Java類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除