java反射的一些基础知识点

                 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 cls3=Class.forName("java.lang.Object");//第三种



猜你喜欢

转载自blog.csdn.net/qzy623569881/article/details/80302993