reflect(反射)

public class MyConstructors {

    @Test
    public void classConstructors() {
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            Constructor constructor = forName.getConstructor();
            constructor.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void classConstructors1() {
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            Constructor constructor = forName.getConstructor(String.class);
            constructor.newInstance("String类型的参数");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void classConstructors2() {
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            Constructor constructor = forName.getConstructor(String.class,int.class);
            constructor.newInstance("String And int类型的参数",1989);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void classConstructors3() {
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            Constructor constructor = forName.getDeclaredConstructor(List.class);
            constructor.setAccessible(true);
            constructor.newInstance(new ArrayList());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void classConstructors4() {
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            forName.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



}

public class MyMethod {

    @Test
    public void classMethod(){
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            Object object = forName.newInstance();
            Method method = forName.getMethod("methodTest", null);
            method.invoke(object, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void classMethod1(){
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            Object object = forName.newInstance();
            Method method = forName.getMethod("methodTest1", String.class,int.class);
            method.invoke(object, "String参数",1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void classMethod2(){
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            Object object = forName.newInstance();
            Method method = forName.getMethod("methodTest2", String.class,int[].class);
            method.invoke(object, "String参数",new int[]{1,2,3,4,5});
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void classMethod3(){
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            Object object = forName.newInstance();
            Method method = forName.getDeclaredMethod("methodTest3",InputStream.class);
            method.setAccessible(true);
            method.invoke(object, new FileInputStream("E:\\eclipse-jee-luna-SR1a-win32\\workspace\\reflect\\src\\com\\xmwl\\reflect\\MyConstructors.java"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void classMethod4(){
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            Object object = forName.newInstance();
            Method method = forName.getMethod("methodTest4", String.class);
            method.invoke(null,"String参数");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void classMethod5(){
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            Object object = forName.newInstance();
            Method method = forName.getMethod("methodTest5", String[].class);
            method.invoke(object,(Object)new String[]{"数组","会拆分成n个参数"});
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

@Test
    public void classField() {
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            Object obj = forName.newInstance();
            Field field = forName.getField("name1");
            Object obj2 = field.get(obj);
            Class type = field.getType();
            System.out.println(type+" "+obj2);
            field.set(obj, "set_value");
            Student student = (Student) obj;
            System.out.println(student.name1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void classField1() {
        try {
            Class forName = Class.forName("com.xmwl.reflect.Student");
            Object obj = forName.newInstance();
            Field field = forName.getDeclaredField("name");
            field.setAccessible(true);
            Object obj2 = field.get(obj);
            Class type = field.getType();
            System.out.println(type+" "+obj2);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

public class Student {

    public String name1 = "name1_value";

    private String name;
    private int age;
    private Date date;

    public Student() {
        System.out.println("反射了无参构造方法");
    }

    public Student(String name) {
        System.out.println("反射了"+name+"的有参构造方法");
    }

    public Student(String name,int age) {
        System.out.println("反射了"+name+"的有参构造方法"+age);
    }

    private Student(List list) {
        list.add("反射了私有的有参构造方法");
        System.out.println(list);
    }



    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void methodTest(){
        System.out.println("反射了无参的方法");
    }

    public void methodTest1(String arg,int arg1){
        System.out.println("反射了有参的方法"+arg+arg1);
    }

    public void methodTest2(String arg,int[] arg1){
        System.out.println("反射了有参的方法"+arg+arg1[2]);
    }

    private void methodTest3(InputStream inputStream){
        System.out.println("反射了有参私有的方法"+inputStream);
    }

    public static void methodTest4(String arg){
        System.out.println("反射了静态有参的方法"+arg);
    }

    public void methodTest5(String[] args){
        for (int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值