- 浏览: 66421 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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.FieldAccessor; import sun.reflect.Reflection; /** * * 表示属性对象 * * comment by liqiang * * @author Kenneth Russell * @author Nakul Saraiya */ public final class Field extends AccessibleObject implements Member { //定义此属性的类名 private Class clazz; private int slot; //属性名 private String name; //属性类型 private Class type; //描述符 private int modifiers; private volatile FieldAccessor fieldAccessor; //copy出此对象的原始对象 private Field root; //与此属性关联的对象实例缓存,如果当前的对象与缓存对象不同则做安全检查 private volatile Class securityCheckTargetClassCache; //构造函数 Field(Class declaringClass, String name, Class type, int modifiers, int slot) { this.clazz = declaringClass; this.name = name; this.type = type; this.modifiers = modifiers; this.slot = slot; } //通过当前类数据生成新的对象 Field copy() { //生成新的属性对象 Field res = new Field(clazz, name, type, modifiers, slot); //新对象指向老对象 res.root = this; //新对象与老对象共用一个FieldAccessor res.fieldAccessor = fieldAccessor; return res; } //获得定义此属性的类 public Class getDeclaringClass() { return clazz; } //获得属性名 public String getName() { return name; } //获得属性描述符 public int getModifiers() { return modifiers; } //返回属性类型 public Class getType() { return type; } //判断obj对象是否与当前属性对象相等 public boolean equals(Object obj) { if (obj != null && obj instanceof Field) {//是属性对象 //转型 Field other = (Field)obj; //判断定义属性的类,属性名,属性类型 return (getDeclaringClass() == other.getDeclaringClass()) && (getName() == other.getName()) && (getType() == other.getType()); } //不等 return false; } //返回hashCode public int hashCode() { return getDeclaringClass().getName().hashCode() ^ getName().hashCode(); } //返回字符串描述 public String toString() { int mod = getModifiers(); return (((mod == 0) ? "" : (Modifier.toString(mod) + " ")) + getTypeName(getType()) + " " + getTypeName(getDeclaringClass()) + "." + getName()); } /** * Returns the value of the field represented by this <code>Field</code>, on * the specified object. The value is automatically wrapped in an * object if it has a primitive type. * * <p>The underlying field's value is obtained as follows: * * <p>If the underlying field is a static field, the <code>obj</code> argument * is ignored; it may be null. * * <p>Otherwise, the underlying field is an instance field. If the * specified <code>obj</code> argument is null, the method throws a * <code>NullPointerException.</code> If the specified object is not an * instance of the class or interface declaring the underlying * field, the method throws an <code>IllegalArgumentException</code>. * * <p>If this <code>Field</code> object enforces Java language access control, and * the underlying field is inaccessible, the method throws an * <code>IllegalAccessException</code>. * If the underlying field is static, the class that declared the * field is initialized if it has not already been initialized. * * <p>Otherwise, the value is retrieved from the underlying instance * or static field. If the field has a primitive type, the value * is wrapped in an object before being returned, otherwise it is * returned as is. * * <p>If the field is hidden in the type of <code>obj</code>, * the field's value is obtained according to the preceding rules. * * @param obj object from which the represented field's value is * to be extracted * @return the value of the represented field in object * <tt>obj</tt>; primitive values are wrapped in an appropriate * object before being returned * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not an * instance of the class or interface declaring the underlying * field (or a subclass or implementor thereof). * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. */ public Object get(Object obj) throws IllegalArgumentException, IllegalAccessException { return getFieldAccessor(obj).get(obj); } /** * Gets the value of a static or instance <code>boolean</code> field. * * @param obj the object to extract the <code>boolean</code> value * from * @return the value of the <code>boolean</code> field * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be * converted to the type <code>boolean</code> by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#get */ public boolean getBoolean(Object obj) throws IllegalArgumentException, IllegalAccessException { return getFieldAccessor(obj).getBoolean(obj); } /** * Gets the value of a static or instance <code>byte</code> field. * * @param obj the object to extract the <code>byte</code> value * from * @return the value of the <code>byte</code> field * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be * converted to the type <code>byte</code> by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#get */ public byte getByte(Object obj) throws IllegalArgumentException, IllegalAccessException { return getFieldAccessor(obj).getByte(obj); } /** * Gets the value of a static or instance field of type * <code>char</code> or of another primitive type convertible to * type <code>char</code> via a widening conversion. * * @param obj the object to extract the <code>char</code> value * from * @return the value of the field converted to type <code>char</code> * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be * converted to the type <code>char</code> by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#get */ public char getChar(Object obj) throws IllegalArgumentException, IllegalAccessException { return getFieldAccessor(obj).getChar(obj); } /** * Gets the value of a static or instance field of type * <code>short</code> or of another primitive type convertible to * type <code>short</code> via a widening conversion. * * @param obj the object to extract the <code>short</code> value * from * @return the value of the field converted to type <code>short</code> * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be * converted to the type <code>short</code> by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#get */ public short getShort(Object obj) throws IllegalArgumentException, IllegalAccessException { return getFieldAccessor(obj).getShort(obj); } /** * Gets the value of a static or instance field of type * <code>int</code> or of another primitive type convertible to * type <code>int</code> via a widening conversion. * * @param obj the object to extract the <code>int</code> value * from * @return the value of the field converted to type <code>int</code> * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be * converted to the type <code>int</code> by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#get */ public int getInt(Object obj) throws IllegalArgumentException, IllegalAccessException { return getFieldAccessor(obj).getInt(obj); } /** * Gets the value of a static or instance field of type * <code>long</code> or of another primitive type convertible to * type <code>long</code> via a widening conversion. * * @param obj the object to extract the <code>long</code> value * from * @return the value of the field converted to type <code>long</code> * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be * converted to the type <code>long</code> by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#get */ public long getLong(Object obj) throws IllegalArgumentException, IllegalAccessException { return getFieldAccessor(obj).getLong(obj); } /** * Gets the value of a static or instance field of type * <code>float</code> or of another primitive type convertible to * type <code>float</code> via a widening conversion. * * @param obj the object to extract the <code>float</code> value * from * @return the value of the field converted to type <code>float</code> * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be * converted to the type <code>float</code> by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#get */ public float getFloat(Object obj) throws IllegalArgumentException, IllegalAccessException { return getFieldAccessor(obj).getFloat(obj); } /** * Gets the value of a static or instance field of type * <code>double</code> or of another primitive type convertible to * type <code>double</code> via a widening conversion. * * @param obj the object to extract the <code>double</code> value * from * @return the value of the field converted to type <code>double</code> * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not * an instance of the class or interface declaring the * underlying field (or a subclass or implementor * thereof), or if the field value cannot be * converted to the type <code>double</code> by a * widening conversion. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#get */ public double getDouble(Object obj) throws IllegalArgumentException, IllegalAccessException { return getFieldAccessor(obj).getDouble(obj); } /** * Sets the field represented by this <code>Field</code> object on the * specified object argument to the specified new value. The new * value is automatically unwrapped if the underlying field has a * primitive type. * * <p>The operation proceeds as follows: * * <p>If the underlying field is static, the <code>obj</code> argument is * ignored; it may be null. * * <p>Otherwise the underlying field is an instance field. If the * specified object argument is null, the method throws a * <code>NullPointerException</code>. If the specified object argument is not * an instance of the class or interface declaring the underlying * field, the method throws an <code>IllegalArgumentException</code>. * * <p>If this <code>Field</code> object enforces Java language access control, and * the underlying field is inaccessible, the method throws an * <code>IllegalAccessException</code>. * * <p>If the underlying field is final, the method throws an * <code>IllegalAccessException</code>. * * <p>If the underlying field is of a primitive type, an unwrapping * conversion is attempted to convert the new value to a value of * a primitive type. If this attempt fails, the method throws an * <code>IllegalArgumentException</code>. * * <p>If, after possible unwrapping, the new value cannot be * converted to the type of the underlying field by an identity or * widening conversion, the method throws an * <code>IllegalArgumentException</code>. * * <p>If the underlying field is static, the class that declared the * field is initialized if it has not already been initialized. * * <p>The field is set to the possibly unwrapped and widened new value. * * <p>If the field is hidden in the type of <code>obj</code>, * the field's value is set according to the preceding rules. * * @param obj the object whose field should be modified * @param value the new value for the field of <code>obj</code> * being modified * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not an * instance of the class or interface declaring the underlying * field (or a subclass or implementor thereof), * or if an unwrapping conversion fails. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. */ public void set(Object obj, Object value) throws IllegalArgumentException, IllegalAccessException { getFieldAccessor(obj).set(obj, value); } /** * Sets the value of a field as a <code>boolean</code> on the specified object. * This method is equivalent to * <code>set(obj, zObj)</code>, * where <code>zObj</code> is a <code>Boolean</code> object and * <code>zObj.booleanValue() == z</code>. * * @param obj the object whose field should be modified * @param z the new value for the field of <code>obj</code> * being modified * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not an * instance of the class or interface declaring the underlying * field (or a subclass or implementor thereof), * or if an unwrapping conversion fails. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#set */ public void setBoolean(Object obj, boolean z) throws IllegalArgumentException, IllegalAccessException { getFieldAccessor(obj).setBoolean(obj, z); } /** * Sets the value of a field as a <code>byte</code> on the specified object. * This method is equivalent to * <code>set(obj, bObj)</code>, * where <code>bObj</code> is a <code>Byte</code> object and * <code>bObj.byteValue() == b</code>. * * @param obj the object whose field should be modified * @param b the new value for the field of <code>obj</code> * being modified * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not an * instance of the class or interface declaring the underlying * field (or a subclass or implementor thereof), * or if an unwrapping conversion fails. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#set */ public void setByte(Object obj, byte b) throws IllegalArgumentException, IllegalAccessException { getFieldAccessor(obj).setByte(obj, b); } /** * Sets the value of a field as a <code>char</code> on the specified object. * This method is equivalent to * <code>set(obj, cObj)</code>, * where <code>cObj</code> is a <code>Character</code> object and * <code>cObj.charValue() == c</code>. * * @param obj the object whose field should be modified * @param c the new value for the field of <code>obj</code> * being modified * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not an * instance of the class or interface declaring the underlying * field (or a subclass or implementor thereof), * or if an unwrapping conversion fails. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#set */ public void setChar(Object obj, char c) throws IllegalArgumentException, IllegalAccessException { getFieldAccessor(obj).setChar(obj, c); } /** * Sets the value of a field as a <code>short</code> on the specified object. * This method is equivalent to * <code>set(obj, sObj)</code>, * where <code>sObj</code> is a <code>Short</code> object and * <code>sObj.shortValue() == s</code>. * * @param obj the object whose field should be modified * @param s the new value for the field of <code>obj</code> * being modified * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not an * instance of the class or interface declaring the underlying * field (or a subclass or implementor thereof), * or if an unwrapping conversion fails. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#set */ public void setShort(Object obj, short s) throws IllegalArgumentException, IllegalAccessException { getFieldAccessor(obj).setShort(obj, s); } /** * Sets the value of a field as an <code>int</code> on the specified object. * This method is equivalent to * <code>set(obj, iObj)</code>, * where <code>iObj</code> is a <code>Integer</code> object and * <code>iObj.intValue() == i</code>. * * @param obj the object whose field should be modified * @param i the new value for the field of <code>obj</code> * being modified * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not an * instance of the class or interface declaring the underlying * field (or a subclass or implementor thereof), * or if an unwrapping conversion fails. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#set */ public void setInt(Object obj, int i) throws IllegalArgumentException, IllegalAccessException { getFieldAccessor(obj).setInt(obj, i); } /** * Sets the value of a field as a <code>long</code> on the specified object. * This method is equivalent to * <code>set(obj, lObj)</code>, * where <code>lObj</code> is a <code>Long</code> object and * <code>lObj.longValue() == l</code>. * * @param obj the object whose field should be modified * @param l the new value for the field of <code>obj</code> * being modified * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not an * instance of the class or interface declaring the underlying * field (or a subclass or implementor thereof), * or if an unwrapping conversion fails. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#set */ public void setLong(Object obj, long l) throws IllegalArgumentException, IllegalAccessException { getFieldAccessor(obj).setLong(obj, l); } /** * Sets the value of a field as a <code>float</code> on the specified object. * This method is equivalent to * <code>set(obj, fObj)</code>, * where <code>fObj</code> is a <code>Float</code> object and * <code>fObj.floatValue() == f</code>. * * @param obj the object whose field should be modified * @param f the new value for the field of <code>obj</code> * being modified * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not an * instance of the class or interface declaring the underlying * field (or a subclass or implementor thereof), * or if an unwrapping conversion fails. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#set */ public void setFloat(Object obj, float f) throws IllegalArgumentException, IllegalAccessException { getFieldAccessor(obj).setFloat(obj, f); } /** * Sets the value of a field as a <code>double</code> on the specified object. * This method is equivalent to * <code>set(obj, dObj)</code>, * where <code>dObj</code> is a <code>Double</code> object and * <code>dObj.doubleValue() == d</code>. * * @param obj the object whose field should be modified * @param d the new value for the field of <code>obj</code> * being modified * * @exception IllegalAccessException if the underlying field * is inaccessible. * @exception IllegalArgumentException if the specified object is not an * instance of the class or interface declaring the underlying * field (or a subclass or implementor thereof), * or if an unwrapping conversion fails. * @exception NullPointerException if the specified object is null * and the field is an instance field. * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. * @see Field#set */ public void setDouble(Object obj, double d) throws IllegalArgumentException, IllegalAccessException { getFieldAccessor(obj).setDouble(obj, d); } // Convenience routine which performs security checks private FieldAccessor getFieldAccessor(Object obj) throws IllegalAccessException { doSecurityCheck(obj); if (fieldAccessor == null) { acquireFieldAccessor(); } return fieldAccessor; } //如果属性对象是由copy得来则属性对象与生成此对象的对象使用同一FieldAccessor private void acquireFieldAccessor() { FieldAccessor tmp = null; if (root != null) tmp = root.getFieldAccessor(); if (tmp != null) { fieldAccessor = tmp; return; } //不是由copy得来 创建FieldAccessor对象 tmp = reflectionFactory.newFieldAccessor(this); setFieldAccessor(tmp); } //获取FieldAccessor对象 private FieldAccessor getFieldAccessor() { return fieldAccessor; } //设置FieldAccessor对象 private void setFieldAccessor(FieldAccessor accessor) { fieldAccessor = accessor; if (root != null) { //如果有上级则递归设置 root.setFieldAccessor(accessor); } } //做安全检查 private void doSecurityCheck(Object obj) throws IllegalAccessException { if (!override) {//做安全检查 if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { Class caller = Reflection.getCallerClass(4); Class targetClass = ((obj == null || !Modifier.isProtected(modifiers)) ? clazz : obj.getClass()); if (securityCheckCache != caller || targetClass != securityCheckTargetClassCache) { Reflection.ensureMemberAccess(caller, clazz, obj, modifiers); securityCheckCache = caller; securityCheckTargetClassCache = targetClass; } } } } //返回类的显示名字,如果不是数组则直接返回类名 //如果是数组,则取出最底层元素的对象,显示为元素名+[]..([]个数为数组维数) static String getTypeName(Class type) { if (type.isArray()) {//类代表数组 try { Class cl = type; //维数 int dimensions = 0; //取得最底层的数组元素类型,并计算出维数 while (cl.isArray()) { dimensions++; cl = cl.getComponentType(); } StringBuffer sb = new StringBuffer(); sb.append(cl.getName()); for (int i = 0; i < dimensions; i++) { sb.append("[]"); } return sb.toString(); } catch (Throwable e) { //异常 } } //不代表数组则直接返回类名 return type.getName(); } }
发表评论
-
测试可视化编辑器
2012-05-13 17:37 0function createMap(Id,zPoin ... -
Java5泛型的用法,T.class的获取和为擦拭法站台(江南白衣)
2009-04-24 23:15 1983Java 5的泛型语法已经有太多书讲了,这里不再打字贴书。G ... -
搞懂java中的synchronized关键字
2009-02-26 09:49 1222synchronized关键字的作用域有二种: 1)是某个对 ... -
设计模式的例子
2008-09-05 13:35 1101/////////////////////////////// ... -
java.lang.reflect.Constructor
2008-09-05 13:26 2365package 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 9061、 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 1015最近对一个别人的WEB项目进行维护,看到这样的实现方法: 1. ... -
java数组
2008-03-06 17:15 771这两天写了一个小的JAVA游戏.当然做游戏一般都会用到数组.遇 ... -
在JAVA中获得当前时间
2008-03-02 10:38 9666Date currentTime = new Date(); ... -
mysql乱码
2008-03-02 10:36 1000JSP的request 默认为ISO8859_1,所以在处理中 ... -
ServletContext与ServletConfig的深度分析<网上收集>
2007-12-20 15:46 1091对于web容器来说,ServletContext接口定义了一个 ... -
对synchronized的一点认识
2007-11-30 16:02 1416今天看了一下多线程。 对synchronized这个东东是研究 ...
相关推荐
在Java编程语言中,`java.lang.reflect`包是核心库的一部分,它提供了运行时访问类、接口、字段和方法的能力。这个包对于理解和操作对象的动态特性至关重要,尤其是在实现反射机制时。反射允许我们在程序运行期间...
3. **`java.lang.reflect.Field`**:表示类的成员变量。 4. **`java.lang.reflect.Method`**:表示类的方法。 5. **`java.lang.reflect.Modifier`**:提供对成员的修饰符的访问。 ##### 基本使用方法 1. **获取...
`org.apache.commons.lang3.reflect.FieldUtils`类则是关于反射操作的工具类,它提供了一些安全且方便的方法来访问和修改对象的字段。这些方法包括但不限于: 1. `getField()`:安全地获取类或对象的字段,即使该...
其中最经常使用的是三个类:java.lang.reflect.Field类、java.lang.reflect.Method类和java.lang.reflect.Constructor类。 Java.lang.reflect.Field类提供了有关类或接口的单个域的信息。利用这个类,我们可以得到...
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; ...
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectionTest { public static void main(String[] args) { Class c = null; try { ...
反射的核心类包括`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类的元...
Java反射机制主要依赖于`java.lang.reflect`包下的API,其中包括: - `java.lang.Class`:表示一个类的运行时信息。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang.reflect.Field`:表示类的字段。 -...
java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier;
- `java.lang.reflect.Method`:表示类的方法,提供获取方法信息和调用方法的功能。 - `java.lang.reflect.Field`:表示类的成员变量,用于获取和设置字段值。 - `java.lang.reflect.Constructor`:表示类的构造函数...
2. **Java.lang.reflect.AccessibleObject**: `Field`, `Method`, 和 `Constructor` 类的基类,提供了访问控制的机制,如设置访问权限以允许反射操作。 3. **Java.lang.reflect.Method**: 代表类的方法信息,包括...
3. 访问类的成员变量,包括私有变量,通过`Field.get()`和`Field.set()`。 4. 调用类的方法,包括私有方法,使用`Method.invoke()`。 5. 创建动态代理,通过`java.lang.reflect.Proxy`类,可以在运行时生成代理对象...
1. 动态代理:使用`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`可以创建动态代理对象,实现AOP(面向切面编程)。 2. 数据库操作框架:如MyBatis,通过反射动态生成SQL语句并执行。 3. XML...
3. `java.lang.reflect.Field`:表示类的字段,提供访问字段的功能。 4. `java.lang.reflect.Constructor`:表示类的构造器,用于创建对象。 5. `java.lang.reflect.Array`:处理数组的静态类。 **四、应用场景** ...
在Java中,反射机制主要通过`java.lang.Class`、`java.lang.reflect.Field`、`java.lang.reflect.Method`和`java.lang.reflect.Constructor`等类来实现。 **一、反射机制的主要功能** 1. **运行时判断对象所属的类...
3. `java.lang.reflect.Field`:表示类的字段。Field对象可以用于获取和设置字段的值,如`get(Object obj)`获取字段值,`set(Object obj, value)`设置字段值。 4. `java.lang.reflect.Constructor`:表示类的构造...
在Java中,可以使用`java.lang.reflect.Proxy`类和`InvocationHandler`接口来实现动态代理。 综上所述,Java反射机制为开发者提供了强大的工具,使得程序能在运行时灵活地操作类和对象。但需要注意的是,反射操作...