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();

    }

  }

}

posted @ 2016-09-24 16:51  不停的奋斗  阅读(156)  评论(0编辑  收藏  举报