java-反射-4

    科技2024-10-01  26

    package reflect_2020_09_29; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import javax.swing.plaf.synth.SynthScrollPaneUI; public class reflact_4 { /** * 成员方法Method * * 1.成员方法的修饰符 getModifiers(); * 2.成员方法的名字 getName(); * 3.成员方法的申明类型 getType(); * 4.成员方法的参数 getparameterTypes(); * * 获取成员方法: * 1.获取公有的成员方法 class.getMethods(); * 2.获取指定的公有方法 class.getMethods(成员方法,方法的参数···);这里的参数是不定参数 * 3.获取所有的成员方法 class.getDeclaredMethods(); * 4.获取指定的所有方法 class.getDeclaredMethods(成员方法,方法的参数···);这里的参数是不定参数 * * 调用方法的方法 invoke(调用方法的对象,方法参数) * * 第一步:获取类 * eg:Class c=pension.calss; * 第二步:关联操作类的类 * eg:Mothod m=c.getMothod("函数名"); * 第三步:运行类 * 第一步:创建Constructor对象 * 第二步:使用 * eg:m.invoke(); * * @param args */ public static void main(String[] args) { //这个获取指定的所有方法 //第一步获取这个类 Class c = pension.class; //第二步:使用Method这个获取方法 Method [] m1=c.getDeclaredMethods(); //第三步:遍历方法 for (int i=0;i<m1.length;i++) { System.out.print(Modifier.toString(m1[i].getModifiers()) + " ");//获取修饰符 System.out.print(m1[i].getReturnType().getSimpleName() + " ");//返回类型 System.out.print(m1[i].getName() + " (");//方法的名字 Class[] arg = m1[i].getParameterTypes();//方法的参数 for (int j = 0; j < arg.length; j++) { System.out.print(arg[j].getSimpleName() + " arg"); if (j != arg.length - 1) { System.out.print(","); } } System.out.print(") "); //异常 Class[] ex = m1[i].getExceptionTypes(); if (ex.length > 0) { System.out.print("throw "); } for (int j = 0; j < ex.length; j++) { System.out.print(ex[j].getSimpleName()); } System.out.println("{}"); System.out.println("\n"); } //使用指定的方法 try { Method m=c.getMethod("setId",int.class); Constructor<pension> cs=c.getConstructor(); pension p=cs.newInstance();//无参函数 m.invoke(p, 18);//p是对象名 System.out.println(p); } catch (NoSuchMethodException | SecurityException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (InstantiationException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IllegalAccessException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (InvocationTargetException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } package reflect_2020_09_29; public class pension { public int id; private int age; protected String name; public pension() { // TODO 自动生成的构造函数存根 } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) throws NoSuchMethodException{ this.name = name; } public pension(int id) { super(); this.id = id; } public pension(int age, String name) { super(); this.age = age; this.name = name; } private pension(int id, int age, String name) { super(); this.id = id; this.age = age; this.name = name; } @Override public String toString() { return "pension [id=" + id + ", age=" + age + ", name=" + name + "]"; } }
    Processed: 0.009, SQL: 8