Skip to content

Commit 640028e

Browse files
author
xiachaochao
committed
1
1 parent 2cde907 commit 640028e

4 files changed

Lines changed: 135 additions & 0 deletions

File tree

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com._520it.reflect;
2+
3+
import java.lang.reflect.Constructor;
4+
import java.lang.reflect.Method;
5+
6+
class User {
7+
public User()
8+
{
9+
System.out.println("无参构造器");
10+
}
11+
12+
public User(String name) {
13+
System.out.println("含有name的构造器");
14+
}
15+
16+
private User(String name, int age) {
17+
System.out.println("有参构造器"+name+age);
18+
}
19+
public void doWork(){
20+
System.out.println("doWork方法");
21+
}
22+
}
23+
24+
public class GetConstructorDemo {
25+
public static void main(String[] args) throws Exception {
26+
getOne();
27+
}
28+
29+
public static void getOne() throws Exception {
30+
Class<?> clazz=Person.class;//第一种方式
31+
//Class<?> clazz1=Class.forName("com._520it.reflect.User");//第二种方式
32+
//Class<?> clazz2=(new User().getClass());//第三种方式
33+
System.out.println(clazz);
34+
System.out.println("获取多个构造器");
35+
System.out.println("---------------------------------------------");
36+
Constructor[] con=clazz.getDeclaredConstructors();//getDeclaredConstructors表示的类声明的所有构造方法。
37+
for(Constructor c1:con){
38+
System.out.println(c1);
39+
}
40+
System.out.println("---------------------------------------------");
41+
con=clazz.getConstructors();//表示的类或接口声明的所有方法
42+
for(Constructor c2:con){
43+
System.out.println(c2);
44+
}
45+
46+
System.out.println("---------------------------------------------");
47+
System.out.println("获取单个构造器");
48+
Constructor c3=clazz.getConstructor();
49+
Method method=clazz.getMethod("doWork");
50+
System.out.println(c3.newInstance());
51+
52+
System.out.println(c3);
53+
System.out.println("---------------------------------------------");
54+
c3=clazz.getConstructor(String.class);
55+
System.out.println(c3.newInstance("李华"));
56+
System.out.println(c3);
57+
System.out.println("---------------------------------------------");
58+
c3=clazz.getDeclaredConstructor(String.class,int.class);
59+
c3.setAccessible(true);//使用私有化修饰,通过反射必须先设定可见
60+
System.out.println(c3.newInstance("lihua",36));
61+
System.out.println(c3);
62+
System.out.println("---------------------------------------------");
63+
64+
65+
}
66+
}

JavaBase/reflect/RefectDemo01.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com._520it.reflect;
2+
3+
class Person {
4+
public Person() {
5+
System.out.println("无参构造器");
6+
}
7+
8+
public Person(String name) {
9+
System.out.println("含有name的构造器");
10+
}
11+
12+
private Person(String name, int age) {
13+
System.out.println("有参构造器" + name + age);
14+
}
15+
16+
public void doWork() {
17+
System.out.println("doWork方法");
18+
}
19+
}
20+
21+
public class RefectDemo01 {
22+
public static void main(String[] args) throws Exception {
23+
// 三种方式获取clazz对象
24+
//Class<?> c1 = Class.forName("com._520it.reflect.Person");
25+
//Class<?> c2=Person.class;
26+
Class<?> c3=(new Person().getClass());
27+
28+
}
29+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com._520it.reflect2;
2+
3+
import java.lang.reflect.Constructor;
4+
5+
/**
6+
* 通过反射获取构造器
7+
*
8+
* 需求:通过反射来获取某一个类的构造器:
9+
* 1 获取该类的字节码对象.
10+
* 2从该字节码对象中去找需要获取的构造器.
11+
*/
12+
public class GetConstructorDemo {
13+
14+
public static void main(String[] args) throws Exception {
15+
//三种方式获取clazz类
16+
Class clazz1=User.class;
17+
//Class clazz2=Class.forName("com._520it.reflect2.User");//这种方式需要抛出异常
18+
//Class clazz3=(new User().getClass());
19+
Constructor[] con=clazz1.getConstructors();//将所有的构造器方法放置在通过constructor数组中
20+
System.out.println("打印数组的长度:"+con.length);
21+
/*for(Constructor c1:con){
22+
Syste
23+
}
24+
*/ }
25+
26+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com._520it.reflect2;
2+
3+
public class User {
4+
//定义构造器
5+
public User() {
6+
7+
}
8+
public User(String name){
9+
10+
}
11+
public User(String name,int age){
12+
13+
}
14+
}

0 commit comments

Comments
 (0)