- 浏览: 65285 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 1943Java 5的泛型语法已经有太多书讲了,这里不再打字贴书。G ... -
搞懂java中的synchronized关键字
2009-02-26 09:49 1181synchronized关键字的作用域有二种: 1)是某个对 ... -
设计模式的例子
2008-09-05 13:35 1067/////////////////////////////// ... -
java.lang.reflect.Field
2008-09-05 13:28 1943package java.lang.reflect; imp ... -
java.lang.reflect.Method
2008-09-05 13:24 2393package java.lang.reflect; imp ... -
常用正则表达式
2008-08-20 21:18 807正则表达式用于字符串 ... -
如何使用Log4j
2008-08-11 21:46 8681、 Log4j是什么? Log4j ... -
java的30个学习目标
2008-07-28 11:50 765你需要精通面向对象分 ... -
动态代理类
2008-07-23 21:59 960Java动态代理类位于Java.lang.ref ... -
一个小的WEB项目中的实现方法讨论(转载JDON)
2008-05-09 12:31 988最近对一个别人的WEB项目进行维护,看到这样的实现方法: 1. ... -
java数组
2008-03-06 17:15 750这两天写了一个小的JAVA游戏.当然做游戏一般都会用到数组.遇 ... -
在JAVA中获得当前时间
2008-03-02 10:38 9633Date currentTime = new Date(); ... -
mysql乱码
2008-03-02 10:36 968JSP的request 默认为ISO8859_1,所以在处理中 ... -
ServletContext与ServletConfig的深度分析<网上收集>
2007-12-20 15:46 1060对于web容器来说,ServletContext接口定义了一个 ... -
对synchronized的一点认识
2007-11-30 16:02 1389今天看了一下多线程。 对synchronized这个东东是研究 ...
相关推荐
【项目源码】-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.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier;
//类 java.lang.reflect.Constructor;//构造方法 java.lang.reflect.Field; //类的成员变量 java.lang.reflect.Method;//类的方法 java.lang.reflect.Modifier;//访问权限 Java高级程序设计实战教程第三章-Java反射...
import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; import com.org.entity.User; /** */ public class Test3 { /** * @param args */ public static void main(String[] args) ...
richfaces_erro 正在建立中 调试当中 严重: Cant instantiate class: org.ajax4jsf.application.AjaxStateManager. java.lang.reflect.... at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
KeySpec dks = (KeySpec) constructor.newInstance(new Object[]{rawKeyData}); // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance...
import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; public class SimpleTest { /** *//** * @param args */ public static void main(String[] args) { // TODO Auto-...
(2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。 (3) 调用对象的clone()方法。 (4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 ...
反射调用 Class 或 java.lang.reflect.Constructor 的 newInstance()方法 克隆调用现有对象的 clone()方法 反序列化调用 java.io.ObjectInputStream 的 getObject()方法反序列化 各自适合的场景,面对参数的变化,本...
String str = (String)constructor.newInstance(new StringBuffer("abc")); System.out.println(str); class.newInstance()内部其实就是在用默认的构造方法 ----------------------- 讲Method //方法 Method ...
包含以下java源文件: ...com.google.gson.internal.ObjectConstructor.class com.google.gson.internal.Primitives.class com.google.gson.internal.Streams.class com.google.gson.internal.UnsafeAllocator.class ...
Class 类与 java.lang.reflect 类库一起对反射的概念进行了支持,该类库包含了 Field,Method,Constructor 类 (每个类都实现了 Member 接口)。这些类型的对象时由 JVM 在运行时创建的,用以表示未知类里对应的成员。...
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它...本文将谈到java.lang.Class,以及java.lang.reflect中的Method、Field、Constructor等等classes。
Java反射技术的核心在于java.lang.reflect包,它提供了一系列类和接口,用于在运行时获取关于类和对象的信息,并进行相应的操作。主要的类和接口包括Class、Method、Field、Constructor等。 以下是Java反射技术的...
In java, Strings are objects that belong to class java.lang.String. A string is a sequence of simple characters. We can get the length of the string by using the method length() of java.lang.String. ...
使用ibatis 提供的ORM 机制,对业务逻辑实现人员而言,面对的是纯粹的Java 对象, 这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求...