JAVA反射-(二)通过反射操作类

本文最后更新于:April 14, 2022 pm

积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。

目录

有一些在 《JAVA反射-(一)快速了解反射的一些作用 》 中已经写过,这里就不再重复写了。

类中包括四种权限修饰的属性和四种权限修饰的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
class Man{
public String Manname;
protected int Manage;
String Manjob;
private double Manmoney;

public void ManshowPub(){
System.out.println("Man public方法");
}
protected void ManshowPro(){
System.out.println("Man protected方法");
}
void ManshowDef(){
System.out.println("Man 默认权限方法");
}
private void ManshowPri(){
System.out.println("Man private方法");
}
}


@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
class User extends Man{
public String name;
protected int age;
String job;
private double money;

public void showPub(){
System.out.println("public方法");
}
protected void showPro(){
System.out.println("protected方法");
}
void showDef(){
System.out.println("默认权限方法");
}
private void showPri(){
System.out.println("private方法");
}

}

获取所有public修饰的属性

包括本类以及父类。

1
2
3
4
5
6
7
8
9
10
11
12
public class AnnoTest01 {
@SuppressWarnings("all")
public static void main(String[] args) throws Exception {
Class cs = Class.forName("com.annotationStu.User");

Field[] fields = cs.getFields();
for(Field it: fields){
System.out.println(it.getName());
}

}
}

获取本类所有属性

获取任何修饰符修饰的属性。而且只是本类中的。

1
2
3
4
5
6
7
8
9
10
11
12
public class AnnoTest01 {
@SuppressWarnings("all")
public static void main(String[] args) throws Exception {
Class cs = Class.forName("com.annotationStu.User");

Field[] declaredFields = cs.getDeclaredFields();
for(Field it: declaredFields){
System.out.println(it.getName());
}

}
}

获取所有public修饰的方法

包括本类以及父类。还包括了setter、getter等方法。

1
2
3
4
5
6
7
8
9
10
11
12
public class AnnoTest01 {
@SuppressWarnings("all")
public static void main(String[] args) throws Exception {
Class cs = Class.forName("com.annotationStu.User");

Method[] methods = cs.getMethods();
for(Method it: methods){
System.out.println(it.getName());
}

}
}

获取本类所有方法

获取任何修饰符修饰的方法。而且只是本类中的。

1
2
3
4
5
6
7
8
9
10
11
12
public class AnnoTest01 {
@SuppressWarnings("all")
public static void main(String[] args) throws Exception {
Class cs = Class.forName("com.annotationStu.User");

Method[] methods = cs.getDeclaredMethods();
for(Method it: methods){
System.out.println(it.getName());
}

}
}

获取所有public修饰的构造器

1
2
3
4
5
6
7
8
9
10
11
12
public class AnnoTest01 {
@SuppressWarnings("all")
public static void main(String[] args) throws Exception {
Class cs = Class.forName("com.annotationStu.User");

Constructor[] constructors = cs.getConstructors();
for(Constructor it: constructors){
System.out.println(it.getName());
}

}
}

获取本类所有构造器

1
2
3
4
5
6
7
8
9
10
11
12
public class AnnoTest01 {
@SuppressWarnings("all")
public static void main(String[] args) throws Exception {
Class cs = Class.forName("com.annotationStu.User");

Constructor[] constructors = cs.getDeclaredConstructors();
for(Constructor it: constructors){
System.out.println(it.getName());
}

}
}

获取父类Class

1
2
3
4
5
6
7
8
9
10
public class AnnoTest01 {
@SuppressWarnings("all")
public static void main(String[] args) throws Exception {
Class cs = Class.forName("com.annotationStu.User");

Class superclass = cs.getSuperclass();
System.out.println(superclass);

}
}