没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Java 反射机制详解
Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态
调用对象的方法的功能称为 Java 语言的反射机制。
1、关于 Class
1、Class 是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的
Method,描述字段的 Filed,描述构造器的 Constructor 等属性
2、对象照镜子后(反射)可以得到的信息:某个类的数据成员名、方法和构造器、某
个类到底实现了哪些接口。
3、对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。
一个 Class 对象包含了特定某个类的有关信息。
4、Class 对象只能由系统建立对象
5、一个类在 JVM 中只会有一个 Class 实例
[java]view plaincopy
1. packagecom.java.reflection;
2.
3. publicclassPerson{
4. Stringname;
5. privateintage;
6.
7. publicPerson(){
8. System.out.println("无参构造器");
9. }
10.
11. publicPerson(Stringname,intage){
12. System.out.println("有参构造器");
13. this.name=name;
14. this.age=age;
15. }
16.
17. publicStringgetName(){
18. returnname;
19. }
20.
21. publicvoidsetName(Stringname){
22. this.name=name;
23. }
24.
25. publicintgetAge(){
26. returnage;
27. }
28.
29. publicvoidsetAge(intage){
30. this.age=age;
31. }
32.
33. @Override
34. publicStringtoString(){
35. return"Person{"+
36. "name='"+name+'\''+
37. ",age="+age+
38. '}';
39. }
40. }
2、反射机制获取类有三种方法
[java]view plaincopy
1. /**
2. *反射机制获取类有三种方法
3. */
4. @Test
5. publicvoidtestGetClass()throwsClassNotFoundException{
6. Classclazz=null;
7.
8. //1直接通过类名.Class 的方式得到
9. clazz=Person.class;
10. System.out.println("通过类名:"+clazz);
11.
12. //2通过对象的 getClass()方法获取,这个使用的少(一般是传的是 Object,不知道是什么
类型的时候才用)
13. Objectobj=newPerson();
14. clazz=obj.getClass();
15. System.out.println("通过 getClass():"+clazz);
16.
17. //3通过全类名获取,用的比较多,但可能抛出 ClassNotFoundException 异常
18. clazz=Class.forName("com.java.reflection.Person");
19. System.out.println("通过全类名获取:"+clazz);
20. }
通过类名: class com.java.reecon.Person
无参构造器
通过 getClass(): class com.java.reecon.Person
通过全类名获取: class com.java.reecon.Person
3、利用 newInstance 创建对象:调用的类必须有无参的构造器
[java]view plaincopy
1. /**
2. *Class 类的 newInstance()方法,创建类的一个对象。
3. */
4. @Test
5. publicvoidtestNewInstance()
6. throwsClassNotFoundException,IllegalAccessException,Instantiat
ionException{
7.
8. Classclazz=Class.forName("com.java.reflection.Person");
9.
10. //使用 Class 类的 newInstance()方法创建类的一个对象
11. //实际调用的类的那个 无参数的构造器(这就是为什么写的类的时候,要写一个无参数的构造
器,就是给反射用的)
12. //一般的,一个类若声明了带参数的构造器,也要声明一个无参数的构造器
13. Objectobj=clazz.newInstance();
14. System.out.println(obj);
15. }
无参构造器
Person{name='null', age=0}
4、ClassLoader 类加载器
类加载器详解:http://blog.csdn.net/ochangwen/article/details/51473120
[java]view plaincopy
1. /**
2. *ClassLoader 类装载器
3. */
4. @Test
5. publicvoidtestClassLoader1()throwsClassNotFoundException,IOException
{
6. //1、获取一个系统的类加载器
剩余17页未读,继续阅读
资源评论
火苗战神
- 粉丝: 6
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功