• 反射获取方法


    Method

    Class.getMethod(String, Class...) 和 Class.getDeclaredMethod(String, Class...)方法可以获取类中的指定方法,调用invoke(Object, Object...)可以调用该方法,Class.getMethod("eat") invoke(obj) Class.getMethod("eat",int.class) invoke(obj,10)

    public class Demo_Method {
    
        /**
         * Class.getMethod(String, Class...) 和 Class.getDeclaredMethod(String,
         * Class...)方法可以获取类中的指定方法,调用invoke(Object,
         * Object...)可以调用该方法,Class.getMethod("eat") invoke(obj)
         * Class.getMethod("eat",int.class) invoke(obj,10)
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
            Class clazz = Class.forName("com.loaderman.bean.Person");
            Constructor c = clazz.getConstructor(String.class,int.class);//获取有参构造
            Person p = (Person) c.newInstance("张三",23);     //通过有参构造创建对象
    
            Method m = clazz.getMethod("eat");         //获取eat方法
            m.invoke(p);
    
            Method m2 = clazz.getMethod("eat", int.class);  //获取有参的eat方法
            m2.invoke(p, 10);
        }
    
    }
    
    package com.loaderman.bean;
    
    public class Person {
        private String name;
        private int age;
        public Person() {
            super();
    
        }
        public Person(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + age;
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (this.getClass() != obj.getClass())    //判断调用对象和传入对象的字节码文件是否是同一个字节码文件
                return false;
            Person other = (Person) obj;
            if (age != other.age)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + "]";
        }
    
        public void eat() {
            System.out.println("今天吃了一顿金钱豹");
        }
    
        public void eat(int num) {
            System.out.println("今天吃了" + num + "顿金钱豹");
        }
    }
    
  • 相关阅读:
    fedora 24 使用扇贝网页版没有声音
    Fedora 23安装 NS2 (network simulator 2)
    如何扩大LVM 逻辑分区的大小?
    code::blocks编译出错
    Fedora 23 忘记root密码
    u盘安装Fedora23
    Derived 派生类
    移动点的坐标
    进栈 出栈
    C和C++语言&
  • 原文地址:https://www.cnblogs.com/loaderman/p/6411279.html
Copyright © 2020-2023  润新知