Java中获取class对象
创始人
2025-05-30 02:34:30
0

1 为什么要获取class对象

当我们要获取类的信息及方法,利用Java中的反射机制,便于我们更加灵活的编写代码,可以在程序运行时装配代码,还可以实现动态代理。

反射机制允许程序在运行期间,获取任何一个已知名称的class内部信息。

那么获取class对象及内容信息的获取,主要有三种方式。

2 使用 getClass() 方法

2.1 创建 Person 类

package com.clazz;public class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

2.2 创建测试类

package com.clazz;public class Test {public static void main(String[] args) {Person person = new Person();Class clazz = person.getClass();System.out.println(clazz.getName());}
}

输出的结果为该class完整的包路径名及类名:

com.clazz.Person

需要注意的是: 当对同一个类,同时创建多个对象实例时,class对象实际只有一份。

Person person1 = new Person();
Person person2 = new Person();
System.out.println(person1.getClass() == person2.getClass());

运行的结果为 true。

3 使用 class 静态属性

这种方式不需要对类进行实例化,直接使用类的 class 静态属性即可获取到该类的 class 对象。

package com.clazz;public class Test {public static void main(String[] args) {Class personClass = Person.class;System.out.println(personClass.getName());}
}

输出的结果为该class完整的包路径名及类名:

com.clazz.Person

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

使用这种方式获取 class 对象,需要在 forName() 方法中指定要获取 Class 对象类的全路径,即包名+类名。

package com.clazz;public class Test {public static void main(String[] args) {try {Class aClass = Class.forName("com.clazz.Person");System.out.println(aClass.getName());} catch (ClassNotFoundException e) {e.printStackTrace();}}
}

输出的结果为该class完整的包路径名及类名:

com.clazz.Person

这里有个问题需要注意,因为是我们手工指定该类的全路径信息,有可能该包未被我们引入,或者是手滑将包名、路径信息输入错误,有可能报错,所以这种方式需要向外抛出异常。

 

相关内容

热门资讯

济南警方通报:一男子伪造、买卖... 据济南公安消息,6月18日,民警接报警称,有人可办理国家机关证件及免费乘车卡,并通过网络进行售卖。 ...
原创 美... 最近,刚消停没几天的霍尔木兹海峡,又炸了锅。前不久,一艘满载货物的货船,穿过霍尔木兹海峡。按理说,自...
日媒:采购高价“战斧”导弹,日... 参考消息网6月29日报道据日本《赤旗报》6月28日报道,日本防卫省引进的美制“战斧”巡航导弹,其全寿...
原创 连... 近期,再次传来美伊冲突升级的消息,美国总统特朗普发出“灭伊”警告,试图通过强硬手段震慑德黑兰。然而,...
有色·锆概念继续大幅高开,长裕... 6月22日消息,早盘有色·锆概念继续大幅高开,长裕集团5天4板,爱迪特、东方锆业2连板,盛和资源、凯...
锂矿概念集体调整,天华新能跌超... 6月22日消息,锂矿概念集体调整,天华新能跌超10%,融捷股份逼近跌停,盛新锂能、西藏城投、天齐锂业...
存储芯片概念表现活跃,香农芯创... 6月22日消息,存储芯片概念表现活跃,香农芯创涨超10%,普冉股份、江波龙、德明利、北京君正、兆易创...
开盘20分钟沪深两市成交额突破... 6月22日消息,数据显示,开盘20分钟,沪深两市成交额突破1万亿,较上一日此时放量近1500亿,预计...
国内商品期货开盘涨跌不一,集运... 6月22日消息,国内商品期货开盘涨跌不一,集运欧线涨超2%,瓶片、乙二醇、原油涨超1%;碳酸锂跌超4...
财政部:在政府采购活动中不得采... 6月22日消息,财政部公告,根据有关法律法规,经批准,现决定在政府采购活动中对46家美国企业采取相关...