java反射机制

发布于:2024-05-04 ⋅ 阅读:(24) ⋅ 点赞:(0)

什么是class对象

类是程序的一部分,每个类都有一个class对象。换言之,每当编写并且编译了一个新类,就会产生一个class对象(更恰当的说,是被保存在一个同名的class文件中)。为了生成这个类的对象,运行这个程序的Java虚拟机(jvm)将使用被称为“类加载器”的子系统。

实际上在Java中每个类都有且只有一个Class对象。

获得class对象的三种方法:
1、调用Object类的getClass()方法来得到Class对象,这也是最常见的产生Class对象的方法。比如:

MyObject x;
Class c1 = x.getClass();

.Object.getClass(); Object中自带的方法,getclass(),返回一个class对象。

2、使用Class类的中静态forName()方法获得与字符串相应的Class对象。比如:
Class c2=Class.forName(“MyObject”),MyObject必须是接口或者类的名字。

class.forname()

Class c=Class.forName("类的全限定名")

传入string类型参数,要求jvm查找并加载指定的类,返回的是一个class对象的引用。

3、获取Class类型对象的第三个方法很easy。假设T是一个Java类型。那么T.class就代表了匹配的类对象。

Class cl1 = Manager.class;
Class cl2 = int.class;
Class cl3 = Double[].class;

注意:Class对象实际上描写叙述的仅仅是类型。而这类型未必是类或者接口。

比如上面的int.class是一个Class类型的对象。

因为历史原因。数组类型的getName方法会返回奇怪的名字。

class的作用和方法

getname():以string类型返回class对象表示的实体(类,接口,数组,基本类型,void等)名称
newInstance():创建一个实例,只能调用默认构造器。注意这个的返回值是一个object类型的对象
getsuperclass():返回class表示的实体超类的名称
getSimpleName()。不办含包名的类名。
isInterfence:告诉你这个class对象是否表示某个接口。

Class.forName()用法

主要功能
Class.forName(xxx.xx.xx)返回的是一个类。
Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。

什么时候用Class.forName()?

先来个热身,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?你第一想到的肯定是new,但是注意一点:
A a = (A)Class.forName(“pacage.A”).newInstance();
这和你 A a = new A(); 是一样的效果。

现在言归正传。
动态加载和创建Class 对象,比如想根据用户输入的字符串来创建对象时需要用到:

String str = “用户输入的字符串” ;
Class t = Class.forName(str);
t.newInstance();
在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?

它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到