java类的两种引用方法

1、类的主动引用,一定会发生类的初始化。当虚拟机启动,先初始化main方法所在的类

实例化一个类的对象

调用类的静态成员(除了final常量)和静态方法

使用java.lang.reflect包的方法对类进行反射调用

当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类

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

当访问一个静态域时,只有真正声明这个域的类才会被初始化。如:当通过子类引用父类的静态变量,不会导致子类初始化

通过数组定义类引用,不会触发此类的初始化

引用常量不会触发此类的初始化(常量在链接阶段就存入调用类的常量池中了)

实例

packagecom.volcano.reflection;
//什么时候会发生类的初始化,除了第一个注释一直开着,其他都要独立打开测试,否则不准确
publicclassTestReflection3{
static{
//1.虚拟机启动就会最先初始化main方法所在的类会
System.out.println("main方法被加载");
}
publicstaticvoidmain(String[]args)throwsClassNotFoundException{
//2.实例化一个对象会
//newFather();
//3.调用类的静态成员(除了final常量)和静态方法会
//System.out.println(Son.a);
//4.使用java.lang.reflect包的方法对类进行反射调用会
//Classcls=Class.forName("com.volcano.reflection.Father");
//5.当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类会
//newSon();

//6.当访问一个静态域时,只有真正声明这个域的类才会被初始化不会
//System.out.println(Father.a);//两个都是只加载Father
//System.out.println(Son.a);//因为a是Father的静态成员
//7.通过数组定义类引用,不会触发此类的初始化不会
//Father[]fathers=newFather[10];
//8.引用常量不会触发此类的初始化不会
//System.out.println(Father.B);

}
}
classFather{
static{
System.out.println("Father被加载");
}
staticinta=100;
staticfinalintB=300;
}
classSonextendsFather{
static{
System.out.println("Son被加载");
}
staticintc=200;

}

以上就是java类的两种引用方法,希望对大家有所帮助。更多Java学习指路:Java基础

原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容