码迷,mamicode.com
首页 > 其他好文 > 详细

反射从入门到精通(一)

时间:2017-10-04 16:18:44      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:ges   ast   print   属性   col   输出   fas   复杂   log   

1. 三个类加载器

  • BootStrap类加载器【boot】
    • 用于加载 jre:lib下的jar包【.class文件】
    • Java提供的大多数类都在此
  • Exetension类加载器【ext】
    • 主要用于加载ext文件夹下的jar包【D:\Program Files\Java\jdk1.8.0_144\jre\lib\ext】
    • 继承于BootStrap
  • Application类加载器 【app】
    • 程序中应用的jar包
    • mysql,fastjson.....

2.如果要加载一个类:java.lang.String

String.java --> String.class -->加载 -->类加载器 -->【app】 -->【ext】 -->【boot】 -->【检查--ct.jar中存在String类】-->  拒接加载 -->【ext】 -->【app】 -->放弃

 

3.为什么加载流程这么复杂 【为了安全】

 

4. Car car = new Car();

  • 初始化static
  • 初始化属性
  • 构造方法
  • 创建了一个特殊的对象Class

 

5.Class对象

  • 类加载过程中创建
  • 每一个类有唯一的一个Class对象
  • 类型为:Class类型
  • 记录同一类的所有相关的对象的基本信息【属性、方法】

 

6.流程图:

技术分享

7.获取Class对象的两种方式

package com.xuzhiwen.reflect;

public class Test {
    public static void main(String[] args) throws Exception {
        Test test = new Test();
        Class clazz_a = test.getClass(); //方法一
        Class clazz_b = Test.class;     //方法二
    }
}

8. 获取三个类加载器

package com.xuzhiwen.reflect;

public class Test {
    public static void main(String[] args) throws Exception {
        Test test = new Test();
        Class clazz_a = test.getClass(); //方法一
        Class clazz_b = Test.class;     //方法二

        System.out.println(test.getClass().getClassLoader());
        System.out.println(test.getClass().getClassLoader().getParent());
        System.out.println(test.getClass().getClassLoader().getParent().getParent());
    }
}

输出结果如下:

技术分享

BootStrap加载器输出结果为null,是因为它是C语言写的。

 

反射从入门到精通(一)

标签:ges   ast   print   属性   col   输出   fas   复杂   log   

原文地址:http://www.cnblogs.com/beibidewomen/p/7625730.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!