- 浏览: 66433 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wosxiaoyacongsd:
呵 多谢!!!
在JAVA中获得当前时间 -
heavilyarmed:
谢谢了 呵呵
在JAVA中获得当前时间 -
vii779:
very good
hibernate的各种保存方式的区别 (save,persist,update,saveOrUpd -
vii779:
好好好
hibernate的各种保存方式的区别 (save,persist,update,saveOrUpd -
heshencao:
feigofigo3 写道
路在脚下,切忌浮躁
谢谢,这会平 ...
回成都感言
package java.lang.reflect; import sun.reflect.ConstructorAccessor; import sun.reflect.Reflection; /** * 表示构造函数的对象 * * comment by liqiang * * @author Kenneth Russell * @author Nakul Saraiya */ public final class Constructor extends AccessibleObject implements Member { //声明此构造函数的类对象 private Class clazz; private int slot; //参数列表数组 private Class[] parameterTypes; //异常数组 private Class[] exceptionTypes; //修饰符 private int modifiers; //真正实现功能的类,当前类只是它的代理 private volatile ConstructorAccessor constructorAccessor; //由coyp的来的对象,回保留原对象的引用 private Constructor root; //包内的构造函数 Constructor(Class declaringClass, Class[] parameterTypes, Class[] checkedExceptions, int modifiers, int slot) { this.clazz = declaringClass; this.parameterTypes = parameterTypes; this.exceptionTypes = checkedExceptions; this.modifiers = modifiers; this.slot = slot; } /** * 返回当前构造函数对象的一个拷贝 */ Constructor copy() { //用此对象的数据生成新的构造函数对象 Constructor res = new Constructor(clazz, parameterTypes, exceptionTypes, modifiers, slot); //新构造函数的root指向自己 res.root = this; //与新的构造函数对象共享ConstructorAccessor res.constructorAccessor = constructorAccessor; return res; } //返回定义此构造函数的类 public Class getDeclaringClass() { return clazz; } //取得构造函数的名,它与类名一致 public String getName() { return getDeclaringClass().getName(); } //取得修饰符 public int getModifiers() { return modifiers; } //取得此对象的参数列表 public Class[] getParameterTypes() { return Method.copy(parameterTypes); } //返回此构造函数定义的异常列表,如果没有定义异常,则返回0长度数组 public Class[] getExceptionTypes() { return Method.copy(exceptionTypes); } /** * 判断指定对象obj是否与当前构造函数对象相等 */ public boolean equals(Object obj) { if (obj != null && obj instanceof Constructor) {//对象不为null,且为构造函数对象 //转型 Constructor other = (Constructor)obj; if (getDeclaringClass() == other.getDeclaringClass()) { //两对象的定义类相等,这是他们的名称也一定相等 Class[] params1 = parameterTypes; Class[] params2 = other.parameterTypes; //比较参数列表 if (params1.length == params2.length) { for (int i = 0; i < params1.length; i++) { if (params1[i] != params2[i]) return false; } return true; } } } //两个对象不等 return false; } //返回hashCode public int hashCode() { return getDeclaringClass().getName().hashCode(); } /** * 返回构造函数的字符串描述 */ public String toString() { try { StringBuffer sb = new StringBuffer(); int mod = getModifiers(); if (mod != 0) { //标志符 sb.append(Modifier.toString(mod) + " "); } //注意它这里用的是Field方法中显示类的名字,这个方法显示数组类型跟Class.getName()不同 //类名 sb.append(Field.getTypeName(getDeclaringClass())); sb.append("("); //显示参数列表用","分隔 Class[] params = parameterTypes; // avoid clone for (int j = 0; j < params.length; j++) { sb.append(Field.getTypeName(params[j])); if (j < (params.length - 1)) sb.append(","); } sb.append(")"); //显示异常列表用","分隔 Class[] exceptions = exceptionTypes; // avoid clone if (exceptions.length > 0) { sb.append(" throws "); for (int k = 0; k < exceptions.length; k++) { sb.append(exceptions[k].getName()); if (k < (exceptions.length - 1)) sb.append(","); } } return sb.toString(); } catch (Exception e) { return "<" + e + ">"; } } /** * 此类最重要的方法 * 构造一个类的实例,如果构造函数是无参的,传入的数组为null或长度为0, * 原始类型的参数需要封装成其包装类 * */ public Object newInstance(Object[] initargs) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { if (!override) {//做检查 if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { Class caller = Reflection.getCallerClass(2); if (securityCheckCache != caller) { //上一个通过的调用者的Class对象被缓存,如果与上次通过的不同,则进行安全检查 Reflection.ensureMemberAccess(caller, clazz, null, modifiers); securityCheckCache = caller; } } } //检查acquireConstructorAccessor if (constructorAccessor == null) acquireConstructorAccessor(); //Constructor只是代理类,实现创建对象的操作是在ConstructorAccessor中 return constructorAccessor.newInstance(initargs); } private void acquireConstructorAccessor() { ConstructorAccessor tmp = null; //取得上层的ConstructorAccessor if (root != null) tmp = root.getConstructorAccessor(); if (tmp != null) { //如果上层的ConstructorAccessor不为空,则将上层的 //ConstructorAccessor付给当前的ConstructorAccessor,并返回 constructorAccessor = tmp; return; } //上层没有则创建一个 tmp = reflectionFactory.newConstructorAccessor(this); setConstructorAccessor(tmp); } //直接返回onstructorAccessor ConstructorAccessor getConstructorAccessor() { return constructorAccessor; } //设置当前的constructorAccessor对象,会是上次的constructorAccessor对象都改变 void setConstructorAccessor(ConstructorAccessor accessor) { //将当前的constructorAccessor对象置为新的ConstructorAccessor对象 constructorAccessor = accessor; //递归调用上层的设置ConstructorAccessor对象的方法 if (root != null) { root.setConstructorAccessor(accessor); } } int getSlot() { return slot; } }
发表评论
-
测试可视化编辑器
2012-05-13 17:37 0function createMap(Id,zPoin ... -
Java5泛型的用法,T.class的获取和为擦拭法站台(江南白衣)
2009-04-24 23:15 1984Java 5的泛型语法已经有太多书讲了,这里不再打字贴书。G ... -
搞懂java中的synchronized关键字
2009-02-26 09:49 1223synchronized关键字的作用域有二种: 1)是某个对 ... -
设计模式的例子
2008-09-05 13:35 1101/////////////////////////////// ... -
java.lang.reflect.Field
2008-09-05 13:28 2015package java.lang.reflect; imp ... -
java.lang.reflect.Method
2008-09-05 13:24 2439package java.lang.reflect; imp ... -
常用正则表达式
2008-08-20 21:18 843正则表达式用于字符串 ... -
如何使用Log4j
2008-08-11 21:46 9071、 Log4j是什么? Log4j ... -
java的30个学习目标
2008-07-28 11:50 800你需要精通面向对象分 ... -
动态代理类
2008-07-23 21:59 995Java动态代理类位于Java.lang.ref ... -
一个小的WEB项目中的实现方法讨论(转载JDON)
2008-05-09 12:31 1016最近对一个别人的WEB项目进行维护,看到这样的实现方法: 1. ... -
java数组
2008-03-06 17:15 771这两天写了一个小的JAVA游戏.当然做游戏一般都会用到数组.遇 ... -
在JAVA中获得当前时间
2008-03-02 10:38 9667Date currentTime = new Date(); ... -
mysql乱码
2008-03-02 10:36 1000JSP的request 默认为ISO8859_1,所以在处理中 ... -
ServletContext与ServletConfig的深度分析<网上收集>
2007-12-20 15:46 1092对于web容器来说,ServletContext接口定义了一个 ... -
对synchronized的一点认识
2007-11-30 16:02 1417今天看了一下多线程。 对synchronized这个东东是研究 ...
相关推荐
在Java编程语言中,`java.lang.reflect`包是核心库的一部分,它提供了运行时访问类、接口、字段和方法的能力。这个包对于理解和操作对象的动态特性至关重要,尤其是在实现反射机制时。反射允许我们在程序运行期间...
2. **`java.lang.reflect.Constructor`**:表示类的构造器。 3. **`java.lang.reflect.Field`**:表示类的成员变量。 4. **`java.lang.reflect.Method`**:表示类的方法。 5. **`java.lang.reflect.Modifier`**:...
【项目源码】-java进销存管理系统 ... import java.awt.BorderLayout; import java.awt.Color;...import java.lang.reflect.Constructor; import java.net.URL; import java.util.HashMap; import java.util.Map;
其中最经常使用的是三个类:java.lang.reflect.Field类、java.lang.reflect.Method类和java.lang.reflect.Constructor类。 Java.lang.reflect.Field类提供了有关类或接口的单个域的信息。利用这个类,我们可以得到...
反射的核心类包括`java.lang.Class`、`java.lang.reflect.Field`、`java.lang.reflect.Method`和`java.lang.reflect.Constructor`。下面将详细阐述这些核心类以及反射的主要用法。 1. `java.lang.Class`:每个类在...
在Java中,反射主要涉及到`java.lang.Class`、`java.lang.reflect.Method`、`java.lang.reflect.Field`和`java.lang.reflect.Constructor`等类。下面将详细介绍这些知识点。 1. **反射的概述** 反射机制使得Java...
反射机制的核心在于Java Reflection API,其中包括`java.lang.Class`,`java.lang.reflect.Method`,`java.lang.reflect.Field`和`java.lang.reflect.Constructor`等类。 首先,`java.lang.Class`是所有Java类的元...
Object newObj = constructor.newInstance(value); System.out.println(newObj); // 输出: hello, World! } } ``` #### 九、总结 通过本文的学习,我们深入了解了Java反射机制的基本概念、原理以及应用。Java...
5. **Java.lang.reflect.Constructor**: 提供了关于类构造器的信息,并允许我们在运行时创建新对象。 6. **Java.lang.annotation.Annotation**: 这是一个接口,表示在代码中使用的注解。注解可以附加在类、字段、...
- `java.lang.reflect.Constructor`:表示类的构造函数,用于创建类的新实例。 3. 获取Class对象的途径: - 通过类名获取:`类名.class` - 通过对象获取:`对象名.getClass()` - 通过类的全名获取:`Class.forName...
java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier;
4. `java.lang.reflect.Constructor`:表示类的构造器,用于创建对象。 5. `java.lang.reflect.Array`:处理数组的静态类。 **四、应用场景** 1. **插件化开发**:动态加载插件中的类和资源,无需提前知晓具体实现...
2. 动态创建对象,使用`Constructor.newInstance()`方法。 3. 访问类的成员变量,包括私有变量,通过`Field.get()`和`Field.set()`。 4. 调用类的方法,包括私有方法,使用`Method.invoke()`。 5. 创建动态代理,...
4. `java.lang.reflect.Constructor`:表示类的构造函数。Constructor对象提供了创建类实例的能力,如`newInstance(args...)`可以创建一个新的类实例。 反射机制的使用场景广泛,包括但不限于: - 在运行时动态...
Object obj = constructor.newInstance("Hello"); ``` #### 15.4 使用反射调用方法和操作成员变量 反射不仅可以用于创建对象,还可以用于调用方法和修改成员变量: 1. **调用方法**: - 使用`getMethod`或`...
这是通过`java.lang.Class`类和相关类如`java.lang.reflect.Field`、`java.lang.reflect.Method`以及`java.lang.reflect.Constructor`来实现的。 1. **获取类信息**:通过`Class.forName()`方法,我们可以根据类名...
在Java中,反射机制主要通过`java.lang.Class`、`java.lang.reflect.Field`、`java.lang.reflect.Method`和`java.lang.reflect.Constructor`等类来实现。 **一、反射机制的主要功能** 1. **运行时判断对象所属的类...
反射机制的核心类主要包括`java.lang.Class`,`java.lang.reflect.Method`,`java.lang.reflect.Field`和`java.lang.reflect.Constructor`。这些类提供了访问和操作类、方法、字段和构造器的API。例如,`Class`类...
4. **`java.lang.reflect.Constructor`**:用于获取并调用类的构造函数。 5. **`java.lang.reflect.Proxy`**:提供动态代理的功能,可以创建代理类和实例。 #### 三、Java反射机制提供的功能 1. **获取类的Class...