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 + "]";
}
}
转载请注明原文地址:https://blackberry.8miu.com/read-33579.html