Object obj=new Object();
//三种方法创建的对象其实是同一个
Class cls1=obj.getClass();//第一种方法
Class cls2=Object.class;//第二种Method成员方法类:
* 获取方法的修饰符 Class.getModifiers();
* 获取方法的名字 Class.getName();
* 获取方法的声明类型 Class.getType();
* 获取方法的参数数组 Class.getParameterTypes();
* 获取所有的方法 返回的是Method数组 Class.getDeclaredMethods();
* 获取所有指定的方法 Class.getDeclaredMethod("方法名", 方法参数);
* 获取共有的方法 Class.getMethods();
* 获取指定的共有的方法 Class.getMethods("方法名", 方法参数);
*/
public class 利用反射获取成员方法 {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
Class bb=Class.forName("Test");//获取String的方法
Method ms[]=bb.getDeclaredMethods();//获取所有的方法 包含私有的 返回的是Method数组
for (Method a : ms) {
//Modifier.toString()方法 将 a.getModifiers() 返回的int值转为字符串
System.out.print(Modifier.toString(a.getModifiers())+" ");//获取方法修饰符
System.err.print(a.getReturnType().getSimpleName()+" ");//获取方法返回值
System.out.print(a.getName()+"(");//获取方法名字
Class cc[]=a.getParameterTypes();//获取方法的参数数组 返回的是Class类型数组
for (int i = 0; i < cc.length; i++) {
System.out.print(cc[i].getSimpleName()+" arg ");
if(i<cc.length-1) {
System.out.print(","); //如果不是最后一个则加上逗号
}
}
System.out.print(")");
Class cc2[]=a.getExceptionTypes();//返回所有的异常 返回的是Class类型的数组
if(cc2.length>0) {
System.out.print(" throws ");
for (int i = 0; i < cc2.length; i++) {
System.out.print(cc2[i].getSimpleName());
if(i<cc2.length-1) {
System.out.print(",");//如果不是最后一个则加上逗号
}
}
}
System.out.println("{ }");
Constructor cs=bb.getConstructor();
Object obj=bb.newInstance();// 这么写yes可以的 Test obj=(Test)bb.newInstance();
Method mss=bb.getDeclaredMethod("add", int.class,int.class);// 获取 Test类里的 add 方法
mss.setAccessible(true);//获取使用权限 就可以使用私有的方法了
mss.invoke(obj, 1,2);//调用 反射这个方法
}
}
}
//三种方法创建的对象其实是同一个
Class cls1=obj.getClass();//第一种方法
Class cls2=Object.class;//第二种Method成员方法类:
* 获取方法的修饰符 Class.getModifiers();
* 获取方法的名字 Class.getName();
* 获取方法的声明类型 Class.getType();
* 获取方法的参数数组 Class.getParameterTypes();
* 获取所有的方法 返回的是Method数组 Class.getDeclaredMethods();
* 获取所有指定的方法 Class.getDeclaredMethod("方法名", 方法参数);
* 获取共有的方法 Class.getMethods();
* 获取指定的共有的方法 Class.getMethods("方法名", 方法参数);
*/
public class 利用反射获取成员方法 {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
Class bb=Class.forName("Test");//获取String的方法
Method ms[]=bb.getDeclaredMethods();//获取所有的方法 包含私有的 返回的是Method数组
for (Method a : ms) {
//Modifier.toString()方法 将 a.getModifiers() 返回的int值转为字符串
System.out.print(Modifier.toString(a.getModifiers())+" ");//获取方法修饰符
System.err.print(a.getReturnType().getSimpleName()+" ");//获取方法返回值
System.out.print(a.getName()+"(");//获取方法名字
Class cc[]=a.getParameterTypes();//获取方法的参数数组 返回的是Class类型数组
for (int i = 0; i < cc.length; i++) {
System.out.print(cc[i].getSimpleName()+" arg ");
if(i<cc.length-1) {
System.out.print(","); //如果不是最后一个则加上逗号
}
}
System.out.print(")");
Class cc2[]=a.getExceptionTypes();//返回所有的异常 返回的是Class类型的数组
if(cc2.length>0) {
System.out.print(" throws ");
for (int i = 0; i < cc2.length; i++) {
System.out.print(cc2[i].getSimpleName());
if(i<cc2.length-1) {
System.out.print(",");//如果不是最后一个则加上逗号
}
}
}
System.out.println("{ }");
Constructor cs=bb.getConstructor();
Object obj=bb.newInstance();// 这么写yes可以的 Test obj=(Test)bb.newInstance();
Method mss=bb.getDeclaredMethod("add", int.class,int.class);// 获取 Test类里的 add 方法
mss.setAccessible(true);//获取使用权限 就可以使用私有的方法了
mss.invoke(obj, 1,2);//调用 反射这个方法
}
}
}
Class cls3=Class.forName("java.lang.Object");//第三种