反射所有方法测试终极版

来源:互联网 发布: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
原创粉丝点击