java-reflejo-4

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 + "]";
	}

}

Supongo que te gusta

Origin blog.csdn.net/huiguo_/article/details/108953508
Recomendado
Clasificación