Maison > Java > javaDidacticiel > Récrire: Quelles sont les manières de référencer des classes Java ?

Récrire: Quelles sont les manières de référencer des classes Java ?

PHPz
Libérer: 2023-05-10 09:28:08
avant
1244 Les gens l'ont consulté

1. La référence active d'une classe provoquera certainement l'initialisation de la classe. Au démarrage de la machine virtuelle, initialisez d'abord la classe où se trouve la méthode principale

Instanciez un objet de la classe

Appelez les membres statiques (sauf les constantes finales) et les méthodes statiques de la classe

Utilisez la méthode du java Package .lang.reflect pour effectuer l'appel de réflexion de classe

Lors de l'initialisation d'une classe, si sa classe parent n'a pas été initialisée, sa classe parent sera initialisée en premier

2. Référence passive de la classe, pas d'initialisation de la classe. se produira

Lors de l'accès à un champ statique, seule la classe qui déclare réellement ce champ sera initialisée. Par exemple : lors du référencement de variables statiques de la classe parent via une sous-classe, cela n'entraînera pas l'initialisation de la sous-classe.

La définition de références de classe via des tableaux ne déclenchera pas l'initialisation de cette classe.

Le référencement des constantes ne déclenchera pas l'initialisation. de cette classe (les constantes sont en phase de liaison) Elle est stockée dans le pool de constantes de la classe appelante)

Instance

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;
 
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers numéros
Impossible d'installer Java
Depuis 1970-01-01 08:00:00
0
0
0
Java peut-il être utilisé comme backend du Web ?
Depuis 1970-01-01 08:00:00
0
0
0
Installer JAVA
Depuis 1970-01-01 08:00:00
0
0
0
Aide : Données chiffrées JAVA Décryptage PHP
Depuis 1970-01-01 08:00:00
0
0
0
Est-ce en langage Java ?
Depuis 1970-01-01 08:00:00
0
0
0
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal