java 反射

来源:互联网 发布:淘宝商城加盟代理 编辑:程序博客网 时间:2024/05/01 07:20

1、获得class 文件

//获得字节码  cn.ouc.reflect.HelloWorldClass clazz = Class.forName("cn.ouc.reflect.HelloWorld");System.out.println(clazz);//已知类Class clazz2 = String.class;System.out.println(clazz2);//已知对象Object obj = new ArrayList();Class clazz3 = obj.getClass();System.out.println(clazz3);


2、获取构造方法

2.1 获取共有的构造方法

//获得字节码对象在内存中的表示Class clazz = Class.forName("cn.ouc.reflect.HelloWorld"); //HelloWorld//获得默认构造 HelloWorld()Constructor cons = clazz.getConstructor();  //HelloWorld()//获得实例Object obj = cons.newInstance(); // new HelloWorld();System.out.println(obj);

2.2获取私有构造

//获得字节码对象在内存中的表示Class clazz = Class.forName("cn.ouc.reflect.HelloWorld"); //HelloWorld//获得私有的构造,HelloWorld(String str,Integer i)  形参Constructor cons = clazz.getDeclaredConstructor(String.class,Integer.class);//java.lang.IllegalAccessException//System.out.println(cons.isAccessible());//强制设置访问权限cons.setAccessible(true);//实例化 new  实参Object obj = cons.newInstance("admin",12334);


3、获取字段

3.1公共的

HelloWorld h = new HelloWorld();//String s = h.name;//字节码Class clazz = Class.forName("cn.ouc.reflect.HelloWorld"); //HelloWorld//快捷方法  获得默认构造的实例//clazz.getConstructor().newInstance();Object obj = clazz.newInstance(); //obj -- h//获得字段 String name =Field field = clazz.getField("name");  // name//关联 obj.nameObject value = field.get(obj);System.out.println(value);

3.2 私有的


//HelloWorld h = new HelloWorld();//String s = h.name;// h.name = xxxx;//字节码Class clazz = Class.forName("cn.ouc.reflect.HelloWorld"); //HelloWorld//快捷方法  获得默认构造的实例//clazz.getConstructor().newInstance();Object obj = clazz.newInstance(); //obj -- h//获得私有字段private Integer ageField field = clazz.getDeclaredField("age");//强制设置访问权限field.setAccessible(true);//关联 obj.ageObject value = field.get(obj);System.out.println(value);//设置值 obj.age = 67field.set(obj, 67);//再次输出value = field.get(obj);System.out.println(value);

4、获取方法

4.1共有方法

//获得方法  print()Method method = clazz.getMethod("print", null);//绑定,指定当前的方法,并将相应的实际参数传递method.invoke(obj, null);

4.2私有方法


//实例化Object obj = clazz.newInstance();//获得方法 print(String str , int i)   //绕过自动装箱Method method = clazz.getDeclaredMethod("print", String.class,int.class);//强制设置访问权限method.setAccessible(true);//绑定,指定当前的方法,并将相应的实际参数传递method.invoke(obj, "rooot",250);

5、测试类

public class HelloWorld {public HelloWorld(){System.out.println("默认构造方法");}private HelloWorld(String str,Integer i){System.out.println("构造" + str + ":" + i);}public String name = "jack";private Integer age = 23;public void print(){System.out.println("print");}private void print(String str , int i){System.out.println(str + ":" + i);}}

由字节码 ----获取源码的过程


0 0