getFields()とgetDeclaredFields()の違い

4507 ワード

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に関係なくクラス内のすべてのコンストラクション関数にアクセスできます.