mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-16 18:10:13 +08:00
Merge branch 'master' of https://github.com/Snailclimb/JavaGuide
This commit is contained in:
commit
810243f43a
@ -301,7 +301,7 @@ new运算符,new创建对象实例(对象实例在堆内存中),对象
|
|||||||
|
|
||||||
**equals()** : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
|
**equals()** : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
|
||||||
- 情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
|
- 情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
|
||||||
- 情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。
|
- 情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。
|
||||||
|
|
||||||
|
|
||||||
**举个例子:**
|
**举个例子:**
|
||||||
|
@ -1,3 +1,19 @@
|
|||||||
|
<!-- TOC -->
|
||||||
|
|
||||||
|
- [回顾一下类加载过程](#回顾一下类加载过程)
|
||||||
|
- [类加载器总结](#类加载器总结)
|
||||||
|
- [双亲委派模型](#双亲委派模型)
|
||||||
|
- [双亲委派模型介绍](#双亲委派模型介绍)
|
||||||
|
- [双亲委派模型实现源码分析](#双亲委派模型实现源码分析)
|
||||||
|
- [双亲委派模型的好处](#双亲委派模型的好处)
|
||||||
|
- [如果我们不想要双亲委派模型怎么办?](#如果我们不想要双亲委派模型怎么办)
|
||||||
|
- [自定义类加载器](#自定义类加载器)
|
||||||
|
- [推荐](#推荐)
|
||||||
|
|
||||||
|
<!-- /TOC -->
|
||||||
|
|
||||||
|
> 公众号JavaGuide 后台回复关键字“1”,免费获取JavaGuide配套的Java工程师必备学习资源(文末有公众号二维码)。
|
||||||
|
|
||||||
## 回顾一下类加载过程
|
## 回顾一下类加载过程
|
||||||
|
|
||||||
类加载过程:**加载->连接->初始化**。连接过程又可分为三步:**验证->准备->解析**。
|
类加载过程:**加载->连接->初始化**。连接过程又可分为三步:**验证->准备->解析**。
|
||||||
@ -12,7 +28,7 @@
|
|||||||
|
|
||||||
JVM 中内置了三个重要的 ClassLoader,除了 BootstrapClassLoader 其他类加载器均由 Java 实现且全部继承自`java.lang.ClassLoader`:
|
JVM 中内置了三个重要的 ClassLoader,除了 BootstrapClassLoader 其他类加载器均由 Java 实现且全部继承自`java.lang.ClassLoader`:
|
||||||
|
|
||||||
1. **BootstrapClassLoader(启动类加载器)** :最顶层的加载类,由C++实现,负责加载 `%JAVA_HOME%/li`目录下的jar包和类或者或被 `-Xbootclasspath`参数指定的路径中的所有类。
|
1. **BootstrapClassLoader(启动类加载器)** :最顶层的加载类,由C++实现,负责加载 `%JAVA_HOME%/lib`目录下的jar包和类或者或被 `-Xbootclasspath`参数指定的路径中的所有类。
|
||||||
2. **ExtensionClassLoader(扩展类加载器)** :主要负责加载目录 `%JRE_HOME%/lib/ext` 目录下的jar包和类,或被 `java.ext.dirs` 系统变量所指定的路径下的jar包。
|
2. **ExtensionClassLoader(扩展类加载器)** :主要负责加载目录 `%JRE_HOME%/lib/ext` 目录下的jar包和类,或被 `java.ext.dirs` 系统变量所指定的路径下的jar包。
|
||||||
3. **AppClassLoader(应用程序类加载器)** :面向我们用户的加载器,负责加载当前应用classpath下的所有jar包和类。
|
3. **AppClassLoader(应用程序类加载器)** :面向我们用户的加载器,负责加载当前应用classpath下的所有jar包和类。
|
||||||
|
|
||||||
@ -112,3 +128,13 @@ protected Class<?> loadClass(String name, boolean resolve)
|
|||||||
- <https://juejin.im/post/5c04892351882516e70dcc9b>
|
- <https://juejin.im/post/5c04892351882516e70dcc9b>
|
||||||
- <http://gityuan.com/2016/01/24/java-classloader/>
|
- <http://gityuan.com/2016/01/24/java-classloader/>
|
||||||
|
|
||||||
|
### 公众号
|
||||||
|
|
||||||
|
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
|
||||||
|
|
||||||
|
**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取!
|
||||||
|
|
||||||
|
**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
@ -1,15 +1,24 @@
|
|||||||
|
<!-- TOC -->
|
||||||
|
|
||||||
|
- [类加载过程](#类加载过程)
|
||||||
|
- [加载](#加载)
|
||||||
|
- [验证](#验证)
|
||||||
|
- [准备](#准备)
|
||||||
|
- [解析](#解析)
|
||||||
|
- [初始化](#初始化)
|
||||||
|
|
||||||
|
<!-- /TOC -->
|
||||||
|
|
||||||
|
> 公众号JavaGuide 后台回复关键字“1”,免费获取JavaGuide配套的Java工程师必备学习资源(文末有公众号二维码)。
|
||||||
|
|
||||||
# 类加载过程
|
# 类加载过程
|
||||||
|
|
||||||
Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢?
|
Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢?
|
||||||
|
|
||||||
系统加载 Class 类型的文件主要三步:**加载->连接->初始化**。连接过程又可分为三步:**验证->准备->解析**。
|
系统加载 Class 类型的文件主要三步:**加载->连接->初始化**。连接过程又可分为三步:**验证->准备->解析**。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 加载
|
## 加载
|
||||||
|
|
||||||
类加载过程的第一步,主要完成下面3件事情:
|
类加载过程的第一步,主要完成下面3件事情:
|
||||||
@ -68,3 +77,13 @@ Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚
|
|||||||
- 《深入理解Java虚拟机》
|
- 《深入理解Java虚拟机》
|
||||||
- 《实战Java虚拟机》
|
- 《实战Java虚拟机》
|
||||||
- <https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html>
|
- <https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html>
|
||||||
|
|
||||||
|
### 公众号
|
||||||
|
|
||||||
|
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
|
||||||
|
|
||||||
|
**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取!
|
||||||
|
|
||||||
|
**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。
|
||||||
|
|
||||||
|

|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
<!-- TOC -->
|
||||||
|
|
||||||
|
- [类文件结构](#类文件结构)
|
||||||
|
- [一 概述](#一-概述)
|
||||||
|
- [二 Class 文件结构总结](#二-class-文件结构总结)
|
||||||
|
- [2.1 魔数](#21-魔数)
|
||||||
|
- [2.2 Class 文件版本](#22-class-文件版本)
|
||||||
|
- [2.3 常量池](#23-常量池)
|
||||||
|
- [2.4 访问标志](#24-访问标志)
|
||||||
|
- [2.5 当前类索引,父类索引与接口索引集合](#25-当前类索引父类索引与接口索引集合)
|
||||||
|
- [2.6 字段表集合](#26-字段表集合)
|
||||||
|
- [2.7 方法表集合](#27-方法表集合)
|
||||||
|
- [2.8 属性表集合](#28-属性表集合)
|
||||||
|
- [参考](#参考)
|
||||||
|
|
||||||
|
<!-- /TOC -->
|
||||||
|
|
||||||
|
> 公众号JavaGuide 后台回复关键字“1”,免费获取JavaGuide配套的Java工程师必备学习资源(文末有公众号二维码)。
|
||||||
|
|
||||||
# 类文件结构
|
# 类文件结构
|
||||||
|
|
||||||
## 一 概述
|
## 一 概述
|
||||||
@ -157,7 +176,7 @@ public class Employee {
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 方法表集合
|
### 2.7 方法表集合
|
||||||
|
|
||||||
```java
|
```java
|
||||||
u2 methods_count;//Class 文件的方法的数量
|
u2 methods_count;//Class 文件的方法的数量
|
||||||
@ -178,7 +197,7 @@ Class 文件存储格式中对方法的描述与对字段的描述几乎采用
|
|||||||
|
|
||||||
注意:因为`volatile`修饰符和`transient`修饰符不可以修饰方法,所以方法表的访问标志中没有这两个对应的标志,但是增加了`synchronized`、`native`、`abstract`等关键字修饰方法,所以也就多了这些关键字对应的标志。
|
注意:因为`volatile`修饰符和`transient`修饰符不可以修饰方法,所以方法表的访问标志中没有这两个对应的标志,但是增加了`synchronized`、`native`、`abstract`等关键字修饰方法,所以也就多了这些关键字对应的标志。
|
||||||
|
|
||||||
### 属性表集合
|
### 2.8 属性表集合
|
||||||
|
|
||||||
```java
|
```java
|
||||||
u2 attributes_count;//此类的属性表中的属性数
|
u2 attributes_count;//此类的属性表中的属性数
|
||||||
@ -193,3 +212,13 @@ Class 文件存储格式中对方法的描述与对字段的描述几乎采用
|
|||||||
- <https://coolshell.cn/articles/9229.html>
|
- <https://coolshell.cn/articles/9229.html>
|
||||||
- <https://blog.csdn.net/luanlouis/article/details/39960815>
|
- <https://blog.csdn.net/luanlouis/article/details/39960815>
|
||||||
- 《实战 Java 虚拟机》
|
- 《实战 Java 虚拟机》
|
||||||
|
|
||||||
|
### 公众号
|
||||||
|
|
||||||
|
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
|
||||||
|
|
||||||
|
**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取!
|
||||||
|
|
||||||
|
**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。
|
||||||
|
|
||||||
|

|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
- [网易云课堂——58集精通java教程Spring框架开发](http://study.163.com/course/courseMain.htm?courseId=1004475015#/courseDetail?tab=1&35)
|
- [网易云课堂——58集精通java教程Spring框架开发](http://study.163.com/course/courseMain.htm?courseId=1004475015#/courseDetail?tab=1&35)
|
||||||
- [慕课网相关视频](https://www.imooc.com/)
|
- [慕课网相关视频](https://www.imooc.com/)
|
||||||
|
|
||||||
- **黑马视频和尚硅谷视频(非常推荐):** 微信公众号:“**JavaGui**”后台回复关键字 “**1**” 免费领取。
|
- **黑马视频和尚硅谷视频(非常推荐):** 微信公众号:“**JavaGuide**”后台回复关键字 “**1**” 免费领取。
|
||||||
|
|
||||||
|
|
||||||
## 面试必备知识点
|
## 面试必备知识点
|
||||||
|
Loading…
x
Reference in New Issue
Block a user