java Class getDeclaredFields() 与getFields()的区别

来源:互联网 发布:入侵摄像头软件 编辑:程序博客网 时间:2024/06/05 04:38


getFields()与getDeclaredFields()区别:getFields()只能访问类中声明为公有的字段,私有的字段它无法访问,能访问从其它类继承来的公有方法.getDeclaredFields()能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法  


 getMethods()与getDeclaredMethods()区别:getMethods()只能访问类中声明为公有的方法,私有的方法它无法访问,能访问从其它类继承来的公有方法.getDeclaredFields()能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法  

*

getConstructors()与getDeclaredConstructors()区别:getConstructors()只能访问类中声明为public的构造函数.getDeclaredConstructors()能访问类中所有的构造函数,与public,private,protect无关  


class Person2 implements China{private static String sex ;public static String length;}
class Person2 implements China{private static String sex ;public static String length;}

public class Reflect_Example_10 {public static void main(String[] args) {/* *  getFields()与getDeclaredFields()区别: *  getFields()只能访问类中声明为公有的字段,私有的字段它无法访问,能访问从其它类继承来的公有方法. *  getDeclaredFields()能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法  */Class<?> demo = null;try {demo = Class.forName("com.reflect.Person2");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("====本类属性,不包括实现的接口或者父类的属性(public,protected,private)====");Field[] fields = demo.getDeclaredFields();for (Field field : fields) {int mod = field.getModifiers();String modifier = Modifier.toString(mod);Class<?> type = field.getType();String typeName = type.getName();String fieldName = field.getName();System.out.println("域:" + modifier + " " + typeName + " " + fieldName + ";");}System.out.println("====公有属性,包括实现的接口或者父类的公有属性(public)====");Field[] superFields = demo.getFields();for (Field field : superFields) {int mod = field.getModifiers();String modifier = Modifier.toString(mod);Class<?> type = field.getType();String typeName = type.getName();String fieldName = field.getName();System.out.println("域:" + modifier + " " + typeName + " " + fieldName + ";");}}}

运行结果:

====本类属性,不包括实现的接口或者父类的属性(public,protected,private)====
域:private static java.lang.String sex;
域:public static java.lang.String length;
====公有属性,包括实现的接口或者父类的公有属性(public)====
域:public static java.lang.String length;
域:public static final java.lang.String name;
域:public static final int age;


原文:http://mxdxm.iteye.com/blog/927990



0 0
原创粉丝点击