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
- 【反射】JAVA反射机制
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java 反射
- java 反射
- 按钮点击多次出现多个相同页面问题
- 深入JVM虚拟机(四) Java GC收集器
- Mysql系列(九) 单引号与反引号
- Effective cpp 读书笔记5
- kickstart文件的密文生成
- Java反射
- 安卓常用开源库
- 操作格子【线段树】
- 灰帽子Python 学习记录 8 内存断点
- 第十七章 Autorotation, Popover Controllers, and Modal View Controllers翻译
- java的String和StringBuilder类的替换方法的运用。
- 代码覆盖率工具---Emma
- maven项目打jar,war包方法
- 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然按照递增排序