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

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

  • 相关阅读:
    Lodash 严重安全漏洞背后 你不得不知道的 JavaScript 知识
    SQL Server和C#中无法将小数字符串直接转换为整数类型
    Is default(CancellationToken) equivalent to CancellationToken.None?(转载)
    Stored Procedures: OUTPUT vs OUT?(转载)
    关于TransactionScope.Complete方法(链接)
    Do I need to dispose of Tasks?(链接)
    EF Core 3.0 Keyless Entity Types (链接)
    为什么C#接口中不能声明async异步函数(转载)
    How does SqlDataReader handle really large queries?(转载)
    ASP.NET Core MVC中的Filter如果不实现IFilterFactory接口,那么Filter默认情况下在ASP.NET Core生命周期内是单例的,会被重用
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5771119.html
Copyright © 2011-2022 走看看