zoukankan      html  css  js  c++  java
  • Java反射总结

    一. 获取Class对象的3种方法:

    1. Class.forName("");例如:Class.forName("java.lang.String");

    2. Class.class;例如:String.class;这种方法需要有类

    3. 对象.getClass();例如:String str = new String(); str.getClass;这种方法需要有对象

    二. 反射生成对象方法:

    1. 先创建Class对象,在通过Class对象的newInstance()方法直接生成对象即可。这种方法生成的对象只能是不带参数的构造方法;

    Class<?> clz = String.class; Object obj = clz.newInstance();

    2. 先创建Class对象,在获取对象的Constructor对象,在通过constructor对象的newInstance()方法;

    Class<?> clz = Customer.class;

    Constructor con = clz.getDeclaredConstructor(new Class[] {String.class, int.class});

    Object obj = con.newInstance(new Object[]{"Hello", 10});

    getDeclaredMethod*()获取的是类自身声明的所有方法,包含public、protected和private方法。

    getMethod*()获取的是类的所有共有方法,这就包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法。

    package reflect;

     

    import java.lang.reflect.Method; 

    public class InvokeTest {

      public int add(int a, int b) {

        return a + b;

      }

      public String echo(String str) {

        return "Hello " + str;

      }

     

      public static void main(String[] args) {

        Class<?> clz = InvokeTest.class;

     

        try {

          Method method = clz.getDeclaredMethod("add", new Class[]{int.class, int.class});

          Object result = method.invoke(clz.newInstance(), new Object[]{1, 2});

          System.out.println((Integer)result);

     

          method = clz.getDeclaredMethod("echo", new Class[]{String.class});

          result = method.invoke(clz.newInstance(), new Object[]{"World"});

          System.out.println((String)result);

        } catch (Exception e) {

          e.printStackTrace();

        }

      }

    }

  • 相关阅读:
    循环队列操作
    让测试人员参与软件设计
    Oracle之初探
    关注LoadRunner脚本回放日志中的Warning信息
    性能测试工具CurlLoader
    『原创』网站测试计划模板
    LoadRunner如何监控Linux下的系统资源
    搭建Linux学习环境安装CentOS5.4
    Linux下搭建Tomcat服务器
    性能测试分析之带宽瓶颈的疑惑
  • 原文地址:https://www.cnblogs.com/panning/p/5903568.html
Copyright © 2011-2022 走看看