上一章节
http://lgywindows.iteye.com/blog/1797232
反射的本质:将类的各种属性(类的变量,类的方法,类所在的包名,类的构造器等)映射成相应的java类。用"一群类"去描述和操纵一个类。
类的反射之构造器类
一 通过构造器类(Constructor)获得指定类的构造器:
1 java.lang.reflect.Constructor[] cons = String.class.getConstructors();此句将返回所有的构造器方法
2 java.lang.reflect.Constructor con = String.class.getConstructor(new StringBuffer().getClass());此句将返回指定的构造器方法
二 当使用构造器类(Constructor)获得指定类的构造方法后就可以进行实例化操作,语法:
1 Class cls = Class.forName("java.lang.String");cls.newInstance();这实际上是一种捷径式写法
2 java.lang.reflect.Constructor con = String.class.getConstructor(new StringBuffer().getClass());
String str = (String)con.newInstance(new StringBuffer("abcdefg"));这才是正常的调用程序
意义:可以在程序运行后动态的加载java类,再动态的得到类的构造器并进行初始化。
示范代码如下:
public class MyConstructor {
public static void main(String[] args) throws Exception{
java.lang.reflect.Constructor con = String.class.getConstructor(new StringBuffer().getClass());
String str = (String)con.newInstance(new StringBuffer("abcdefg"));
System.out.println(str.charAt(2));
}
}
下一章节
http://lgywindows.iteye.com/blog/1797326
分享到:
相关推荐
当获取到一个类的Class对象后,就可以通过以下方式访问它的构造器: 1. `getConstructors()`:此方法返回一个`Constructor[]`数组,包含类中所有的公共构造器。这些构造器按照声明顺序排列。 2. `...
在"658.656.JAVA基础教程_反射-调用运行时类中的指定构造器(658).rar"这个压缩包文件中,我们很显然会学到如何通过反射来调用Java类的构造器。下面将详细解释Java反射和如何使用它来调用构造器。 1. **反射的概念**...
- **运行时检查**:可以在运行时检查类的结构,包括方法、字段、构造器等信息。 - **运行时动态调用方法**:即使在编写代码时不知道具体的方法名,也可以在运行时动态调用。 - **访问私有成员**:通过反射,可以...
如果有参数的构造器,我们需要使用`getDeclaredConstructor()`或`getConstructor()`来获取指定的构造器,然后调用`newInstance()`传递参数。 4. **访问字段**: 反射可以让我们读取和修改私有字段。`Field`类代表...
如果有参数,需要使用`Constructor`类的`getDeclaredConstructor()`或`getConstructor()`方法获取构造器,然后调用`newInstance()`。 3. **访问字段**:通过`Field`类,可以获取类的私有、公共等任何可见性级别的...
2. 获取构造器:`Constructor<?> constructor = clz.getConstructor(参数类型列表)`。 3. 创建对象:`Object obj = constructor.newInstance(参数列表)`。 4. 获取方法:`Method method = clz.getMethod(方法名, ...
- `类名.class`: 直接使用类的`.class`属性获取其`Class`对象。 - `对象.getClass()`: 对象的`getClass()`方法返回该对象的`Class`对象。 2. 创建对象: - `newInstance()`: 调用无参构造器创建对象,要求类有...
当你在程序运行时获取到一个类的`Class`对象,你就可以获取该类的所有信息,包括类名、构造器、方法、字段等。这通常通过`Class.forName()`方法完成,传入类的全限定名即可。 在提供的"ReflectDemo"中,可能包含...
3. 访问构造器:`Constructor`类代表类的构造器。`getConstructors()`获取公共构造器,`getDeclaredConstructors()`获取所有构造器。 三、反射的优势与风险 优势: 1. 动态性:在运行时可以动态创建对象和调用方法...
Constructor、Method、Field类是Java反射机制中的三个重要类,用于描述类的构造器、方法和字段。 * Constructor类:用于描述类的构造器,提供了newInstance()方法,可以创建类的实例。 * Method类:用于描述类的...
- 使用`Constructor`的`newInstance()`方法可以动态创建类的对象,即使这个类没有公开的构造器。 3. **动态调用方法**: - `Method`类的`getMethods()`返回所有公共方法,`getMethod(String name, Class<?>... ...
1. 类与对象的元数据:在Java中,每个类都由Class对象表示,这个对象包含了关于类的所有信息,如类名、构造器、方法、字段等。通过Class类,我们可以获取到运行时的类信息。 2. 获取Class对象:有三种方式获取Class...
4. 构造器(Constructor):`Constructor`类代表类的构造器。`Class.getDeclaredConstructors()`获取构造器,`newInstance()`用于创建新对象。 二、mirror DSL层介绍 "mirror"项目在Java反射API之上构建了一个DSL...
一旦我们有了`Class`对象,就可以进一步获取类的属性(Fields)、方法(Methods)和构造器(Constructors)。 1. 获取所有属性(Fields): 使用`getFields()`方法可以获取到类的所有public字段,如果需要获取包括...
- `Constructor`类:代表类的构造器,用于创建类的新实例。 - `Method`类:表示类的方法,可以调用方法。 - `Field`类:代表类的字段或变量,可以访问和修改字段值。 5. **创建对象**: - 使用`Constructor.new...
• 获取类中的变量(Field)可以使用 `getFields()` 或 `getDeclaredFields()`,方法(Method)使用 `getMethods()` 和 `getDeclaredMethods()`,构造器(Constructor)使用 `getConstructors()` 和 `...
如果类的构造器带有参数,可以使用`Constructor`类的`getDeclaredConstructor()`方法获取构造器并调用`newInstance()`。 2. **调用方法**:`Method`类代表了类的方法,`Class`对象的`getMethod()`或`...
1. 构造器:`Constructor[] getConstructors()` 返回类的所有公共构造器,`Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)` 获取指定参数类型的私有或受保护的构造器。 2. 方法:`Method[] ...
3. 获取构造器:`Constructor<?> getConstructor(Class<?>... parameterTypes)`,用于创建对象。 五、反射的使用场景 1. 动态代理:比如Spring AOP就是利用反射实现的动态代理,可以在不修改原有代码的情况下,为...