Java反射

来源:互联网 发布:淘宝助手菜鸟模板 编辑:程序博客网 时间:2024/06/03 22:13


(1)Java中出去静态的,万事万物皆对象

(2)反射的存在可以绕过编译,在程序运行时决定加载的类,区别去编译时加载程序中涉及到全部类的方式。

(3)通过反射可以实现的效果

1动态实现类的加载

2获取当前正在执行类的方法信息

3获取当前正在执行类的成员变量和构造函数信息

4获取当前正在执行类的方法反射,从而实现方法调用

(4)实例:集合泛型在编译时add等方法对参数的审查,通过反射可以绕过检查机制,将int类型的值加入到String类型的集合中


package com.czh.studyday9.reflect;import java.lang.annotation.Annotation;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;/** * 反射机制 * @author J_X * */public class ReflectTest {public static void main(String[] args) {// TODO Auto-generated method stub        Integer integer = 3;        //获取类的类型        //方式一        Class<?> type1 = integer.getClass();        //方式二        Class<?> type2 = Integer.class;        Class<?> type3 = null;        //方式三java.lang.Integer        try {type3 = Class.forName("com.czh.studyday5.person.WX");Method [] temp = type3.getMethods();for (int i=0; i<temp.length; ++i){Annotation [] tempA= temp[i].getAnnotations();for (Annotation annotation : tempA) {System.err.println("Annotation->"+annotation.toString());}}} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}                //获取类的方法信息type1.getMethods()        Method[] methods = type1.getDeclaredMethods();        for (int i=0; i<methods.length; ++i) {        Method m = methods[i];        System.out.print(m.getReturnType()+ " ");System.out.print(m.getName() + "(");Class<?>[] params = m.getParameterTypes();for (int j=0; j<params.length; ++j) {Class<?> p = params[j];System.out.print(p.getName());if (j != (params.length -1)){System.out.print(", ");}}System.out.println(")");}try { Method m = type3.getDeclaredMethod("testReflect", int.class); m.setAccessible(true);     System.err.println("getMoney = "+ m.invoke(type3.newInstance(), 10).toString());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}         //获取类声明变量的方法        Field[] fields= type2.getDeclaredFields();        for (int k = 0; k<fields.length; ++k)        {        System.err.println(fields[k].toGenericString());        }        //获取构造函数        Constructor<?> [] constructors = type2.getConstructors();        for (int i=0; i<constructors.length; ++i)        {         Constructor<?> c = constructors[i];         System.out.print(c.getName()+ "(");        Class<?>[] p =  c.getParameterTypes();        for (Class<?> p1 : p) {System.out.print(p1.getName() + ",");}        System.out.println(")");        }}}
运行结果:

int numberOfLeadingZeros(int)int numberOfTrailingZeros(int)int bitCount(int)boolean equals(java.lang.Object)class java.lang.String toString(int, int)class java.lang.String toString()class java.lang.String toString(int)int hashCode(int)int hashCode()int min(int, int)int max(int, int)int reverseBytes(int)int compareTo(java.lang.Integer)int compareTo(java.lang.Object)byte byteValue()short shortValue()int intValue()long longValue()float floatValue()double doubleValue()class java.lang.Integer valueOf(java.lang.String, int)class java.lang.Integer valueOf(int)class java.lang.Integer valueOf(java.lang.String)class java.lang.String toHexString(int)int compare(int, int)class java.lang.Integer decode(java.lang.String)void getChars(int, int, [C)int reverse(int)int stringSize(int)int sum(int, int)int parseInt(java.lang.String)int parseInt(java.lang.String, int)long toUnsignedLong(int)int compareUnsigned(int, int)int divideUnsigned(int, int)int formatUnsignedInt(int, int, [C, int, int)class java.lang.Integer getInteger(java.lang.String, java.lang.Integer)class java.lang.Integer getInteger(java.lang.String, int)class java.lang.Integer getInteger(java.lang.String)int highestOneBit(int)int lowestOneBit(int)int parseUnsignedInt(java.lang.String)int parseUnsignedInt(java.lang.String, int)int remainderUnsigned(int, int)int rotateLeft(int, int)int rotateRight(int, int)int signum(int)class java.lang.String toBinaryString(int)class java.lang.String toOctalString(int)class java.lang.String toUnsignedString(int)class java.lang.String toUnsignedString(int, int)class java.lang.String toUnsignedString0(int, int)getMoney = -10public static final int java.lang.Integer.MIN_VALUEpublic static final int java.lang.Integer.MAX_VALUEpublic static final java.lang.Class<java.lang.Integer> java.lang.Integer.TYPEstatic final char[] java.lang.Integer.digitsstatic final char[] java.lang.Integer.DigitTensstatic final char[] java.lang.Integer.DigitOnesstatic final int[] java.lang.Integer.sizeTableprivate final int java.lang.Integer.valuepublic static final int java.lang.Integer.SIZEpublic static final int java.lang.Integer.BYTESprivate static final long java.lang.Integer.serialVersionUIDjava.lang.Integer(int,)java.lang.Integer(java.lang.String,)




0 0
原创粉丝点击