java多态反射机制例子(二)

2014-11-24 03:03:10 · 作者: · 浏览: 1
static void main(String[] args) throws Exception {

String className = "fanshe.Customer" ;

// className cus = new className();

// 得到类的信息

Class c = Class.forName(className);

// 得到构造函数,就可以生成一个对象

Constructor[] cons = c.getConstructors();

for ( int i = 0 ; i < cons.length; i++) {

String str = cons[i].getName();

System.out.println("名字:" + str);

Class[] params = cons[i].getParameterTypes();// 得到参数类型

for ( int j = 0 ; j < params.length; j++) {

String name = params[j].getName();

System.out.println(name);

}

}

//得到里面的成员函数(包括继承过来的),就可以调用成员函数

Method[] met = c.getMethods();

for ( int i = 0 ; i < met.length; i++) {

String str = met[i].getName();

System.out.println("名字:" + str);

Class[] params = met[i].getParameterTypes();// 得到参数类型

for ( int j = 0 ; j < params.length; j++) {

String name = params[j].getName();

System.out.println(name);

}

}

}

}

package fanshe;

import java.lang.reflect.Constructor;

import java.lang.reflect.Method;

public class Test2 {

@SuppressWarnings ( "unchecked" )

public static void main(String[] args) throws Exception {

/*

* 反射为配置文件改变模块行为提供了可能

*/

String className = "fanshe.Customer" ;

Class c = Class.forName(className);

//c.newInstance();表示调用不带参数的构造函数

// 生成一个对象:用构造函数

Constructor con1 = c.getConstructor(new Class[] {Class.forName( "java.lang.String" ),Class.forName( "java.lang.String" ) });

//Constructor con1 = c.getConstructor(new Class[] {});// 得到不带参数的构造函数

// 生成对象

Object obj = con1.newInstance(new Object[] { "222" , "111" });

//Object obj = con1.newInstance(new Object[] {});// 表示不传入参数

//怎样调用obj里面的方法

Method met = c.getMethod("printInfo" , new Class[]{}); //得到方法

met.invoke(obj, new Object[]{}); //调用

/*Customer cus = new Customer("222","111");

cus.printInfo();*/

}

}

/*public class Test2 {

public static void main(String[] args) throws Exception {

String className = "fanshe.Customer";

Class c = Class.forName(className);

Constructor con1 = c.getConstructor(new Class[] {Class.forName("java.lang.String"),Class.forName("java.lang.String") });

Object obj = con1.newInstance(new Object[] {"222","111"});

Method met = c.getMethod("printInfo", new Class[]{});

met.invoke(obj, new Object[]{});

}

}*/

作者:yajie