类装载器ClassLoader

类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件。

类装载器把一个类装入JVM中,要经过三步:

1.装载:查找和导入Class文件;

2.链接:执行校验、准备和解析(解析是可以选择的);

3.初始化:对类的静态变量、静态代码块执行初始化工作;

类装载工作由ClassLoader及其子类负责。JVM在运行时会产生三个ClassLoader:根装载器、ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器)。

根装载器不是ClassLoader的子类,它使用C++编写,因此,我们在JAVA中看不到它,根装载器负责装载JRE的核心类库,如JRE目标下的rt.jar、charsets.jar等。

ExtClassLoader和AppClassLoader都是ClassLoader的子类。其中,ExtClassLoader负责装载JRE扩展目录ext中的类包,AppClassLoader负责装载Classpath路径下的类包。

这三个类装载器之间存在父子层级关系,即根装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoader的父装载器。

publicclass ClassLoaderTest {

publicstaticvoid main(String[] args) {

ClassLoader loader = Thread.currentThread().getContextClassLoader();

System.out.println("current loader---"+loader);

System.out.println("parent loader---"+loader.getParent());

System.out.println("grandparent loader---"+loader.getParent().getParent());

}

}

上面代码运行结果:

current  loader---sun.misc.Launcher$AppClassLoader@20cf2c80

parent  loader---sun.misc.Launcher$ExtClassLoader@1729854

grandparent loader---null

由于根加载器在java中访问不到,所以返回null。

每一个类在JVM中都拥有一个对应的java.lang.Class对象,它提供了类结构信息的描述。Class对象是在装载类时由JVM通过调用类装载器中的defineClass()方法自动构造的。

Java反射机制

Class反射对象描述类语义结构,可以从Class对象中获取构造函数、成员变量、方法等类元素的反射对象,并以编程的方式通过这些反射对象对目标类对象进行操作。这些反射对象类在java.lang.reflect包中。主要的反射类有Constructor、Method、Field、ClassLoader等。

publicclass PrivateCar {

private String color;

protectedvoid drive(){

System.out.println("Drive private car! The color is :"+color);

}

}

publicclass PrivateCarReflect {

publicstaticvoid main(String[] args) throws Throwable {

//通过类装载器获得PrivateCar类对象

ClassLoader loader = Thread.currentThread().getContextClassLoader();

Class clazz = loader.loadClass("com.quietboy.reflect.PrivateCar");

//得到实例

PrivateCar pcar =  (PrivateCar)clazz.newInstance();

//访问属性,并设置属性

Field color = clazz.getDeclaredField("color");

color.setAccessible(true);//取消Java语言访问检查,以访问private变量

color.set(pcar, "红色");

//访问方法,并调用方法

Method drive = clazz.getDeclaredMethod("drive", null);

drive.setAccessible(true);//取消Java语言访问检查,以访问protected方法

drive.invoke(pcar, null);

}

}

只要JVM的安全机制允许,反射机制可以绕过限制,访问私有变量、调用私有方法。

转载于:https://blog.51cto.com/quietboy/1429347

Java基础知识——类装载器与反射机制相关推荐

  1. java 反射类 spring_学习Spring必学的Java基础知识(1)----反射

    引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...

  2. 学习Spring必学的Java基础知识----反射

    引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...

  3. java基础知识之注解、反射(一)

    前言 此博客为供个人学习总结备用,如有错误请指正. 正文 Annotation(注解) java自带的注解包含以下三个: 1.@Override 注解表示重写父类的方法 2.@Deprecated 声 ...

  4. Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO

    Java基础知识第二讲(Java编程规范/JVM/集合框架/异常体系/Java反射/语法知识/Java IO/码出高效) 分享在java学习及工作中,常使用的一些基础知识,本文从JVM出发,讲解了JV ...

  5. 学习Spring必学的Java基础知识

    学习Spring必学的Java基础知识(1)----反射 引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Jav ...

  6. 【转】Java基础知识整理

    本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版下载链接:<Ja ...

  7. java 基础知识总结

    Java基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思 ...

  8. Java 基础知识总结(下)-王者笔记《收藏版》

    上一篇 Java基础知识学习总结之(上) 下一篇 Java 集合容器篇面试题  (上) java毕业设计项目<100套>推荐 毕设/私活/大佬必备,一个挣钱的开源前后端分离脚手架 2W字梳 ...

  9. 【转】java基础知识总结

    Java基础知识总结 本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版 ...

最新文章

  1. c# out ref
  2. python切片操作例题_Python之切片操作
  3. 带你搞明白什么是缓存穿透、缓存击穿、缓存雪崩
  4. java信用分秒杀系统设计思路,秒杀系统设计思路
  5. body onload 控制窗口大小 html,HTML5 对各个标签的定义与规定:body的介绍
  6. javafx中css选择器_JavaFX技巧12:在CSS中定义图标
  7. java web服务_将Java服务公开为Web服务
  8. VMware虚拟机的三种联网方法及原理
  9. 安卓系统分屏相关修改思路
  10. 小程序入门到精通(二):了解小程序开发4个重要文件
  11. 你百分之九十九的问题都是因为懒
  12. 微课|玩转Python轻松过二级(1.1节):Python命令式编程与函数式编程模式
  13. k8s核心技术-Service概述_Service的三种类型_ClusterIP只能内部访问_NodePort可以外网访问_LoadBalancer公有云---K8S_Google工作笔记0032
  14. 福建首个区块链赋能教育信息化项目上线
  15. table内容超出宽度时隐藏并显示省略标记
  16. R与Python或协同助力机器学习:听Azure ML Studio讲座有感
  17. 【Spring-tx】AutoProxyRegistrar类
  18. ESP8266 WIFI 模块连接OneNet测试
  19. 程序员的自我修养 -- 读书笔记
  20. 开机动画适配方案_修改开机动画教程

热门文章

  1. 打造无所不及的智能:徐直军发布华为AI战略及全栈全场景方案
  2. 语义分割领域开山之作:Google提出用神经网络搜索实现语义分割
  3. 泡沫破裂之后,强化学习路在何方?
  4. 芯片业又起波澜!博通189亿美元收购遭质疑,股价一度跌近19%
  5. 自动驾驶出租车可行性研究报告:2020年能成真吗?
  6. 7 年“键盘手”没在意!某程序员手疼查出骨肿瘤,已让骨头成了“豆腐渣”
  7. 世界上第一台电子计算机到底是谁发明的?
  8. 初级程序员常犯错误一览
  9. ​“好师父”如何破解大学生就业难题
  10. 写 5 个你知道的 HTML5 标签,说明他们的意义