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

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

 

相关内容

热门资讯

机构报告:美国肥胖率超35%的... 10月16日消息,非营利组织美国卫生基金会发布报告显示,2024年美国有19个州成年人肥胖率超过35...
全球基金在上一交易日净买入16... 9月17日消息,印度国家证券存管有限公司(NSDL)数据显示,全球基金在上一交易日净买入165亿卢比...
泰铢兑美元跌0.8%至31.9... 9月15日消息,泰铢兑美元跌0.8%至31.950,为自7月31日以来最大的单日跌幅。(科股宝播报)
第十七届海峡论坛大会今日在厦门... 6月15日消息,第十七届海峡论坛大会今天(15日)上午在厦门会议中心举行。本届海峡论坛邀请台湾各界人...
6月14日新闻联播速览21条 6月14日消息,今天《新闻联播》的主要内容有:1.【新思想引领新征程】让文化和自然遗产在新时代绽放新...
四川攀枝花警方通报一起刑事案件... 央广网北京12月27日消息 12月27日,四川省攀枝花市公安局仁和区分局发布警情通报。
日本50多辆车相撞事故已致1死... ▲新京报我们视频出品(ID:wevideo) 12月26日,日本群马县发生一起超50辆车相撞的事故,...
320亿,重庆超级IPO来了 又一家车企冲向港股。背靠长安汽车和宁德时代、华为,阿维塔科技通过卖新能源汽车等,半年收入就达到122...
「黑影石,200一条,接单速来... 「核心提示」商业竞争正被AI水军们拖入一条危险“捷径”中,从比拼创新、技术、产品与服务的“明面”较量...
8亿元资金逾期未回、负债率超9... 本报(chinatimes.net.cn)记者张玫 北京报道作为曾经的“彩电大王”,康佳集团股份有限...