java.lang.Class解析

java.lang.Class

1、java.lang.Class的概念

 

        当一个类或接口被装入的JVM时便会产生一个与之关联的java.lang.Class对象,java.lang.class类就是用来封装被装入JVM中的类的信息。 JVM为每种类型管理一个独一无二的Class对象。也就是说,每个类(型)都有一个Class对象。运行程序时,Java虚拟机(JVM)首先检查是否所要加载的类对应的Class对象是否已经加载。如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。

        Java的每个基本类型(boolean、byte、char、short、int、long、float 和 double)都有一个Class对象,数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。

2、Class对象的获取

有三种方法可以得到一个class对象

2.1、调用Object类的getClass()方法来得到Class对象

所有Java对象都具备这个方法,该方法返回调用该方法的对象所属类关联的Class对象

 

        Person person1 = new Person();
        Class c1 = person1.getClass();
        System.out.println(c1.getName());
        
        //再新建一个person的class对象,观察看看同一个类不同的对象生成的class对象是否相同 
        Person person2 = new Person();
        Class c2 = person2.getClass();
        System.out.println(c1==c2);
         // (1)结果发现返回true,说明对于相同的类,JVM只会载入一次,而与该类对应的Class对象也只会存在一个,无论该类实例化了多少对象。
        
        List list = new ArrayList();  
        System.out.println(list.getClass().getName()); 
        //  (2)结果发现返回java.util.ArrayList 说明当一个对象被其父类的引用或其实现的接口类型的引用所指向时,getClass方法返回的是与对象实际所属类关联的Class对象。

 

2.2、 使用.class的方式

对于一个JAVA类型,直接使用类名.class就可以得到一个class对象

 

        Class c3 = Person.class;
        Class c4 = int.class;
        Class c5 = int[].class;    
        System.out.println(c3.getName());            // 输出 com.pjf.Person
        System.out.println(c4.getName());            // 输出 int
        System.out.println(c5.getName());            // 输出 [I      注:可以看到数组返回奇怪的名字、
        System.out.println(c5.getComponentType());   //输出  int      这时候返回就正确了

2.3使用Class类的中静态forName()方法

使用Class类的中静态forName()方法获得与字符串对应的Class对象。

  Class c6=Class.forName("com.pjf.Person");
  System.out.println(c6.getName());

3、java.lang.Class类的方法

   1、getName() 
    返回Class对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

    2、newInstance()

    Class还有一个有用的方法可以为类创建一个实例,这个方法叫做newInstance()。例如:

    x.getClass.newInstance(),创建了一个同x一样类型的新实例。newInstance()方法调用默认构造器(无参数构造器)初始化新建对象。

    3、getClassLoader() 

    返回该类的类加载器。

    4、getComponentType() 

    返回表示数组组件类型的 Class。

    5、getSuperclass() 

    返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。

    6、isArray() 
    判定此 Class 对象是否表示一个数组类。

 

转载于:https://www.cnblogs.com/pjfmeng/p/7602514.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值