Skip to content

Commit 93d5c1f

Browse files
committed
🔖 反射示例
1 parent 81690aa commit 93d5c1f

1 file changed

Lines changed: 105 additions & 0 deletions

File tree

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package io.github.dunwu.javase.reflect;
2+
3+
import java.lang.reflect.Field;
4+
import java.util.HashSet;
5+
import java.util.Set;
6+
import org.junit.Test;
7+
8+
/**
9+
* @author Zhang Peng
10+
* @date 2018/6/5
11+
*/
12+
public class ReflectClassTest {
13+
enum E {A, B}
14+
15+
/**
16+
* getClass() 示例
17+
*/
18+
@Test
19+
public void demo1() {
20+
Class c = "foo".getClass();
21+
System.out.println(c.getCanonicalName());
22+
23+
Class c2 = ReflectClassTest.E.A.getClass();
24+
System.out.println(c2.getCanonicalName());
25+
26+
byte[] bytes = new byte[1024];
27+
Class c3 = bytes.getClass();
28+
System.out.println(c3.getCanonicalName());
29+
30+
Set<String> set = new HashSet<>();
31+
Class c4 = set.getClass();
32+
System.out.println(c4.getCanonicalName());
33+
}
34+
35+
/**
36+
* .class 示例
37+
*/
38+
@Test
39+
public void demo2() {
40+
boolean b;
41+
// Class c = b.getClass(); // 编译错误
42+
Class c1 = boolean.class;
43+
System.out.println(c1.getCanonicalName());
44+
45+
Class c2 = java.io.PrintStream.class;
46+
System.out.println(c2.getCanonicalName());
47+
48+
Class c3 = int[][][].class;
49+
System.out.println(c3.getCanonicalName());
50+
}
51+
52+
/**
53+
* forName() 示例
54+
*/
55+
@Test
56+
public void demo3() {
57+
try {
58+
Class c1 = Class.forName("io.github.dunwu.javase.reflect.ReflectClassTest");
59+
System.out.println(c1.getCanonicalName());
60+
61+
Class c2 = Class.forName("[D");
62+
System.out.println(c2.getCanonicalName());
63+
64+
Class c3 = Class.forName("[[Ljava.lang.String;");
65+
System.out.println(c3.getCanonicalName());
66+
} catch (ClassNotFoundException e) {
67+
e.printStackTrace();
68+
}
69+
}
70+
71+
/**
72+
* .TYPE 示例
73+
*/
74+
@Test
75+
public void demo4() {
76+
Class c1 = Double.TYPE;
77+
System.out.println(c1.getCanonicalName());
78+
79+
Class c2 = Void.TYPE;
80+
System.out.println(c2.getCanonicalName());
81+
}
82+
83+
@Test
84+
public void demo5() throws NoSuchFieldException {
85+
Class c1 = javax.swing.JButton.class.getSuperclass();
86+
System.out.println(c1.getCanonicalName());
87+
88+
Class<?>[] classes = Character.class.getClasses();
89+
for (Class c : classes) {
90+
System.out.println(c.getCanonicalName());
91+
}
92+
93+
Class<?>[] classes2 = Character.class.getDeclaredClasses();
94+
for (Class c : classes2) {
95+
System.out.println(c.getCanonicalName());
96+
}
97+
98+
Field f = System.class.getField("out");
99+
Class c2 = f.getDeclaringClass();
100+
System.out.println(c2.getCanonicalName());
101+
102+
Class c3 = Thread.State.class.getEnclosingClass();
103+
System.out.println(c3.getCanonicalName());
104+
}
105+
}

0 commit comments

Comments
 (0)