您如何从Haskell中的子线程打印毛病?-英雄云拓展知识分享
146
2023-10-25
【摘要】 本书摘自《零基础Java 从入门到精通》一书中第十二章,第1节,编者是零壹快学
第 12 章
Java反射与注解
12.1 Java反射
Java的反射机制是指在程序运行过程中动态地获取一个类或对象的成员属性及方法。在程序运
行中,通过反射机制还可以动态地修改对象的信息。
Java中的java.lang.reflect包提供了对反射的支持。该包提供的Constructor类、Field类和Method 类分别用来访问和存储类的构造方法、成员变量和成员方法。在Java中,反射主要是通过java.lang. Class类的方法实现的,本节将详细介绍Class类以及如何使用反射。
12.1.1 java.lang.Class类介绍
Java是一门面向对象的编程语言。在面向对象的世界里,万物皆对象,现实世界中的事物被抽 象并封装成一个类, 并在类中添加相应的成员变量和方法。既然万物皆对象, 那么一个类是不是 对象呢?
Java编程中的每一个类都是一个对象,是java.lang.Class类的对象。也就是说,每一个类既有自 己的对象,同时也是Class类的对象。下面将详细讲述如何表示Class类的对象。
由于Class类的构造方法是私有的,因此我们无法通过new关键字创建Class对象的引用。但是, Java提供了几种获取Class对象的方法。
方法一:使用对象的getClass()方法获取Class对象的引用。
动手写12.1.1
基 础 Java 从入门到精通
LINGJICHU JAVA CONGRUMENDAOJINGTONG
// 创建一个Student类的对象
Student student = new Student();
//通过 getClass() 方法获取Class对象
Class clazz = student.getClass();
}
}
/**
* 自定义学生类
*/
class Student {
}
方法二:任何一个类都有一个隐含的静态成员变量class,通过该静态成员获取Class对象的
引用。
动手写12.1.2
方法三:使用Class类的静态方法forName(), 它使用一个包含目标类的字符串作为输入,返回 一个Class对象的引用。因为这个方法传入的是一个字符串形式的类路径,所以通过该方式获取 Class对象时需要处理ClassNotFoundException异常,该异常代表找不到类或者类无法加载。
第 12 章 Java反射与注解
动手写12.1.3
上述三种方法都可以创建Class类的对象,但要注意的是,一个类只能有一个反射的对象,即 上面三种方法创建的Class类的对象是完全相同的。
12.1.2 获取构造方法的信息
通过Class类的getConstructors()、getConstructor()、getDeclaredConstructor()和getDeclared Constructors()方法可以访问类的构造方法,它们的返回值类型为Constructor对象或者对象的数组, 各个方法的详细描述如表12.1.1所示。
表12.1.1 获取类的构造方法
方法 功能描述
getConstructors() 返回一个Constructor对象的数组,这些对象为此Class对象所表 示的类的所有公共构造方法
getDeclaredConstructors() 返回一个Constructor对象的数组,这些对象为此Class对象所表 示的类的所有构造方法
基 础 Java 从入门到精通
LINGJICHU JAVA CONGRUMENDAOJINGTONG
(续上表)
方法 功能描述
getConstructor(Class>... parameterTypes) 返回一个Constructor对象, 它代表此Class对象所表示的类的指 定公共构造方法
getDeclaredConstructor(Class>... parameterTypes) 返回一个Constructor对象, 它代表此Class对象所表示的类或接 口的指定构造方法
java.lang.reflect.Constructor类提供了单个构造方法的信息,利用Constructor对象即可操作相应的 构造方法。Constructor类中提供的常用方法如表12.1.2所示。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~