자바 총결산 편 시리즈:자바 반사
26486 단어 자바 반사
1 package com.corn; 2
3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 import java.lang.reflect.InvocationTargetException; 6 import java.lang.reflect.Method; 7
8 public class TestReflect { 9
10 public static void main(String[] args) { 11
12 // “ ” 1
13 Class<?> c0 = User.class; 14
15 // “ ” 2
16 User user1 = new User(); 17 Class<?> c1 = user1.getClass(); 18
19 User user2 = new User(); 20 Class<?> c2 = user2.getClass(); 21
22 System.out.println("user class instance 0:" + c0); //user class instance 0:class com.corn.User
23 System.out.println("user class instance 1:" + c1); //user class instance 1:class com.corn.User
24 System.out.println("user class instance 2:" + c2); //user class instance 2:class com.corn.User 25
26 //c0 == c1 :true, c1 == c2 :true
27 System.out.println("c0 == c1 :" + (c0 == c1) + ", c1 == c2 :" + (c1 == c2)); 28
29 try { 30 // “ ” 3
31 Class<?> c3 = Class.forName("com.corn.User"); 32 System.out.println("user class c3:" + c3); //user class c3:class com.corn.User
33
34 try { 35 User user3 = (User) c3.newInstance(); 36
37 //Constructor public com.corn.User(int,java.lang.String,int) 38 //Constructor public com.corn.User(int,java.lang.String) 39 //Constructor public com.corn.User()
40 Constructor<?>[] cons = c3.getConstructors(); 41 for (int i = 0; i < cons.length; i++) { 42 // public “ ”,
43 System.out.println("Constructor " + cons[i]); 44 } 45
46 try { 47 User user4 = (User) cons[1].newInstance(51, "corn"); 48 //user instance 4:user instance uid:51 name:corn
49 System.out.println("user instance 4:" + user4); 50
51 // “ ”
52 User user40; 53 user40 = (User) c3.getConstructor(int.class, String.class).newInstance(520, "corn0"); 54 //user instance 40:user instance uid:520 name:corn0
55 System.out.println("user instance 40:" + user40); 56
57 // “ ” “ ”
58 Class<?> father = c3.getSuperclass(); 59 //father class instance class com.corn.Person
60 System.out.println("father class instance " + father); 61
62 // ( )
63 Class<?>[] interfaceArray = c3.getInterfaces(); 64 //interface class instance 0 interface com.corn.Workable 65 //interface class instance 1 interface com.corn.Thinkable
66 for (int i = 0; i < interfaceArray.length; i++) { 67 // implements
68 System.out.println("interface class instance " + i + " " + interfaceArray[i]); 69 } 70
71 } catch (IllegalArgumentException e) { 72 e.printStackTrace(); 73 } catch (InvocationTargetException e) { 74 e.printStackTrace(); 75 } 76
77 } catch (InstantiationException e) { 78 e.printStackTrace(); 79 } catch (IllegalAccessException e) { 80 e.printStackTrace(); 81 } 82 } catch (ClassNotFoundException e) { 83 e.printStackTrace(); 84 } catch (Exception e) { 85 e.printStackTrace(); 86 } 87
88 // “ ” /
89 Field[] fieldArray = c0.getDeclaredFields(); 90 //filed 0 private int com.corn.User.uid 91 //filed 1 private java.lang.String com.corn.User.name 92 //filed 2 private int com.corn.User.age
93 for (int i = 0; i < fieldArray.length; i++) { 94 System.out.println("filed " + i + " " + fieldArray[i]); 95 } 96
97 User u = new User(12, "yumidi", 99); 98
99 try { 100 // private/
101 Field nameField = c0.getDeclaredField("name"); 102 // Java
103 nameField.setAccessible(true); 104 String nameValue = (String) nameField.get(u); 105 //name:yumidi
106 System.out.println("name:" + nameValue); 107
108 // private/
109 nameField.set(u, "corn"); 110 //new name:corn
111 System.out.println("new name:" + u.getName()); 112
113 } catch (NoSuchFieldException e) { 114 e.printStackTrace(); 115 } catch (SecurityException e) { 116 e.printStackTrace(); 117 } catch (Exception e) { 118 e.printStackTrace(); 119 } 120
121 //
122 try { 123 Method method = c0.getDeclaredMethod("getResult"); 124 // Java
125 method.setAccessible(true); 126 int result = (int) method.invoke(u); 127 //result:1000
128 System.out.println("result:" + result); 129
130 } catch (NoSuchMethodException e) { 131 e.printStackTrace(); 132 } catch (SecurityException e) { 133 e.printStackTrace(); 134 } catch (Exception e) { 135 e.printStackTrace(); 136 } 137
138 } 139 } 140
141 class User extends Person implements Workable, Thinkable { 142
143 private int uid; 144 private String name; 145 private int age; 146
147 public User() { 148
149 } 150
151 private User(int uid) { 152 this.uid = uid; 153 } 154
155 protected User(String name) { 156 this.name = name; 157 } 158
159 public User(int uid, String name) { 160 this.uid = uid; 161 this.name = name; 162 } 163
164 public User(int uid, String name, int age) { 165 this.uid = uid; 166 this.name = name; 167 this.age = age; 168 } 169
170 public int getUid() { 171 return uid; 172 } 173
174 public void setUid(int uid) { 175 this.uid = uid; 176 } 177
178 public String getName() { 179 return name; 180 } 181
182 public void setName(String name) { 183 this.name = name; 184 } 185
186 public int getAge() { 187 return age; 188 } 189
190 public void setAge(int age) { 191 this.age = age; 192 } 193
194 private int getResult() { 195 return 1000; 196 } 197
198 @Override 199 public String toString() { 200 return "user instance uid:" + this.uid + " name:" + this.name; 201 } 202
203 } 204
205 class Person { 206
207 } 208
209 interface Workable { 210
211 } 212
213 interface Thinkable { 214
215 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 리 플 렉 션 관련 및 예시자바 리 플 렉 션 과 관련 된 것 은 네 개의 final 유형의 클래스 클래스 클래스, Method, Field, Constructor 이다.자바 의 모든 종류의 부모 클래스 Object 입 니 다.그 중에서 Cl...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.