Java反射
2016-05-18 14:25
423 查看
(1)Java中出去静态的,万事万物皆对象
(2)反射的存在可以绕过编译,在程序运行时决定加载的类,区别去编译时加载程序中涉及到全部类的方式。
(3)通过反射可以实现的效果
(1动态实现类的加载
(2获取当前正在执行类的方法信息
(3获取当前正在执行类的成员变量和构造函数信息
(4获取当前正在执行类的方法反射,从而实现方法调用
(4)实例:集合泛型在编译时add等方法对参数的审查,通过反射可以绕过检查机制,将int类型的值加入到String类型的集合中
(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 block e.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 block e.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 = -10 public static final int java.lang.Integer.MIN_VALUE public static final int java.lang.Integer.MAX_VALUE public static final java.lang.Class<java.lang.Integer> java.lang.Integer.TYPE static final char[] java.lang.Integer.digits static final char[] java.lang.Integer.DigitTens static final char[] java.lang.Integer.DigitOnes static final int[] java.lang.Integer.sizeTable private final int java.lang.Integer.value public static final int java.lang.Integer.SIZE public static final int java.lang.Integer.BYTES private static final long java.lang.Integer.serialVersionUID java.lang.Integer(int,) java.lang.Integer(java.lang.String,)
相关文章推荐
- java入门之构造函数
- JavaGC(1)-Java垃圾回收机制
- Ubuntu 16.04下搭建 Android 开发环境 -JDK, Android Studio 安装
- Java入门:使用Java API
- java 多线程 总结 案例
- Spring集成Hibernate注意事项
- JAVA 开发工具
- pojo和javabean的区别(总结)
- J2SE(十六)Java之I/O
- java类File的方法:file.mkdir()方法与filemkdirs()区别
- JAVA中定时器的几种用法
- Java集合框架:ArrayList
- leetcode 344 Reverse String (in java)
- Eclipse如何生成文档(javadoc):
- Eclipse中产生作者名字的快捷键
- javaweb中常用的验证工具类
- 删除空白瓦片
- java 封装练习题3
- Spring关键词的理解
- java 封装练习题2