类加载器

一次编译到处运行,如何实现?

java源码首先被编译成字节码,再由不同平台的jvm进行解析,jvm执行字节码文件时转换成具体平台上的机器码。

 

为什么不直接将源码解析成机器码去执行?

如果将源码直接解析成机器码每次编译都要进行语法,句法,语义的检查,执行完这些都不会被保留,再次执行需要重新编译,进行各种检查。

采用字节码可以脱离java的束缚,可以使用其他语言生成字节码在jvm中运行,增强兼容性。

 

java虚拟机

java虚拟机是抽象化的虚拟计算机,有完善的硬体架构和相应的指令系统,屏蔽了与具体平台的相关性。

 

 

 

反射

在java运行过程中可以获得和调用任何一个类和对象的属性或方法,这种动态获取信息和调用对象的机制称为反射机制。

 

类从编译到执行的过程

.java文件会被编译成.class文件,ClassLoader将字节码装载进jvm生成jClass<?>对象,jvm利用Class<?>对象生成实例化对象。

 

ClassLoader

ClassLoader是java中的核心组件,所有的.class文件都以二进制传输流形式通过ClassLoader加载进jvm虚拟机。

自定义classLoader

类加载双委派机制

为什么使用双亲委派

避免类重复加载

 

类的加载方式

 

类的加载过程

 

loadClass和forName的区别

 

posted @ 2019-10-24 17:41  vipzk  阅读(65)  评论(0)    收藏  举报