跟王老师学反射:Class类:获得Class对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟王老师学反射:Class类:获得Class对象相关的知识,希望对你有一定的参考价值。

跟王老师学反射(三):Class类:获得Class对象

主讲教师:王少华   QQ群号:483773664

学习内容

掌握获得Class对象的三种方式

理解这三种方式的区别

一、获得Class对象

前面我们已经领略了反射的魅力了,我们知道,利用反射的关键是要获得“图纸”Class对象,那么怎么获得这个Class对象呢!!!

每个类被加载之后,系统会为该类生成一个对应的Class对象,通过该Class对象就可以访问JVM中的这个类。Java程序获得Class对象有如下三种方式:

(一)调用某个对象的getClass()方法:通过具体对象获得图纸

该方法是java.lang.Object类中的一个方法,所以所有Java对象都可以调用该方法,该方法将返回该对象所属类对应的Class对象

1
public final Class getClass()
1
2
3
4
public static void test1(){
        Floor floor= new Floor();
        Class<Floor> floorClass = (Class<Floor>) floor.getClass();
    }

(二)调用某个类的class属性来获取该类的对应的Class对象:相当于拿着图纸再复印一份图纸

例如Floor.class将会返回Floor类对应的Class对象

1
2
3
public static void  test2() {
    Class<Floor> floorClass = Floor.class;
}

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

该方法需要传入字符串参数,该字符串参数的值是某个类的全限定类名(必须添加完整包名)。如果没有找到这个类,就会抛出ClassNotFoundException异常

相当于打印一份图纸,打印的时候,我们得要知道打印东西的路径

1
2
3
4
public static void  test3() throws ClassNotFoundException {        
        Class<Floor> floorClass2 = (Class<Floor>) Class.forName("chapter09_03.Floor");//正确
    }

二、使用哪种方式获取Class对象

第二种方式和第三种方式都是直接根据类来取该类的Class对象,但相比之下,第二种方式有如下两种优势 

  1. 代码更安全,程序在编译阶段就可以检查需要访问的Class对象是否存在。

  2. 程序性能更高,因这种方式无须调用方法,所以性能更好。

所以,大多部时间,我们使用第二种方式来获得Class对象







以上是关于跟王老师学反射:Class类:获得Class对象的主要内容,如果未能解决你的问题,请参考以下文章

跟王老师学反射:Class类:从Class类中获取信息

跟王老师学反射使用反射调用属性

跟王老师学注解:利用反射读取注解信息

跟王老师学反射:使用反射生成并操作对象

跟王老师学反射:使用反射操作数组

跟王老师学反射:动态代理