标签:反编译 信息 tail 修饰符 参数 one declare span []
JAVA反射机制:
(1)在运行状态中
(2)对于任意一个类,都能够知道这个类的所有属性和方法;
(3)对于任意一个对象(类的一个实例),都能够调用(访问,检测和修改)它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
反射机制的作用:
1. 反编译:.class-->.java
2. 通过反射机制访问java对象的属性,方法,构造方法等;
实例:
一、反射机制获取类有三种方法
package First; import java.lang.reflect.Field; import java.lang.reflect.Modifier; public class Test { private int a; private String id; public static void main(String[] args) throws Exception { //1 Class c = Class.forName("First.Test"); System.out.println(c); //2 Class c2 = Test.class; System.out.println(c2); //3 Test c3 = new Test(); Class c4 = c3.getClass(); System.out.println(c4); } }
输出如下:
class First.Test class First.Test class First.Test
二、创建对象:
Class c = Class.forName("First.Test"); /* * 创建此Class 对象所表示的类的一个新实例 * 调用了Employee的无参数构造方法. */ Object o = c.newInstance();
三、获取属性
(1)获取指定属性
package First; import java.lang.reflect.Field; import java.lang.reflect.Modifier; public class Test { private String id; public static void main(String[] args) throws Exception { //获取类 包名.类名 Class c = Class.forName("First.Test"); //获取Test类的id属性 Field fs = c.getDeclaredField("id"); //实例化这个类赋给o Object o = c.newInstance(); //打破封装,使能修改 fs.setAccessible(true); //运行状态时,给o对象的id属性赋值"110" fs.set(o, "110"); //set System.out.println(fs.get(o)); } }
输出如下:
110
(2)获取所有属性
package First; import java.lang.reflect.Field; import java.lang.reflect.Modifier; public class Test { public static void main(String[] args) throws Exception { //获取Integer类 Class c = Class.forName("java.lang.Integer"); //获取所有的属性 Field[] fs = c.getDeclaredFields(); //定义可变长的字符串,用来存储属性 StringBuffer sb = new StringBuffer(); //通过追加的方法,将每个属性拼接到此字符串中 sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n"); //遍历里边的每一个属性 for(Field field:fs){ sb.append("\t");//空格 sb.append(Modifier.toString(field.getModifiers())+" ");//获得属性的修饰符,例如public,static等等 sb.append(field.getType().getSimpleName() + " ");//属性的类型的名字 sb.append(field.getName()+";\n");//属性的名字+回车 } sb.append("}"); System.out.println(sb); } }
输出如下:
public final class Integer{ public static final int MIN_VALUE; public static final int MAX_VALUE; public static final Class TYPE; static final char[] digits; static final char[] DigitTens; static final char[] DigitOnes; static final int[] sizeTable; private final int value; public static final int SIZE; public static final int BYTES; private static final long serialVersionUID; }
参考:
http://blog.csdn.net/liujiahan629629/article/details/18013523
标签:反编译 信息 tail 修饰符 参数 one declare span []
原文地址:http://www.cnblogs.com/Donnnnnn/p/7729443.html