forked from DreamCats/java-notes
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConstructorsDemo.java
More file actions
55 lines (46 loc) · 1.96 KB
/
Copy pathConstructorsDemo.java
File metadata and controls
55 lines (46 loc) · 1.96 KB
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
52
53
54
55
/**
* @program JavaBooks
* @description: ConstructorsDemo
* @author: mf
* @create: 2020/02/09 17:28
*/
package com.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/**
* 通过Class对象可以获取某个类中的:构造方法、成员变量、成员方法;并访问成员;
*
*/
public class ConstructorsDemo {
public static void main(String[] args) throws Exception {
// 1. 加载Class对象
Class clazz = Class.forName("com.reflect.Student");
// 2. 获取所有公有构造方法
System.out.println("**********************所有公有构造方法*********************************");
Constructor[] constructors = clazz.getConstructors();
for (Constructor constructor : constructors) {
System.out.println(constructor);
}
// 3.
System.out.println("************所有的构造方法(包括:私有、受保护、默认、公有)***************");
Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
for (Constructor declaredConstructor : declaredConstructors) {
System.out.println(declaredConstructor);
}
// 4.
System.out.println("*****************获取公有、无参的构造方法*******************************");
Constructor constructor = clazz.getConstructor();
System.out.println(constructor);
// 调用构造方法
Object object = constructor.newInstance();
System.out.println(object);
//
System.out.println("******************获取私有构造方法,并调用*******************************");
Constructor constructor1 = clazz.getDeclaredConstructor(char.class);
System.out.println(constructor1);
// 调用构造方法
constructor1.setAccessible(true); // 暴力访问
Object object2 = constructor1.newInstance('买');
System.out.println(object2);
}
}