类的引用的简单理解

类的引用的简单理解

类的主动引用,一定会引起类的初始化

当虚拟机启动,先初始化main方法所在的类
1.new一个类的对象
2.调用类的静态成员(除了final常量)和静态方法
3.使用java.lang.reflect包的方法对类进行反射调用
4.当初始化一个类的时候,如果其父类没有被初始化,则会先初始化它的父类

类的被动引用 不会发生类的初始化

1.访问一个静态域时,只有真正的声名这个域的类才会被初始化。如:当通过子类引用父类的静态变量,不会导致子类被初始化
2.通过数组引用定义类时,不会触发此类的初始化
3.引用常量不会触发此类的初始化(常量在链接阶段就存入调用类的常量池中了)

public class Demo3 {
    static{
        System.out.println("mian方法所在类被初始化");
    }
    public static void main(String[] args) throws  ClassNotFoundException{
        /*
          类的主动引用,一定会引起类的初始化 当虚拟机启动,先初始化main方法所在的类
          1.new一个类的对象
          2.调用类的静态成员(除了final常量)和静态方法
          3.使用java.lang.reflect包的方法对类进行反射调用
          4.当初始化一个类的时候,如果其父类没有被初始化,则会先初始化它的父类
         */
        //new一个类的对象
        //Animal animal = new Animal();//mian方法所在类被初始化 父类被初始化
        //调用类的静态成员(除了final常量)和静态方法
        //System.out.println(Animal.num);//mian方法所在类被初始化 3
        //System.out.println(Animal.name);//mian方法所在类被初始化 父类被初始化 狗
        //Animal.print();//mian方法所在类被初始化 父类被初始化 动物在叫
        //使用java.lang.reflect包的方法对类进行反射调用
        //Class c1 = Class.forName("exam.reflect.Cat");// mian方法所在类被初始化 父类被初始化 子类被初始化
        //当初始化一个类的时候,如果其父类没有被初始化,则会先初始化它的父类
        //Cat cat = new Cat();// mian方法所在类被初始化 父类被初始化 子类被初始化
         /*
           类的被动引用  不会发生类的初始化
           1.访问一个静态域时,只有真正的声名这个域的类才会被初始化。如:当通过子类引用父类的静态变量,不会导致子类被初始化
           2.通过数组引用定义类时,不会触发此类的初始化
           3.引用常量不会触发此类的初始化(常量在链接阶段就存入调用类的常量池中了)
         */
        //子类引用父类的静态变量,不会子类被初始化
        //System.out.println(Cat.name);mian方法所在类被初始化 父类被初始化 狗
        //通过数组引用定义类时,不会触发此类的初始化
        //Animal[] animals = new Animal[5];//mian方法所在类被初始化
        //Cat[] cats = new Cat[6];//mian方法所在类被初始化
        //引用常量不会触发此类的初始化
        //System.out.println(Animal.NAME);//mian方法所在类被初始化 动物

    }
}
class Animal{
    static{
        System.out.println("父类被初始化");
        name = "猫";
    }
    static String  name = "狗";
    static  int num = 3;
    public static final String NAME = "动物";
    public static void print(){
        System.out.println("动物在叫");
    }
} class Cat extends Animal{
    static {
        System.out.println("子类被初始化");
    }
    static String color  = "黄色";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值