Heim  >  Artikel  >  Java  >  Umschreiben: Welche Möglichkeiten gibt es, Java-Klassen zu referenzieren?

Umschreiben: Welche Möglichkeiten gibt es, Java-Klassen zu referenzieren?

PHPz
PHPznach vorne
2023-05-10 09:28:081171Durchsuche

1. Der aktive Verweis auf eine Klasse führt definitiv zur Initialisierung der Klasse. Wenn die virtuelle Maschine startet, initialisieren Sie zuerst die Klasse, in der sich die Hauptmethode befindet.

Instanziieren Sie ein Objekt der Klasse.

Rufen Sie die statischen Mitglieder (außer Endkonstanten) und statischen Methoden der Klasse auf.

Verwenden Sie die Methode von Java .lang.reflect-Paket zum Ausführen des Klassen-Reflection-Aufrufs

Wenn beim Initialisieren einer Klasse ihre übergeordnete Klasse nicht initialisiert wurde, wird ihre übergeordnete Klasse zuerst initialisiert

2 Passive Referenz der Klasse, keine Initialisierung der Klasse wird auftreten

Beim Zugriff auf ein statisches Feld wird nur die Klasse initialisiert, die dieses Feld tatsächlich deklariert. Beispiel: Wenn über eine Unterklasse auf statische Variablen der übergeordneten Klasse verwiesen wird, wird die Unterklasse nicht initialisiert.

Das Definieren von Klassenreferenzen über Arrays löst nicht die Initialisierung dieser Klasse aus dieser Klasse (Konstanten befinden sich in der Linkphase) Sie wird im Konstantenpool der aufrufenden Klasse gespeichert)

Instanz

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;
 
}

Das obige ist der detaillierte Inhalt vonUmschreiben: Welche Möglichkeiten gibt es, Java-Klassen zu referenzieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen