码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-13 14:31:25      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:class   class.forname   初始化   

得到类的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被初始化



版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:class   class.forname   初始化   

原文地址:http://blog.csdn.net/woaishuoshihuo/article/details/47610359

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!