From 27c375c2018b2b4d5922886246a99d1b9557b59e Mon Sep 17 00:00:00 2001 From: SnailClimb Date: Wed, 15 May 2019 21:38:26 +0800 Subject: [PATCH 1/8] =?UTF-8?q?Update=20Java=E5=9F=BA=E7=A1=80=E7=9F=A5?= =?UTF-8?q?=E8=AF=86.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/Java基础知识.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/java/Java基础知识.md b/docs/java/Java基础知识.md index ff51fbc1..05287387 100644 --- a/docs/java/Java基础知识.md +++ b/docs/java/Java基础知识.md @@ -301,7 +301,7 @@ new运算符,new创建对象实例(对象实例在堆内存中),对象 **equals()** : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况: - 情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。 -- 情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。 +- 情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。 **举个例子:** From ceff2be43f9447b7adbfd1075d06081bd5643759 Mon Sep 17 00:00:00 2001 From: SnailClimb Date: Thu, 16 May 2019 15:08:25 +0800 Subject: [PATCH 2/8] =?UTF-8?q?Update=20Spring=E5=AD=A6=E4=B9=A0=E4=B8=8E?= =?UTF-8?q?=E9=9D=A2=E8=AF=95.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/system-design/framework/Spring学习与面试.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/system-design/framework/Spring学习与面试.md b/docs/system-design/framework/Spring学习与面试.md index 78ff084c..7f4db10c 100644 --- a/docs/system-design/framework/Spring学习与面试.md +++ b/docs/system-design/framework/Spring学习与面试.md @@ -21,7 +21,7 @@ - [网易云课堂——58集精通java教程Spring框架开发](http://study.163.com/course/courseMain.htm?courseId=1004475015#/courseDetail?tab=1&35) - [慕课网相关视频](https://www.imooc.com/) -- **黑马视频和尚硅谷视频(非常推荐):** 微信公众号:“**JavaGui**”后台回复关键字 “**1**” 免费领取。 +- **黑马视频和尚硅谷视频(非常推荐):** 微信公众号:“**JavaGuide**”后台回复关键字 “**1**” 免费领取。 ## 面试必备知识点 From c47196fb8f59c1c5ca6da1b85245432aa9f675bd Mon Sep 17 00:00:00 2001 From: WangKai Date: Fri, 17 May 2019 11:35:00 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原文的 %JAVA_HOME%/li 应为 %JAVA_HOME%/lib --- docs/java/jvm/类加载器.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/java/jvm/类加载器.md b/docs/java/jvm/类加载器.md index a2828e1a..f293d574 100644 --- a/docs/java/jvm/类加载器.md +++ b/docs/java/jvm/类加载器.md @@ -10,7 +10,7 @@ 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包。 3. **AppClassLoader(应用程序类加载器)** :面向我们用户的加载器,负责加载当前应用classpath下的所有jar包和类。 From 2c4725d1f92642e341ecac8fa12db87a62166dd3 Mon Sep 17 00:00:00 2001 From: SnailClimb Date: Sat, 18 May 2019 09:17:48 +0800 Subject: [PATCH 4/8] Add directory --- docs/java/jvm/类文件结构.md | 35 +++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/docs/java/jvm/类文件结构.md b/docs/java/jvm/类文件结构.md index 728576c1..f8dda3a2 100644 --- a/docs/java/jvm/类文件结构.md +++ b/docs/java/jvm/类文件结构.md @@ -1,3 +1,22 @@ + + +- [类文件结构](#类文件结构) + - [一 概述](#一-概述) + - [二 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-属性表集合) + - [参考](#参考) + + + +> 公众号JavaGuide 后台回复关键字“1”,免费获取Java工程师必备学习资源。 + # 类文件结构 ## 一 概述 @@ -157,7 +176,7 @@ public class Employee { ![](http://pqrlmrv7w.bkt.clouddn.com/img/2019-4/字段的 access_flags 的取值.png) -### 方法表集合 +### 2.7 方法表集合 ```java u2 methods_count;//Class 文件的方法的数量 @@ -178,7 +197,7 @@ Class 文件存储格式中对方法的描述与对字段的描述几乎采用 注意:因为`volatile`修饰符和`transient`修饰符不可以修饰方法,所以方法表的访问标志中没有这两个对应的标志,但是增加了`synchronized`、`native`、`abstract`等关键字修饰方法,所以也就多了这些关键字对应的标志。 -### 属性表集合 +### 2.8 属性表集合 ```java u2 attributes_count;//此类的属性表中的属性数 @@ -192,4 +211,14 @@ Class 文件存储格式中对方法的描述与对字段的描述几乎采用 - - - -- 《实战 Java 虚拟机》 \ No newline at end of file +- 《实战 Java 虚拟机》 + +### 公众号 + +如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。 + +**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取! + +**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。 + +![我的公众号](https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334) From e32ab4783a7e72a83de50cfe4994dc6f38f68487 Mon Sep 17 00:00:00 2001 From: SnailClimb Date: Sat, 18 May 2019 21:28:00 +0800 Subject: [PATCH 5/8] Add directory --- docs/java/jvm/类加载过程.md | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/docs/java/jvm/类加载过程.md b/docs/java/jvm/类加载过程.md index bf415396..bbe86e7d 100644 --- a/docs/java/jvm/类加载过程.md +++ b/docs/java/jvm/类加载过程.md @@ -1,15 +1,24 @@ + + +- [类加载过程](#类加载过程) + - [加载](#加载) + - [验证](#验证) + - [准备](#准备) + - [解析](#解析) + - [初始化](#初始化) + + + +> 公众号JavaGuide 后台回复关键字“1”,免费获取JavaGuide配套的Java工程师必备学习资源(文末有公众号二维码)。 + # 类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢? 系统加载 Class 类型的文件主要三步:**加载->连接->初始化**。连接过程又可分为三步:**验证->准备->解析**。 - - ![类加载过程](http://pqrlmrv7w.bkt.clouddn.com/img/2019-4/类加载过程.png) - - ## 加载 类加载过程的第一步,主要完成下面3件事情: @@ -67,4 +76,14 @@ Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚 - 《深入理解Java虚拟机》 - 《实战Java虚拟机》 -- \ No newline at end of file +- + +### 公众号 + +如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。 + +**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取! + +**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。 + +![我的公众号](https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334) From 32d7809f187433974445381f324667149511c4db Mon Sep 17 00:00:00 2001 From: SnailClimb Date: Sat, 18 May 2019 21:30:28 +0800 Subject: [PATCH 6/8] Add directory --- docs/java/jvm/类加载器.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/java/jvm/类加载器.md b/docs/java/jvm/类加载器.md index f293d574..7dbaa108 100644 --- a/docs/java/jvm/类加载器.md +++ b/docs/java/jvm/类加载器.md @@ -1,3 +1,19 @@ + + +- [回顾一下类加载过程](#回顾一下类加载过程) +- [类加载器总结](#类加载器总结) +- [双亲委派模型](#双亲委派模型) + - [双亲委派模型介绍](#双亲委派模型介绍) + - [双亲委派模型实现源码分析](#双亲委派模型实现源码分析) + - [双亲委派模型的好处](#双亲委派模型的好处) + - [如果我们不想要双亲委派模型怎么办?](#如果我们不想要双亲委派模型怎么办) +- [自定义类加载器](#自定义类加载器) +- [推荐](#推荐) + + + +> 公众号JavaGuide 后台回复关键字“1”,免费获取JavaGuide配套的Java工程师必备学习资源(文末有公众号二维码)。 + ## 回顾一下类加载过程 类加载过程:**加载->连接->初始化**。连接过程又可分为三步:**验证->准备->解析**。 @@ -110,3 +126,13 @@ protected Class loadClass(String name, boolean resolve) - - +### 公众号 + +如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。 + +**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取! + +**Java工程师必备学习资源:** 一些Java工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。 + +![我的公众号](https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334) + From 4fcb2988bbcce530fba669e11c151f773593a606 Mon Sep 17 00:00:00 2001 From: SnailClimb Date: Sat, 18 May 2019 21:30:36 +0800 Subject: [PATCH 7/8] =?UTF-8?q?Update=20=E7=B1=BB=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=BB=93=E6=9E=84.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/jvm/类文件结构.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/java/jvm/类文件结构.md b/docs/java/jvm/类文件结构.md index f8dda3a2..ecd322e4 100644 --- a/docs/java/jvm/类文件结构.md +++ b/docs/java/jvm/类文件结构.md @@ -15,7 +15,7 @@ -> 公众号JavaGuide 后台回复关键字“1”,免费获取Java工程师必备学习资源。 +> 公众号JavaGuide 后台回复关键字“1”,免费获取JavaGuide配套的Java工程师必备学习资源(文末有公众号二维码)。 # 类文件结构 From 72996ae5f1bd5399705f259b64eaaa6b7c185518 Mon Sep 17 00:00:00 2001 From: SnailClimb Date: Sun, 19 May 2019 11:03:46 +0800 Subject: [PATCH 8/8] =?UTF-8?q?Update=20=E7=B1=BB=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=99=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/jvm/类加载器.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/java/jvm/类加载器.md b/docs/java/jvm/类加载器.md index 7dbaa108..06273f11 100644 --- a/docs/java/jvm/类加载器.md +++ b/docs/java/jvm/类加载器.md @@ -112,7 +112,7 @@ protected Class loadClass(String name, boolean resolve) 双亲委派模型保证了Java程序的稳定运行,可以避免类的重复加载(JVM 区分不同类的方式不仅仅根据类名,相同的类文件被不同的类加载器加载产生的是两个不同的类),也保证了 Java 的核心 API 不被篡改。如果不用没有使用双亲委派模型,而是每个类加载器加载自己的话就会出现一些问题,比如我们编写一个称为 `java.lang.Object` 类的话,那么程序运行的时候,系统就会出现多个不同的 `Object` 类。 -### 如果我们不想要双亲委派模型怎么办? +### 如果我们不想用双亲委派模型怎么办? 为了避免双亲委托机制,我们可以自己定义一个类加载器,然后重载 `loadClass()` 即可。 @@ -120,7 +120,7 @@ protected Class loadClass(String name, boolean resolve) 除了 `BootstrapClassLoader` 其他类加载器均由 Java 实现且全部继承自`java.lang.ClassLoader`。如果我们要自定义自己的类加载器,很明显需要继承 `ClassLoader`。 -## 推荐 +## 推荐阅读 - -