Class.forName()与类名.class以及getClass()的比较

本文详细介绍了在Java中获取类的Class对象的三种方式,并对比了它们在类初始化方面的区别,通过代码实例展示了使用Class类的不同方法如何影响类的加载和初始化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

得到类的class对象我们可以通过三种方式获得:

1.Class c=类名.class;  

                  使用这种方式获取Class对象,注意的是如果这个类没有被加载过,它将不会初始化这个类

2:Class c=对象.getClass();

                  返回对象真正所属的类的Class的对象(当上转型为父类时,如果使用这种方式,那么得到的会是这个对象真正所属类的class对象)例如:

  A a=new B();//B是A的子类。那么调用a.getClass(),则是对应B类的class对象。


3:Class c=Class.forName("类名");

                  这种方式可以得到Class对象,并且如果这个类没有被加载过它将会初始化这个类。


查看.class与Class.forName()在初始化方面的区别。

class demo1{
	final static String s="demo1";
	 static {
		 System.out.println("demo1被初始化");
	 }
	 demo1(){
		 System.out.println("newInstance调用默认无参数构造器");
	 }
}

class demo2{
	 static String s="demo2";
	 static {
		 System.out.println("demo2被初始化");
	 }
	 
}
class demo3{
	 static String s="demo3";
	 static {
		 System.out.println("demo3被初始化");
	 }
	 
}
public class ClassAndClassforNameTest
{
  
   
	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException
	{
		System.out.println("------------Class.class方式--------------");
		//System.out.println(demo1.s);//这句可以证明使用final static常量不需要初始化类
		Class<demo1> c=demo1.class;//只加载了类,并没有初始化类。
		//c.newInstance();//通过class对象创建实例也会初始化类,而且调用了无参构造器
		
		System.out.println("------------new class方式--------------");
		demo2 instance=new demo2();//这个肯定都知道,初始化了类
		
		System.out.println("------------class.forName方式--------------");
		Class<demo3> f=(Class<demo3>) Class.forName("demo3");//使用Class.forName()时也会初始化类
	}
}

输出结果:

------------Class.class方式--------------
------------new class方式--------------
demo2被初始化
------------class.forName方式--------------
demo3被初始化



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值