跟王老师学反射: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对象,但相比之下,第二种方式有如下两种优势
代码更安全,程序在编译阶段就可以检查需要访问的Class对象是否存在。
程序性能更高,因这种方式无须调用方法,所以性能更好。
所以,大多部时间,我们使用第二种方式来获得Class对象
以上是关于跟王老师学反射:Class类:获得Class对象的主要内容,如果未能解决你的问题,请参考以下文章