http://blog.csdn.net/lycorisradiata_1/article/details/48493255
反射概述
Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的內部信息,并能直接操作任意对象的内部属性及方法。
Java反射机制主要提供了以下功能:
- 在运行时构造任意一个类的对象
- 在运行时获取任意一个类所具有的成员变量和方法
- 在运行时调用任意一个对象的方法(属性)
- 生成动态代理
Class 是一个类; 一个描述类的类.
封装了描述方法的 Method,
描述字段的 Filed,
描述构造器的 Constructor 等属性.
package com.java.my;
import com.java.my.service.testService;
/**
* @author wanjiadong
* @description
* @date Create in 9:53 2018/1/31
*/
public class test1 {
public static void main(String[] args) throws Exception {
//第一种newInstance实例一个对象,通常与forName()配合使用
testService t = (testService) Class.forName("com.java.my.service.testService").newInstance();
String str = t.checkName("ff");
//使用反射
Class<?> c = Thread.currentThread().getContextClassLoader().loadClass("com.java.my.service.testService");
Object cStr = c.getMethod("checkName",String.class).invoke(c.newInstance(),"ff");
System.out.println(cStr.toString());
}
}
public static void main(String[] args) throws Exception {
// Class clazz = Test1.class;
// Test1 test1 = (Test1) clazz.newInstance();
//
// Field[] fields = clazz.getDeclaredFields();
// Constructor[] constructors = clazz.getDeclaredConstructors();
// System.out.println(clazz.getClassLoader());
Class clazz = Thread.currentThread().getContextClassLoader().loadClass("com.pojo.Test1");
clazz = Class.forName("com.pojo.Test1");
Method method = clazz.getDeclaredMethod("saySomething",String.class, int.class);
Object objecct = method.invoke(clazz.newInstance(), "nima", 4);
System.out.println(objecct.toString());
Method method1 = clazz.getDeclaredMethod("saySomething1",String.class, int.class);
method1.setAccessible(true);
Object objecct1 = method1.invoke(clazz.newInstance(), "nima111", 5);
System.out.println(objecct1.toString());
Field field = clazz.getDeclaredField("sex");
field.setAccessible(true);
System.out.println(field.get(clazz.newInstance()));
}