反射所有方法测试终极版
来源:互联网 发布:java微信网页开发教程 编辑:程序博客网 时间:2024/06/06 19:11
反射所有方法测试终极版
1.User类:
package com.cdsxt.vo;public class User {private int id;String name;protected boolean handsomde;public int age;public static String fav;public static void test1(int a,int b){System.out.println(a+b);}public int test2(int a,String str){System.out.println(a);return a;}private void test3(){System.out.println("name--------"+this.name);}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean isHandsomde() {return handsomde;}public void setHandsomde(boolean handsomde) {this.handsomde = handsomde;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public static String getFav() {return fav;}public static void setFav(String fav) {User.fav = fav;}public User(String name) {super();this.name = name;}public User() {super();}private User(String name,int age){this.name=name;this.age=age;}}
2.
package com.cdsxt.test;import java.lang.reflect.Field;import com.cdsxt.vo.User;public class Reflect01 {//测试 获取反射模板的三种方式 和属性public static void main(String[] args) {//testGetClass();//testObj();//testFields();testField();}//获取反射模板的方式public static void testGetClass(){//第一种方式 类.class 获取//Class clazz=Reflect01.class;//第二种方式 对象.getClass()获取//Reflect01 reflect01=new Reflect01();//Class clazz=reflect01.getClass();//第三种方式 Class.forName(包名+类名)Class clazz=null;try {clazz=Class.forName("com.cdsxt.test.Reflect01");//} catch (Exception e) {e.printStackTrace();}String simpleName=clazz.getSimpleName();String name=clazz.getName();//获取类的类名System.out.println("simpleName "+simpleName);//包名+类名System.out.println("name "+name);// 获取所在的包System.out.println("package "+clazz.getPackage());}public static void testObj(){Class clazz=User.class;try {//通过反射获取对象User obj=(User)clazz.newInstance(); //相当于 new User() 所以必须有无参构造器obj.setName("zhangsan");obj.setAge(20);System.out.println(obj.getName());System.out.println(obj.getAge());} catch (Exception e) {e.printStackTrace();}}//测试通过反射模板获取属性public static void testFields(){try {Class clazz=Class.forName("com.cdsxt.vo.User");//获取所有公共的(public) 的属性对象//Field[] fields=clazz.getFields();//获取所有模板的属性对象Field[] fields=clazz.getDeclaredFields();//System.out.println(fields.length);for(int i=0;i<fields.length;i++){System.out.println(fields[i].getName()); //getName 获取属性名System.out.println(fields[i].getType()); //getType 获取属性类型System.out.println();}} catch (Exception e) {e.printStackTrace();}}public static void testField(){try {Class clazz=Class.forName("com.cdsxt.vo.User");//查找一个 公共的属性 .getField//Field field=clazz.getField("age");//查找一个 模板上所有属性皆可//Field field=clazz.getDeclaredField("id");Field field=clazz.getDeclaredField("fav");//System.out.println(field.getName());//System.out.println(field.getType());//获取一个对象Object obj=clazz.newInstance();//通过属性对象给指定对象赋值//field.set(obj, 20);//field.setAccessible(true);//true 取消安全检查 可以访问属性 false 有安全检查 不能访问的就不能访问field.set(null, "football"); //set 方法 前面传Object 后面值 注意 如果是静态属性 前面传null 即可 System.out.println(field.get(obj)); //get 方法 属性.get(对象) 获取属性的值} catch (Exception e) {e.printStackTrace();}}}
3.
package com.cdsxt.test;import java.lang.reflect.Field;import java.lang.reflect.Method;import com.cdsxt.vo.User;public class Reflect02 {//通过反射模板获取方法的方式 和调用方法的方式public static void main(String[] args) {//testMethods();//testMethod();//testDoMethod1();testDoMethod2();}//通过反射模板获取方法对象1public static void testMethods(){Class clazz=User.class;//返回该模板上 所有的公共(public)的方法对象//Method[] methods=clazz.getMethods();//返回该木板上所有的 方法对象Method[] methods=clazz.getDeclaredMethods();for(int i=0;i<methods.length;i++){//获取方法的名字System.out.println(methods[i].getName());//获取返回类型System.out.println(methods[i].getReturnType());System.out.println("-----------------------------");}}//通过反射模板获取方法对象2public static void testMethod(){try {Class clazz=User.class;//获取单个公共的方法 getMethod 第一个参数 是方法名 后面的是参数列表 //Method method=clazz.getMethod("test2", int.class,String.class);//Method method=clazz.getMethod("test3");//获取私有的方法 getDeclaredMethod 第一个参数 是方法名 后面的是参数列表 Method method=clazz.getDeclaredMethod("test3");System.out.println(method.getName());System.out.println(method.getReturnType());} catch (Exception e) {e.printStackTrace();}}//通过方法对象 调用方法1public static void testDoMethod1(){try {Class clazz=User.class;//getDeclaredMethod 获取 模板上 所有的方法 的其中一个Method method=clazz.getDeclaredMethod("test3");method.setAccessible(true);Object obj=clazz.newInstance();Field field=clazz.getDeclaredField("name");field.setAccessible(true);field.set(obj, "zhangsan");//调用method.invoke(obj);} catch (Exception e) {e.printStackTrace();}}//通过方法对象 调用方法2public static void testDoMethod2(){try {Class clazz=User.class;Method method=clazz.getMethod("test1", int.class,int.class);method.invoke(null, 100,100);} catch (Exception e) {e.printStackTrace();}}}
3.
package com.cdsxt.test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import com.cdsxt.vo.User;public class Reflect03 {//通过反射模板获取构造器 和通过构造器创建对象public static void main(String[] args) {//testConstructor1();//testConstructor2();testConstructor3();}//通过反射模板获取构造器 1public static void testConstructor1(){Class clazz=User.class;//通过模板获取公共的构造器方法//Constructor[] constructors=clazz.getConstructors();//通过模板获取所有的构造器方法Constructor[] constructors=clazz.getDeclaredConstructors();for(int i=0;i<constructors.length;i++){//System.out.println(constructors[i].getName());Class[] clazzs=constructors[i].getParameterTypes();for(int j=0;j<clazzs.length;j++){System.out.println(clazzs[j].getSimpleName());System.out.println(clazzs[j].getName());System.out.println(clazzs[j].getPackage());}System.out.println("--------");}}//通过反射模板获取构造器 2public static void testConstructor2(){try {Class clazz=User.class;//Constructor constructor=clazz.getConstructor(); //相当于 clazz.newInstance 也相当 new User()//Object obj=constructor.newInstance();Constructor constructor=clazz.getConstructor(String.class);Object obj=constructor.newInstance("lilili");Field field=clazz.getDeclaredField("id");field.setAccessible(true);field.set(obj, 20);Field nameField=clazz.getDeclaredField("name");nameField.setAccessible(true);//System.out.println(field.get(obj));System.out.println(nameField.get(obj));} catch (Exception e) {e.printStackTrace();}}//通过反射模板获取构造器 3public static void testConstructor3(){try {Class clazz=User.class;Constructor constructor=clazz.getDeclaredConstructor(String.class,int.class);constructor.setAccessible(true);Object obj=constructor.newInstance("qweqwe",1);Method nameMethod=clazz.getMethod("getName");Method ageMethod=clazz.getMethod("getAge");System.out.println(nameMethod.invoke(obj));System.out.println(ageMethod.invoke(obj));} catch (Exception e) {e.printStackTrace();}}}
1 1
- 反射所有方法测试终极版
- 利用反射测试私有方法
- 通过反射测试私有方法
- 不能显示隐藏和所有文件的终极方法
- 反射:获得String的所有构造方法
- 反射一个类中的所有方法
- JUnit 3.8 通过反射测试私有方法
- JUnit 3.8 通过反射测试私有方法
- 根据反射机制测试private方法(junit测试)
- Java 反射,通过反射调用所有的方法,包括private方法
- 通过反射获取类的所有属性和方法
- Java反射代码--03.得到某类的所有方法
- Java反射代码--05.执行所有get方法
- Java反射代码--06.执行所有特定的set方法
- Java反射代码--07.根据字段调用所有set方法
- 使用反射获取一个类的所有方法和字段
- Java反射机制(得到所有的构造方法)
- Java反射机制(得到类的所有方法)
- NSView转换为NSimage 与 UIImage转换为UIimage 总结
- js 手机端滑动分页SPager 基本示例
- windows 7系统安装与配置Tomcat服务器环境
- Android 获取栈顶activity并在service 中弹出全局dialog解决方法
- java接口和抽象类
- 反射所有方法测试终极版
- iOS开发UI篇-UIView的生命周期
- shell 多行注释详解
- LeetCode Number of Digit One(计算1的个数)
- 浅谈守护进程
- java最小泛型demo
- 在线人数滚动的效果
- 搭建Web服务器Tomcat
- 1001. A+B Format (20)