Java(Method类)



Method类

Method类代表某个类中的一个成员方法

得到类中的某一个方法:

例子:Method charAt=

Class.forName("java.lang.String").getMethod("charAt",int class);


调用方法:

通常方法: System.out.println(str1.charAt(1));

反射方法: System.out.println(charAt.invoke(str,1));

如果传递给Method对象的invoke()方法的第一个参数是null,说明该Method对象对应的是一个静态方法

//str1.charAt(1);
		Method methodCharAt = String.class.getMethod("charAt", int.class);
		
		System.out.println(	methodCharAt.invoke(str1, 2));/*invoke就是调用,是对象上的方法(methodCharAt表示方法)
		举例:画圆,画圆的动作是一个方法,是在圆身上的方法,
		例如:一个人在黑板上画圆,需要圆心半径,画圆这个方法要用到圆心和半径,他们是私有的,
		如果把画圆的方法分配给了人,意味着人要去访问圆的私有方法,同理给黑板也不合适,所以分配给圆,
		圆有一个动作:画我circle.draw()。
		举例:列车司机把列车刹车停下来了。司机给列车信号,停车只有列车自己干得了。
		*/
		//面向对象,私有化对象,如果谁能操作这个变量,那么这个变量在谁身上,那么这个方法就应该在谁身上,专家模式,谁有数据
		//new String[] {new String("abc"),new String("123")};
		System.out.println(	methodCharAt.invoke(str1, new Object[]{2}));//JDK1.4调用方法

--------------------------------------------

用反射方法执行某个类中的main方法

目标:写一个程序,能够根据用户提供的类名,去执行该类中的main方法

为什么要用反射实现?

因为如果,源程序没有给类名,只是通过传递的参数来执行哪个类

String startingClassName = args[0];

class TestArguments{
	public static void main(String[] args){
		for(String arg:args){
			System.out.println(arg);
		}
	}
}


TestArguments.main(new String[]{"111","222","333"});
		String startingClassName = args[0];
		Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);		
		mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});//接受字符串数组,会被打开包装,每一个元素作为一个参数(先包装一层)
		mainMethod.invoke(null, (Object)new String[]{"111","222","333"});//null,静态方法(告诉编译器这是个object)



你可能感兴趣的:(Java(Method类))