zoukankan      html  css  js  c++  java
  • Java之反射机制四:调用类的方法

    一.调用类的公有方法

    String str = "aa";
    Class<? extends String> clazz = str.getClass();
    Method concat = clazz.getMethod("concat", String.class);
    Object bb = concat.invoke(str,"bb");
    System.out.println(bb);

    运行结果:

     二.调用类的私有方法

    1.测试类

    package reflex;
    
    public class Test {
        private String a;
    
        private Test(){
    
        }
    
        public Test(String a) {
            this.a = a;
        }
    
        public String getA() {
            return a;
        }
    
        public void setA(String a) {
            this.a = a;
        }
    
        private String concatStr(String b){
            return this.a.concat(b);
        }
    }

    2.调用该类的concatStr方法

    @Test
        public void testInvoke() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
            reflex.Test testStr = new reflex.Test("aa");
            Class<? extends reflex.Test> clazz = testStr.getClass();
            //获取到该私有方法的Method对象
            Method method = clazz.getDeclaredMethod("concatStr", String.class);
            //忽略访问修饰符的检查
            method.setAccessible(true);
            Object obj = method.invoke(testStr, "bb");
            System.out.println(obj);
        }

    调用结果:

     三.调用类的公有构造方法

    @Test
        public void testConstructor() throws Exception {
            Class<reflex.Test> clazz = reflex.Test.class;
            //获取该类的Constructor对象
            Constructor<reflex.Test> constructor = clazz.getConstructor(String.class);
            //Constructor.newInstance方法可以创建该类的实例
            reflex.Test hello = constructor.newInstance("hello");
            System.out.println(hello.getA());
        }

    运行结果:

    四.调用类的私有构造方法

        @Test
        public void testConstructor2() throws Exception {
            Class<reflex.Test> clazz = reflex.Test.class;
            Constructor<reflex.Test> constructor = clazz.getDeclaredConstructor();
            //忽略访问修饰符的检查
            constructor.setAccessible(true);
            reflex.Test test = constructor.newInstance();
            System.out.println(test);
        }

    运行结果:

  • 相关阅读:
    my read travel
    OS + CentOS 7 / centos 7 / config / configuration / rescue / rc.local / yum
    my soft / win soft
    如何撰写发明专利申请文件
    专利局审查员如何审专利
    国际专利分类表(2016版)
    手把手教你写专利申请书/如何申请专利
    Packets switched through Linux bridge have very high packet delay variation and latency?
    当心僵尸:过时Linux内核的安全风险
    飞漫魏永明:从MiniGUI看嵌入式十年得与失
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/12540109.html
Copyright © 2011-2022 走看看