要想了解反射,首先要知道一个概念Class。这个Class可不是我们通常所说的class。
我们通常说String, Integer, ArrayList 这些都属于class,或者我们自己定义的类Point,Person都属于class。
这么多的类用一个类型表示就是Class。
比如一个Person类new出来的类型就是人,人有很多属性,比如身高,体重,性别,还有很多动作,比如走,跑,跳,这些是人的方法。
那这个Class类new出来的类型就是class,java的类也有很多属性,比如名称,所在的包,继承的父类,还有里面的成员变量,成员方法,构造函数等等。
我们new一个Person 会 Person person = new Person();
那我们获取一个Class要如何获取呢
java提供了三种方式可以获取一个类的Class,我们以String为例
1. Class clz = String.class;
2. String s = new String();
Class clz = s.getClass();
3. Class clz = Class.forName("java.lang.String"); 用过jdbc的看这种方式眼熟
这三种方式本质上没有区别,只不过前两种在编译时指定了获取Class的类型,而第三种方式在运行时可以通过参数指定Class的类型。
需要注意的一点是不光引用类型的变量有Class,基本数据类型也有Class
Class clz = int.class;
我们可以通过clz来判断该类型是不是基本的数据类型
clz.isPrimitive();
clz.getName(); //获取类的名字
clz.getPackage();//获取该类所在的包
我们还可以获取类的成员变量,成员方法,构造方法。
Person p = new Person();
Class clz = p.getClass();
Constructor[] con = clz.getConstructors();//只能访问类中声明为public的构造函数
//Constructor[] con = clz.getDeclaredConstructors();//能访问类中所有的构造函数
for (Constructor c : con) {
System.out.println(c.getName());
}
Field[] fis = clz.getFields();//只能访问类中声明为公有的字段,私有的字段它无法访问
//Field[] fis = clz.getDeclaredFields();//能访问类中所有的字段
for (Field c : fis) {
System.out.println(c.getName());
}
Method[] mes = clz.getMethods();//只能访问类中声明为公有的方法,私有的方法它无法访问,能访问从其它类继承来的公有方法
//Method[] mes = clz.getMethods();//能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法
for (Method m : mes) {
System.out.println(m.getName());
}
我们可以看出这些信息都是运行时动态获取的,只要加载了某个类的Class,就可以动态的获取这个类里面的所有属性。
分享到:
相关推荐
#### Java反射基础 Java反射主要依赖于以下几类API: - `java.lang.Class`: 提供了获取类信息的方法。 - `java.lang.reflect.Field`: 允许访问和修改类的字段。 - `java.lang.reflect.Method`: 用于调用类的方法。 ...
#### 二、Java反射基础 在深入讨论如何操作父类之前,我们先简要回顾一下Java反射的基本概念: - **Class**: 每个类都有一个与之对应的`Class`对象,它是反射的基础。 - **Constructor**: 用于创建类的新实例。 - ...
关于标签"反射基础",在Java反射基础中,还包括了泛型信息的获取、接口实现类的判断、注解的处理等内容: 1. 泛型信息:虽然Java泛型在编译后会被擦除,但通过反射仍可以获取到泛型的实际类型。 2. 接口实现:`Class...
Java 反射基础知识点 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。下面我们来一起学习一下吧。 一、...
Java反射是Java语言的一个重要特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。反射机制使得代码能够动态地获取类的信息并调用其方法,增加了程序的灵活性和可扩展性。以下将详细介绍Java反射中的几...
Java反射基础入门 Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。本文将详细介绍Java反射的基础知识,包括反射的基本概念、工作原理、使用方法及优缺点。...
一、Java反射基础 Java反射机制是在运行时分析类的能力,包括获取类的信息(如类名、属性、方法等)、创建对象、调用方法、访问和修改属性。通过Class类、Constructor类、Method类和Field类,我们可以动态地获取和...
1. **Java反射基础** - **Class对象**:每个类在Java运行时都有一个对应的Class对象,可以通过`Class.forName()`或对象的`getClass()`方法获取。 - **构造器**:通过`Class.newInstance()`或`Constructor.new...
1. **Java反射基础** - **Class对象**:每个类在内存中都有一个Class对象,它代表了类的信息。我们可以通过`Class.forName()`方法或者`某个类.class`来获取Class对象。 - **Constructor对象**:表示类的构造器,...
首先,让我们了解Java反射的基础概念。在Java中,`java.lang.Class`类代表运行时的类信息。我们可以使用`Class.forName()`方法或者对象的`getClass()`方法来获取`Class`对象。一旦我们有了`Class`对象,就可以进一步...
总的来说,"JAVA反射机制的入门代码"是初学者理解Java反射机制的好教材,通过它,你可以学习如何动态地操作Java类,提高代码的灵活性,并掌握处理`properties`文件的基础方法。在深入学习和实践中,你将进一步理解...
1. **Java反射基础** - **Class对象**:每个类在内存中都有一个Class对象,它代表了这个类的信息。通过`Class.forName()`方法或者对象的`getClass()`方法可以获取到Class对象。 - **构造器与对象创建**:通过`...
### Java反射基础 1. **Class类与反射**:在Java中,所有类都继承自`java.lang.Class`类。通过`Class`对象可以获取类的各种信息并进行操作。例如,可以通过类名或对象获取`Class`实例,进而调用其方法获取类名、...
一、Java反射的基础概念 Java反射源于Java.lang.Class类,它代表了Java运行时的类信息。通过Class对象,我们可以获取到类的构造器、方法、字段等信息,甚至可以动态地实例化对象和调用其成员。例如,`Class<?> ...
java反射机制基础,是进入java反射机制的一把钥匙
一、反射基础 1. 类与对象的元数据:在Java中,每个类都由Class对象表示,这个对象包含了关于类的所有信息,如类名、构造器、方法、字段等。通过Class类,我们可以获取到运行时的类信息。 2. 获取Class对象:有三...
#### 一、Java反射基础 ##### 1.1 Java虚拟机方法区 Java虚拟机(JVM)中包含了多种运行时数据区,包括方法区、堆区和栈区等。其中,**方法区**是用于存储已被加载的类信息的重要区域。当JVM加载某个类时,类加载...
在本资料"java反射机制文档及代码"中,详细介绍了Java反射的基础知识和常见应用。 首先,反射的核心类是`java.lang.Class`,它代表了运行时的类信息。通过Class对象,我们可以获取到类的名称、包名、属性、构造器、...
随着面向对象编程的发展,动态类型和动态绑定的概念逐渐成熟,这为Java反射机制的出现奠定了基础。Java反射机制在JDK 1.1版本中就已经引入,但在JDK 1.5之后得到了进一步增强和完善,增加了泛型支持等功能,使得反射...
1. 反射基础: Java反射机制主要基于`java.lang.Class`类和`java.lang.reflect`包中的接口和类。`Class`对象代表了运行时的类信息,通过`Class.forName()`方法可以获取到类的`Class`对象。此外,`java.lang.reflect...