反射
0.得到class
Class c = Class.forName("java.lang.String");
1.构造方法
//得到public构造方法
c.getConstructors();
c.getConstructor(String.class);
//得到所有构造方法
c.getDeclaredConstructors();
c.getDeclaredConstructor(String.class);
2.普通方法
//得到public方法
c.getMethods();
c.getMethod("equals", Object.class);
//得到全部方法
c.getDeclaredMethods();
c.getDeclaredMethod("equals", Object.class);
3.参数
//得到public参数
c.getFields();
c.getField("hash");
//得到全部参数
c.getDeclaredFields();
c.getDeclaredField("hash");
代码
try直接exception,这里是为了好演示。
public class Main{
public static void main(String[] args) {
String string = null;
try {
Class c = Class.forName("java.lang.String");
//得到构造器,参数为类的某一构造器参数
Constructor constructor = c.getConstructor(String.class);
//private方法需要设置访问权限为true
//constructor.setAccessible(true);
// 执行构造函数,参数为对应参数。
string = (String) constructor.newInstance("ceshi");
System.out.println(string);
//得到方法,参数为方法名,方法参数
Method m = c.getDeclaredMethod("equals", Object.class);
//private方法需要设置访问权限为true
//m.setAccessible(true);
//执行函数,参数1.哪个对象的这个方法,2.一系列这个方法的参数
System.out.println(m.invoke(string, "qwe"));
//得到参数,参数为参数名
Field field = c.getDeclaredField("hash");
//private参数需要设置访问权限为true
field.setAccessible(true);
//获取参数,参数为获取哪个对象的这个属性,这里对象是string
int a = field.getInt(string);
System.out.println(a);
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出:
ceshi
false
0