`

getFields()与getDeclaredFields()区别

    博客分类:
  • java
 
阅读更多
 
1.package study.reflection;   
2.  
3.public class People {   
4.public String name = null;   
5.private String sex = null;   
6.private String age = null;   
7.private String tel = null;   
8.private String address = null;   
9.public static String s = null;   
10.static {   
11.   System.out.println("loading People");   
12.}   
13.  
14.public static void showPeople() {   
15.  
16.}   
17.  
18.public People(String name) {   
19.   this.name = name;   
20.}   
21.  
22.private People() {   
23.   this.name = name;   
24.}   
25.  
26.private void showPeopleInfo() {   
27.   System.out.println(name + " " + sex + " " + age + " " + tel + " "  
28.     + address);   
29.}   
30.  
31.public String getName() {   
32.   return name;   
33.}   
34.  
35.public void setName(String name) {   
36.   this.name = name;   
37.}   
38.  
39.public String getSex() {   
40.   return sex;   
41.}   
42.  
43.public void setSex(String sex) {   
44.   this.sex = sex;   
45.}   
46.  
47.public String getAge() {   
48.   return age;   
49.}   
50.  
51.public void setAge(String age) {   
52.   this.age = age;   
53.}   
54.  
55.public String getTel() {   
56.   return tel;   
57.}   
58.  
59.public void setTel(String tel) {   
60.   this.tel = tel;   
61.}   
62.  
63.public String getAddress() {   
64.   return address;   
65.}   
66.  
67.public void setAddress(String address) {   
68.   this.address = address;   
69.}   
70.  
71.}   
72.  
73.package esg;   
74.  
75.import java.lang.reflect.Constructor;   
76.import java.lang.reflect.Field;   
77.import java.lang.reflect.Method;   
78.  
79.import study.reflection.People;   
80.  
81.public class Esg {   
82.  
83.public static void main(String[] a) throws ClassNotFoundException {   
84.   Class c1 = People.class;   
85.  
86.   Field[] fs = c1.getFields();   
87.   System.out.println("*******getFields()*********");   
88.   for (int i = 0; i < fs.length; i++) {   
89.    System.out.println(fs[i].getName());   
90.   }   
91.   System.out.println("*******getDeclaredFields()*********");   
92.   fs = c1.getDeclaredFields();   
93.   for (int i = 0; i < fs.length; i++) {   
94.    System.out.println(fs[i].getName());   
95.   }   
96.   System.out.println("*******getMethods()*********");   
97.   Method[] md = c1.getMethods();   
98.   for (int i = 0; i < md.length; i++) {   
99.    System.out.println(md[i].getName());   
100.   }   
101.   System.out.println("*******getDeclaredMethods()*********");   
102.   md = c1.getDeclaredMethods();   
103.   for (int i = 0; i < md.length; i++) {   
104.    System.out.println(md[i].getName());   
105.   }   
106.  
107.   System.out.println("*******getConstructors()*********");   
108.   Constructor[] con = c1.getConstructors();   
109.   for (int i = 0; i < con.length; i++) {   
110.    System.out.println(con[i].getName());   
111.   }   
112.   System.out.println("*******getDeclaredConstructors()*********");   
113.   con = c1.getDeclaredConstructors();   
114.   for (int i = 0; i < con.length; i++) {   
115.    System.out.println(con[i].getName());   
116.   }   
117.}   
118.}   
 

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

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

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

分享到:
评论
3 楼 宁极而待 2014-09-16  
总结说反了吧,declare的意思是声明,所以带declared的方法才是获得类中定义的相关属性和方法。
2 楼 mxdxm 2014-07-17  
谢谢,你说的很对。
1 楼 dyy_gusi 2014-06-20  
兄弟,好像总结的有问题吧。

getFields()获得某个类的所有的公共(public)的字段,包括父类。

getDeclaredFields()获得某个类的所有申明的字段,即包括public、private和proteced,
但是不包括父类的申明字段。

相关推荐

    Java反射机制

    - 类属性(Field):可以通过getFields或getDeclaredFields来获取类中定义的所有属性。 - 类的访问权限:可以判断类、方法或属性的访问权限,如public、protected、private等。 在实际开发中,使用反射机制可以减少...

    面试官:Class类中各个方法有什么区别?

    与`getFields()`不同,`getDeclaredFields()`方法返回类声明的所有字段,无论其访问权限如何。这包括`public`、`protected`、默认(包访问)和`private`字段,但不包括从超类继承的字段。如果你想获取类自身声明的...

    java7hashmap源码-AnnotationDemo:注解基础知识,编译时注解和运行时注解例子

    关于获取类的字段有两种方式:getFields()和getDeclaredFields()。 getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。 getDeclaredFields():获得某个类的所有声明的字段,即包括public、...

    《java基础入门》第三版 第九章作业.doc

    但是,getFields() 方法不能获取私有属性,需要使用 getDeclaredFields() 方法来获取所有属性,包括私有属性。 4. 获取一个类的字节码文件对象 可以使用对象名.class 或类名.getClass() 方法来获取一个类的字节码...

    张利国_Java高端培训系列视频__Java开发专题_反射.rar

    - **getFields()与getDeclaredFields()**:用于获取公共字段和所有字段,包括私有字段。 3. **应用场景**: - **动态代理**:反射可以创建动态代理类,实现接口并在运行时决定代理对象的行为。 - **插件系统**:...

    java反射机制

    `getFields()`方法返回类的所有公共字段,而`getDeclaredFields()`则会返回类中声明的所有字段,包括私有字段。 - 示例中的代码展示了如何获取类`A`的属性信息。`getFields()`只获取公有属性,`getDeclaredFields()...

    反射拷贝属性

    接着,我们通过`getFields()`或`getDeclaredFields()`获取类的所有字段。`getFields()`返回的是public字段,而`getDeclaredFields()`则包含所有字段,包括private和protected的。 在获取字段后,我们遍历这些字段,...

    java反射,获取所有属性、方法以及List集合类

    我们可以通过`Class.forName()`或`MyClass.class`来获取类的Class对象,然后使用`getFields()`方法获取所有的公有字段,如果需要获取私有字段,可以使用`getDeclaredFields()`。这些方法返回的是`Field`对象的数组,...

    通过java反射实现map与bean之间互转

    2. **获取属性信息**:通过`Class`对象的`getDeclaredFields()`或`getFields()`方法获取类的所有字段。 3. **设置Bean的属性值**:对于Map到Bean的转换,遍历Map,使用反射调用Bean的setter方法来设置每个属性的值...

    013-JAVA基础漏洞是如何自我修炼.pdf

    4. 获取字段:类似地,getFields方法和getDeclaredFields方法分别用于获取类的所有公开字段和所有字段,包括私有字段。 5. 获取方法:获取公开方法可以用getMethods方法,获取所有方法则使用getDeclaredMethods方法...

    java基础加强笔记及运行截图-陈蓉琪1

    在获取Class对象后,我们可以使用getFields()、getDeclaredFields()、getConstructors()、getDeclaredConstructors()、getMethods()、getDeclaredMethods()等方法来获取字段、构造方法、成员方法等信息。 此外,...

    Java反射机制2

    通过Class对象的getFields()或getDeclaredFields()方法获取Field对象,然后使用set()和get()方法对变量进行赋值和读取。注意,对于私有变量,需要先调用setAccessible(true)来取消访问检查。 5. 数组的反射应用: ...

    ReflectTest

    在Java中,我们可以使用`Class`类的`getDeclaredFields()`或`getFields()`方法来获取类的所有字段,包括私有、公共以及其他访问修饰符的字段。`getDeclaredFields()`会返回包括父类中声明的所有字段,而`getFields()...

    JAVA反射机制详解

    可以通过`Class`类的`getDeclaredFields()`或`getFields()`方法获取类的所有属性。 - `getDeclaredFields()`:返回该类及该类自身定义的所有属性。 - `getFields()`:返回该类及其父类中声明为public的属性。 ####...

    reflection反射

    `Class`对象提供了`getFields()`、`getField(String name)`、`getDeclaredFields()`和`getDeclaredField(String name)`等方法来获取类的字段信息。`getFields()`返回所有公共字段,`getField(String name)`获取指定...

    《剑指offer》Java基础-反射篇.pdf

    • 获取类中的变量(Field)可以使用 `getFields()` 或 `getDeclaredFields()`,方法(Method)使用 `getMethods()` 和 `getDeclaredMethods()`,构造器(Constructor)使用 `getConstructors()` 和 `...

    反射:学生管理.zip_attachede1p_反射 XML io

    4. Field对象:代表类的字段,通过Class的getFields()和getDeclaredFields()获取。可以使用Field对象来读写字段的值,包括私有字段。 递归是计算机科学中的一个重要概念,它是指在函数或方法中调用自身的行为。在...

    java反射机制知识点

    通过Class对象的getFields()或getDeclaredFields()方法可以获取到Field对象,然后可以使用set()和get()方法来动态地访问和修改对象的属性值。这在处理未知类型的对象时特别有用,例如序列化和反序列化,或者在不破坏...

    反射学习笔记含代码

    1. **获取字段**:使用`getFields`获取所有公共字段,使用`getDeclaredFields`获取所有字段(包括私有)。 - 示例:`Field[] fields = c.getDeclaredFields();` 2. **访问字段值**:使用`get`方法获取字段的值。 ...

Global site tag (gtag.js) - Google Analytics