Java基础复习笔记系列 十三 反射机制
主题:Java反射机制
学习资料参考网址:
1.http://www.icoolxue.com
1、Java反射机制。
各种框架中都使用到了Java的反射机制。
两个类:java.lang.Class;java.lang.ClassLoader.
2、ClassLoader类。
ClassLoader并非加载一次,是动态加载。需要的时候才加载。static语句块只执行一次。ClassLoader负责把类load到内存。
当我们执行Java程序的时候,首先执行JVM,然后再把java class加载到JVM里运行,负责加载java class的这部分叫做class loader。JVM本身包含一个class loader,即bootstrap class loader。bootstrap class loader是用本地代码实现的,它负责加载核心的java class,另外JVM还提供两个由Java写的class loader,即extension class lodaer和application class loader。它们两个都由bootstrap class loader来加载。其中Extension class loader负责加载扩展的java class(如javax.*开头和JRE/ext目录下的类);application class loader负责加载应用程序自身的类。
3、JDK中常见的几个ClassLoader。(认识他们)
bootstrap class loader,最核心的class Loader。其他的class loader都是由bootstrap class loader来loader进来的。当在控制台往出打印的时候,显示null。它是用C++编写的,从jre/lib中加载类。
extension class loader。
application class loader。我们自己定义的类,是由application class loader来loader进来的。
URLclassloader。网上的一些类,由它来loader。它是SecureClassLoader的之类。
classLoader的层次关系(不是继承关系,是层次关系;没有继承关系):bootstrap --> extension -->application(在application class loader中有一个引用,指向了extension class loader).所以,application.getParent--->指向了extension class lodaer.
类加载的时候,追根溯源。找到最parent的class loader来加载。避免了病毒问题。”有什么事,先问他爸爸!”也就是说:一个class loader要加载一个类的时候,首先要查找其父加载器是否加载了,如果找不到,才由自己加载,这个过程一直往上递归处理。
4、程序运行中,class loader的运用。
当一个程序启动的时候,JVM也随着启动,运行bootstrap class loader。该类加载器负责加载Java核心API(Extclasslodaer和Appclassloader),然后调用Extclassloader加载扩展API,最后Appclassloader加载CLASSPATH目录下定义的class。这即是一个程序最基本的加载流程。
5、
Java基础复习笔记系列 十三 反射机制的更多相关文章
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- Java基础复习笔记系列 七 IO操作
Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- Java基础复习笔记系列 四 数组
Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...
- Java基础复习笔记系列 三
前几节都是基础中的基础,从第三讲的笔记开始,每次笔记针对Java的一个知识块儿. Java异常处理 1.什么是异常? 异常是指运行期出的错误.比如说:除以一个0:数组越界:读取的文件不存在. 异常处 ...
- Java基础复习笔记系列 二
1.Java中Static的相关用法总结?(静态方法:静态变量:静态代码块) public static void main(String args[])执行的关键,在于有static.有了stati ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
- Java基础学习笔记二十三 Java核心语法之反射
类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...
随机推荐
- 让自己成为合格的IT员
2016年10月27日,正式加入了IT天启网络公司,从今天开始就意味着我要正式进军IT行业了. 虽然是为期四个半月的培训,我相信我能够我一定可以在这四个半月的时间里成为一个合格的.优 ...
- iOS-Objective-C内存管理
内存管理: 栈区 [stack]:由编译器自动分配并释放,一般存放函数的参数值,局部变量等 堆区 [heap]:由程序员分配和释放,如果程序员不释放,程序结束时,可能会由操作系统回收 全局区(静态区) ...
- iOS-SDWebImage
我之前写过一篇博客,介绍缓存处理的三种方式,其中最难,最麻烦,最占内存资源的还是图片缓存,最近做的项目有大量的图片处理,还是采用了SDWebImage来处理,但是发现之前封装好的代码报错了.研究发现, ...
- Eclipse中java向数据库中添加数据,更新数据,删除数据
前面详细写过如何连接数据库的具体操作,下面介绍向数据库中添加数据. 注意事项:如果参考下面代码,需要 改包名,数据库名,数据库账号,密码,和数据表(数据表里面的信息) package com.ning ...
- Python为什么不隐式实现self
Python为什么不隐式实现self Python中类的方法都需要显式的传入一个self占位参数,这让写过C#,Java,PHP,Javascript的我很是不习惯,但是Python这么吊,肯定是有他 ...
- java基础-复制
package hanqi.test; import java.io.FileInputStream; import java.io.FileOutputStream; public class Te ...
- redis + 主从 + 持久化 + 分片 + 集群 + spring集成
Redis是一个基于内存的数据库,其不仅读写速度快,每秒可以执行大约110000的写操作,81000的读取操作,而且其支持存储字符串,哈希结构,链表,集合丰富的数据类型.所以得到很多开发者的青睐.加之 ...
- [Node.js] Node.js项目的持续集成
原文地址:http://www.moye.me/2016/03/03/nodejs_ci_by_jenkins 引子 持续集成 (Continuous Integration,简称CI)是一种软件工程 ...
- Oracle数据库常见的误操作恢复方法(上)
实验环境:Linux6.4 + Oracle 11g 面向读者:Oracle开发维护人员 概要: 1.误操作drop了emp表 2.误操作delete了emp表 3.误操作delete了emp表的部分 ...
- 12个新潮的 HTML5 & CSS3 网站设计欣赏
响应式设计和基于 HTML5 & CSS3 编码的网站是为网站制作的理想解决方案. HTML5 & CSS3 制作出来的网站结构良好,有很多惊人的效果,并能够在任何设备上浏览. 今天, ...