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

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

  • 相关阅读:
    Android AlertDialog警告对话框实现
    Android状态栏通知Status Bar Notification
    Android spinner控件的实现
    Winform之UI后台线程
    Winform之自定义控件
    WebForm原理,aspx服务器端与客户端源码比较
    IHttpModule之闲扯
    [算法]方正面试题:N×N矩阵螺旋打印输出
    DOTA版设计模式——工厂方法
    Window服务
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5771119.html
Copyright © 2020-2023  润新知