一. 获取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();

    }

  }

}

最新文章

  1. LeetCode 【318. Maximum Product of Word Lengths】
  2. Setup Factory 关闭正在运行的程序
  3. header
  4. HTTP状态码(响应码)
  5. Java对ArrayList进行排序
  6. Centos 5.5 安装Mysql5.5过程
  7. js中的“闭包”
  8. Flex移动应用程序开发的技巧和窍门(五)
  9. 使用CJSON库实现XML与JSON格式的相互转化
  10. 详解用em替换px
  11. EditText以及登录UI实现
  12. Servlet(2)
  13. 既然选择了远方,便只顾风雨兼程--myvue
  14. python中类与对象及其绑定方法的定义
  15. 【Maven】安装配置、目录结构、配置文件、常见命令
  16. VirtualBox 端口转发 SSH
  17. SEO--质量监测
  18. AI之路,第二篇:python数学知识2
  19. Android之仿String的对象驻留
  20. Asp.Net Core 静态文件目录操作

热门文章

  1. GCC精彩之旅_2(转)
  2. 【BZOJ3993】 星际战争
  3. Nginx 调优经验记录
  4. python2.x和python3.x的区别
  5. ActiveMq笔记2-消息持久化
  6. mysql修改记录
  7. Redis多服务器负载均衡的实现
  8. 【Unity3D】Unity3D开发《我的世界》之三、创建一个Chunk
  9. GetWindowRect、GetClientRect、ScreenToClient与ClientToScreen
  10. WIN2003+IIS6+FastCGI+PHP5.3的安装配置