01_反射_03_反射类的方法

【工程截图】

 

【User.java】

package com.Higgin.reflect;

public class User {

    public User(){
        System.out.println("构造方法:User()");
    }
    
    //方法一: 无返回值,无参
    public void userSay(){
        System.out.println("hello world!");
    }
    
    //方法二: String返回值,String参数
    public String userSay(String name ){
        System.out.println("name: "+name);
        return name;
    }
    
    //方法三: 无返回值,两个参数
    public void userSay(String name,int age){
        System.out.println("name: "+name+"  age: "+age);
    }
    
    //方法四: Class[]返回值,两个参数
    public Class[] userSay(String name,int[] age){
        return new Class[]{String.class};
    }
    
    //方法无: static方法,无返回值,int参数
    public static void userSay(int num){
        System.out.println("num: "+num);
    }
}

 

【情况一】

【testUser.java】//反射类的方法 public void userSay()


@Test
    //反射类的方法 public void userSay()
    public void test1() throws Exception{
        User user=new User();
        Class clazz=Class.forName("com.Higgin.reflect.User");
        Method method=clazz.getMethod("userSay", null);//"userSay"为反射的方法名称,null代表没有参数
        method.invoke(user, null);  //null 代表没有参数
    }

【运行结果】(注意:打印出“和构造方法:User()”本质原因是代码中的 User user=new User();)

 

【情况二】

【testUser.java】//反射类的方法 public String userSay(String name)

@Test
    //反射类的方法 public String userSay(String name)
    public void test2() throws Exception{
        User user=new User();
        Class clazz=Class.forName("com.Higgin.reflect.User");
        Method method=clazz.getMethod("userSay", String.class);
        String name=(String) method.invoke(user, "张三");
        System.out.println("Get Name:"+name);
    }

【运行结果】

 

 

【情况三】 //反射类的方法 public void userSay(String name,int age)

【testUser.java】

@Test
    //反射类的方法 public void userSay(String name,int age)
    public void test3() throws Exception{
        User user=new User();
        Class clazz=Class.forName("com.Higgin.reflect.User");
        //反射类的方法 public void userSay(String name,int age)
        Method method=clazz.getMethod("userSay", String.class,int.class);
        //"张三"和18为 userSay的传入参数
        method.invoke(user, "张三",18);
    }

【运行结果】

 

【情况四】 

【testUser.java】//反射类的方法 public Class[] userSay(String name,int[] age)

    @Test
    //反射类的方法 public Class[] userSay(String name,int[] age)
    public void test4() throws Exception{
        User user=new User();
        Class clazz=Class.forName("com.Higgin.reflect.User");
        
        Method method=clazz.getMethod("userSay", String.class,int[].class);
        Class cs[]=(Class[]) method.invoke(user,"李四", new int[]{1,2,3});
        System.out.println(cs[0]);
    }

【运行结果】

 

【情况五】

【testUser.java】//反射类的方法 public Class[] userSay(String name,int[] age),反射静态方法无需在invoke中传入参数,给null即可

@Test
    //反射类的方法 public Class[] userSay(String name,int[] age)
    public void test5() throws Exception{
        //User user=new User();
        Class clazz=Class.forName("com.Higgin.reflect.User");
        
        Method method=clazz.getMethod("userSay", int.class);
        method.invoke(null,20);  //反射的是静态方法,无需传入对象,不需要user对象
    }

 

【运行结果】(这里可没有构造方法的输出了)

 

posted @ 2016-08-14 21:41  HigginCui  阅读(196)  评论(0编辑  收藏  举报