• java黑魔法-反射机制-02-通过Java反射调用其他类方法


    package com.aaron.reflect;
    
    import java.lang.reflect.Method; 
    import java.lang.reflect.InvocationTargetException; 
    
    /** 
    * Created by IntelliJ IDEA. 
    * File: TestRef.java 
    * User: leizhimin 
    * Date: 2008-1-28 14:48:44 
    */ 
    public class TestRef { 
        //直接  foo.outInfo(); 也可以调用那个自定义的方法
        public static void main(String args[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { 
            Foo foo = new Foo("这个一个Foo对象!"); //一个类的真正的对象
            Class<?> clazz = foo.getClass();  // ?任意类型     Foo.class赋值给clazz也可以

    Method m1 clazz.getDeclaredMethod("outInfo"); //自定义的方法,m1即是方法名 Method m2 = clazz.getDeclaredMethod("setMsg", String.class);//set方法 Method m3 = clazz.getDeclaredMethod("getMsg"); //get方法 //下面的语句输出--------这是测试Java反射的测试类 m1.invoke(foo); //不用print就可以打印消息,而且断点foo是一个确实Foo类的对象 m2.invoke(foo, "重新设置msg信息!"); //不输出 String msg = (String) m3.invoke(foo); System.out.println(msg); //重新设置msg信息! } //方法名.invoke(类的对象); } class Foo { private String msg; public Foo(String msg) { this.msg = msg; } public void setMsg(String msg) { this.msg = msg; } public String getMsg() { return msg; } public void outInfo() { System.out.println("这是测试Java反射的测试类"); } }
    package com.aaron.reflect;
     
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
     
    public class Demo5 {
        public static void main(String[] args) {
            Class<?> herosClass = Heros.class; //获得Class类的实例
            //  new herosClass() 不可以new
            try { // 断点里面herosClass的值是class com.aaron.reflect.Heros
                Method m1 = herosClass.getMethod("setName",String.class);
                Method m2 = herosClass.getMethod("getName");
                Method m3 = herosClass.getMethod("say");
               // 或者 Object userInfo = herosClass.newInstance() 
                Heros userInfo =(Heros) herosClass.newInstance();//userInfo值并不是以前那些对象值那样
                m1.invoke(userInfo,"影魔");//调用了set方法了在这里
                System.out.println("调用set方法:"+userInfo);//输出[Heros [name=影魔, type=null,camp=0 ]]                                                                                        
                System.out.println("调用get方法:"+m2.invoke(userInfo));//调用get方法:影魔
                m3.invoke(userInfo); // 可以调用自己的方法
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    
    package com.aaron.reflect;
    public class Heros {
        private String name;//名字
        private String type;//类型
        private int camp;//
         
        public Heros(){}
     
        public Heros(String name, String type, int camp) {
            super();
            this.name = name;
            this.type = type;
            this.camp = camp;
        }
        public void say(){
            System.out.println("可以调用自己的方法");
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public String getType() {
            return type;
        }
     
        public void setType(String type) {
            this.type = type;
        }
     
        public int getCamp() {
            return camp;
        }
     
        public void setCamp(int camp) {
            this.camp = camp;
        }
     
        @Override
        public String toString() {
            return "Heros [
     name=" + name + ", 
     type=" + type + ", 
     camp=" + camp + "
    ]";
        }
         
    }
  • 相关阅读:
    烂泥:高负载均衡学习haproxy之TCP应用
    烂泥:高负载均衡学习haproxy之关键词介绍
    sqlpuls基本命令
    Oracle开机自启动
    centos6.5安装oracle11g_2
    centos7安装图片界面
    centos7安装activemq
    centos7删除自带openjdk
    centos7安装nexus私服2.14
    mysql优化记录
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/7296606.html
Copyright © 2020-2023  润新知