zoukankan      html  css  js  c++  java
  • 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对象
        }

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

  • 相关阅读:
    WebAPI跨域问题处理
    WebAPI学习及Swagger使用
    MSMQ消息队列总结
    学习笔记——泛型
    学习笔记——并行编程Parallel
    学习笔记——多线程
    学习笔记——线程 Thread
    springboot,maven依赖引用失败,手动将jar包导入maven本地仓库
    PostgreSQL如何实现MySQL中的group_concat聚集函数(简单的拼接功能)
    mybatis的XML配置文件sql查询中,传入对象参中某个字段为list时,sql编写方式。
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5771119.html
Copyright © 2011-2022 走看看