java 反射机制学习(一) (一)

2014-11-24 11:54:51 · 作者: · 浏览: 45
[java]
String classPath = "com.test.hzw.bean.test_user"; //B君的类路径
Class cls = Class.forName(classPath);
Field[] fieldlist = cls.getDeclaredFields();
for (int i = 0; i < fieldlist.length; i++) {
Field fld = fieldlist[i];
System.out.println("妹纸的属性名称 = " + fld.getName());
System.out.println("妹纸的类型名称 = " + fld.getType());
}
String classPath = "com.test.hzw.bean.test_user"; //B君的类路径
Class cls = Class.forName(classPath);
Field[] fieldlist = cls.getDeclaredFields();
for (int i = 0; i < fieldlist.length; i++) {
Field fld = fieldlist[i];
System.out.println("妹纸的属性名称 = " + fld.getName());
System.out.println("妹纸的类型名称 = " + fld.getType());
}
Java的反射机制、能够在java运行时根据类的路径去获取与路径对应的Class对象。在根据这个类对象去获取类的成员变量、方法、构造这些东西、哪怕他们是私有的。获取到这些东西来做什么?你可以用他们来判断、也可以调用他们去完成某些功能。
Class:类
既然一切的前提就是要获取到Class对象。那么就得看看java.lang.Class这个类。继续Google了一下、发现有前辈写了一篇文章:
http://blog.csdn.net/hzw2312/article/details/8637199
文章很OK、我这里借用一下、就在不多加描述了。
Field:类的成员变量
Field类、提供有关类或接口的单个字段的信息,以及对它的动态访问权限。可以通过Class的四个静态方法来获得Field对象跟数组:
第一个getField方法返回一个Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明的public字段(包含继承字段)。
第二个方法getDeclaredField返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段(不包含继承字段)。name 参数是一个 String,它指定所需字段的简称。
[java]
Class class1 = null;
try {
//com.test.hzw.bean.test_user为类的全路径名
class1 = Class.forName("com.test.hzw.bean.test_user");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
  //getField方法就不写了
Field ff = class1.getDeclaredField("name");
System.out.println(ff.getName());
System.out.println(ff.getType());
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
Class class1 = null;
try {
//com.test.hzw.bean.test_user为类的全路径名
class1 = Class.forName("com.test.hzw.bean.test_user");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
  //getField方法就不写了
Field ff = class1.getDeclaredField("name");
System.out.println(ff.getName());
System.out.println(ff.getType());
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
第三个方法getFields则返回Class对象所表示的类或接口的所有可访问公共字段(包括继承字段)。
第四个getDeclaredFields方法返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
[java]
Class class1 = null;
try {
//com.test.hzw.bean.test_user为类的全路径名
class1 = Class.forName("com.test.hzw.bean.test_user");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Field[] f = class1.getDeclaredFields();
for (int i = 0; i < f.length; i++) {
Field field = f[i];
System.out.println("属性名称:"+field.getName());
System.out.println("属性类型:"+field.getType());
}
Class class1 = null;
try {
//com.test.hzw.bean.test_user为类的全路径名
class1 = Class.forName("com.test.hzw.bean.test_user");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Field[] f = class1.getDeclaredFields();
for (in