Java.反射.调用方法

// 取得一个类的全部方法定义
	public static void main(String[] args) {
		Class<?> class1 = null;
		try {
			class1 = Class.forName("fanshe.Person");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

		Method[] methods = class1.getMethods();// 得到类的全部方法
		for (int i = 0; i < methods.length; i++) {
			// 得到方法名
			String method_name = methods[i].getName();
			System.out.print(method_name);

			// 得到参数类型
			Parameter[] parameters = methods[i].getParameters();
			for (int j = 0; j < parameters.length; j++) {
				System.out.println(parameters[j].getName());
			}
			System.out.println();
		}
	}


// 取得Person类中的属性
	public static void main(String[] args) {
		Class<?> class1 = null;
		try {
			class1 = Class.forName("fanshe.Person");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

		{
			Field[] fields = class1.getDeclaredFields();// 取得Person类的属性
			for (int i = 0; i < fields.length; i++) {
				Class<?> type = fields[i].getType();
				System.out.print(fields[i].getName() + ",");// 取得属性的名称
				System.out.print(type.getName());// 取得属性的类型

				int modifiers = fields[i].getModifiers();// 取得访问修饰符(public,private)的数字
				String string = Modifier.toString(modifiers);// 取得访问修饰符
				System.out.print("." + string);//输出访问修饰符
				System.out.println();
			}
		}
		System.out.println("================================================");
		
	}



//调用Person类sayHi方法
	public static void main(String[] args) {
		Class<?> class1=null;
		try {
			class1=Class.forName("fanshe.Person");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		try {
			//方法原型public void sayHi(String content);
			//sayHi,方法名称;
			//String.class,方法参数的类型
			Method method = class1.getMethod("sayHi",String.class);
			
			//调用方法,必须传递对象实例和方法参数
			method.invoke(class1.newInstance(),"111");
		}  catch (Exception e) {
			// TODO: handle exception
		}
		
	}

猜你喜欢

转载自8850702.iteye.com/blog/2282566
今日推荐