01_反射_03_反射类的方法

本文通过五个具体案例,详细介绍了如何使用Java反射机制调用不同类型的类方法,包括无参、带参、静态方法等,并提供了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【工程截图】

 

【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对象
    }

 

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

 

转载于:https://www.cnblogs.com/HigginCui/p/5771119.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值