* 需求:
* 任意给出一个类名称,打印出类中的构造方法,成员方法,成员变量类型
*
*解决方案:
*由java的反射机制: 将一个java类的各种成分映射成java类
*如果获取了类中的方法,字段对象,就可以实现需求了.
*
*关键词: 反射 Class
源码如下:
package zhangweicong.example.heima.reflex;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
/**
* 需求:
* 任意给出一个类名称,打印出类中的构造方法,成员方法,成员变量类型
*
*解决方案:
*由java的反射机制: 将一个java类的各种成分映射成java类
*如果获取了类中的方法,字段对象,就可以实现需求了.
*
*关键词: 反射 Class
*/
public class ReflexTest {
private Class clazz;
public static void main(String[] args) {
String className="java.util.ArrayList";
ReflexTest reflex=new ReflexTest(className);
Class clazz = reflex.getClass();
System.out.println(className);
reflex.printFields();
reflex.printConstructionMethod();
reflex.printMethods();
}
public Class getClazz() {
return clazz;
}
public void setClazz(Class clazz) {
this.clazz = clazz;
}
/**
*
* @param className
*/
public ReflexTest(String className){
try {
clazz=Class.forName(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 打印类的构造方法名,和形参类型
*/
public void printConstructionMethod(){
if(clazz==null) return ;
Constructor[] constructors = clazz.getConstructors();
print("-----Constructors Start-----");
for( Constructor constructor : constructors){
StringBuilder stb=new StringBuilder();
stb.append(constructor.getName());
stb.append("(");
Class[] parameterTypes = constructor.getParameterTypes();
for( Class c : parameterTypes){
stb.append(c.getName()+",");
}
if(parameterTypes!=null&¶meterTypes.length>0)
stb.deleteCharAt( stb.length()-1);
stb.append(")");
print(stb.toString());
}
print("-----Constructors End-----");
}
/**
* 打印类的方法名,和形参类型
*/
public void printMethods(){
if(clazz==null) return ;
Method[] methods = clazz.getMethods();
print("-----Methods Start-----");
for( Method method : methods){
StringBuilder stb=new StringBuilder();
stb.append(method.getName());
stb.append("(");
Class[] parameterTypes = method.getParameterTypes();
for( Class c : parameterTypes){
stb.append(c.getName()+",");
}
if(parameterTypes!=null&¶meterTypes.length>0)
stb.deleteCharAt( stb.length()-1);
stb.append(")");
print(stb.toString());
}
print("-----Methods End-----");
}
public void printFields(){
if(clazz==null)return ;
Field[] fields = clazz.getFields();
print("-----Fields Start-----");
for(Field field : fields ){
StringBuilder stb=new StringBuilder();
stb.append(field.getType().getName()+" "+field.getName());
print(stb.toString());
}
print("-----Fields End-----");
}
public void print(String args){
System.out.println(args);
}
}