在线API :
http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
1
name
获得所有类型
name : String : class java.lang.String
protected_variable : String : class java.lang.String
age : String : class java.lang.String
sex : boolean : boolean
ID : String : class java.lang.String
Gene : String : class java.lang.String
获得所有修饰
name : 1 : public
protected_variable : 4 : protected
age : 2 : private
sex : 0 :
ID : 10 : private static
Gene : 18 : private final打印类结构
获得类对象
类对象只有一个,因为类对象保存在方法区(保存static的地方)
第一种
会执行静态语句块
Class 你要获得的 = Class.forName(你要获得的类的名);
第二种
不会执行静态语句块
Class 你要获得的 = 你要获得的类的名.class;
第三种
你要获得的类的名 临时名 =new 你要获得的类的名();
Class 你要获得的 = 临时名.getClass();
获得属性
public class UserInfo {
public String name;
protected String protected_variable;
private String age;
boolean sex;
private static String ID ;
private final String Gene = "AGCT";
}
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class MyReflect {
public static void main(String[] args) throws ClassNotFoundException {
Class the_userInfo =Class.forName("UserInfo");
Field[] get_variable;
System.out.println("只能获得公有属性");
get_variable=the_userInfo.getFields();
System.out.println(get_variable.length);
System.out.println(get_variable[0].getName());
System.out.println("获得所有类型");
get_variable = the_userInfo.getDeclaredFields();
for (Field f:get_variable){
System.out.println(f.getName()+" : "+f.getType().getSimpleName()+" : "+f.getType());
}
System.out.println("获得所有修饰");
for (Field f:get_variable){
System.out.println(f.getName()+" : "+f.getModifiers()+" : "+Modifier.toString(f.getModifiers()));
}
}
}
输出结果:
只能获得公有属性1
name
获得所有类型
name : String : class java.lang.String
protected_variable : String : class java.lang.String
age : String : class java.lang.String
sex : boolean : boolean
ID : String : class java.lang.String
Gene : String : class java.lang.String
获得所有修饰
name : 1 : public
protected_variable : 4 : protected
age : 2 : private
sex : 0 :
ID : 10 : private static
Gene : 18 : private final
打印类结构
public static void main(String[] args) throws ClassNotFoundException {
String class_name = "UserInfo";
Class a_class =Class.forName(class_name);//获得类对象
StringBuffer sb =new StringBuffer();
sb.append(Modifier.toString(a_class.getModifiers())+" class "+a_class.getSimpleName()+"{\n");// 输出 :修饰 class 类名
// 输出属性部分
Field[] fields = a_class.getDeclaredFields();
for(Field field:fields){
sb.append("\t");
sb.append(Modifier.toString(field.getModifiers()));//获得修饰字符
sb.append(" ");
sb.append(field.getType().getSimpleName());//获得类型名
sb.append(" ");
sb.append(field.getName());//获得变量名
sb.append(";\n");
}
// 输出方法部分
Method[] methods=a_class.getDeclaredMethods();
for(Method method:methods){
sb.append("\t");
sb.append(Modifier.toString(method.getModifiers()));//获得修饰字符
sb.append(" ");
sb.append(method.getReturnType().getSimpleName());//获得类型名
sb.append(" ");
sb.append(method.getName());//获得方法名
sb.append("(");
// 参数
Class[] parameter_types =method.getParameterTypes();
for (int i=0;i<parameter_types.length;i++){
Class parameter_type=parameter_types[i];
sb.append(parameter_type.getSimpleName());
if(1<parameter_types.length-i){
sb.append(",");
}
}
sb.append("){}\n");
}
sb.append("}\n");//类大括号结束
//打印查看
System.out.println(sb);
}