[java]
<SPAN style="FONT-FAMILY: SimSun; FONT-SIZE: 14px">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());
}</SPAN>
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]
<SPAN style="FONT-FAMILY: SimSun; FONT-SIZE: 14px">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();
}</SPAN>
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]
<SPAN style="FONT-FAMILY: SimSun; FONT-SIZE: 14px">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());
}</SPAN>
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());
}
Method:类的方法
Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。 跟Field一样通过Class的四个静态方法来获得Method对象跟数组:
第一个getMethod 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。name 参数是一个 String,用于指定所需方法的简称。parameterTypes 参数是按声明顺序标识该方法形参类型的 Class 对象的一个数组。如果 parameterTypes 为 null,则按空数组处理。
第二个getDeclaredMethod返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。name 参数是一个 String,它指定所需方法的简称,parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识该方法的形参类型。如果在某个类中声明了带有相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;否则将从中任选一个方法。如果名称是 "<init>” 或 “<clinit>",则引发一个 NoSuchMethodException。
[java]
<SPAN style="FONT-FAMILY: SimSun; FONT-SIZE: 14px">Class class1 = null;
try {
//com.test.hzw.bean.test_user为类的全路径名
class1 = Class.forName("com.test.hzw.bean.test_user");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Method m = null;
try {
m = class1.getDeclaredMethod("getPass"); //参数填写类中任意方法的方法名称
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
补充:软件开发 , Java ,