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

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

  • 相关阅读:
    laravel中使用include和component方法中的一点小区别
    【解决】Converting circular structure to JSON
    NUXT中使用axios,自己项目测试记录
    iPhone“连到系统上的设备没有发挥作用”原因分析及解决方法 20200105
    vue-touch不能上下滑动的问题【解决】
    动态加载swiper,默认显示最后一个swiper-slide怎么办
    CentOS 7 修改开机等待时间
    使用IIS管理器搭建FTP服务器以及其启用虚拟主机名
    织梦后台删除子栏目不成功的解决方法
    去除织梦标签[field:image/]所产生的宽高
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5771119.html
Copyright © 2020-2023  润新知