1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Merge pull request #383 from tianyu94/master

Fix typo
This commit is contained in:
SnailClimb 2019-07-11 21:59:29 +08:00 committed by GitHub
commit 07e7690b26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 3 additions and 3 deletions

View File

@ -65,7 +65,7 @@ The GrandParent of ClassLodarDemo's ClassLoader is null
`AppClassLoader`的父类加载器为`ExtClassLoader` `AppClassLoader`的父类加载器为`ExtClassLoader`
`ExtClassLoader`的父类加载器为null**null并不代表`ExtClassLoader`没有父类加载器,而是 `Bootstrap ClassLoader`** 。 `ExtClassLoader`的父类加载器为null**null并不代表`ExtClassLoader`没有父类加载器,而是 `Bootstrap ClassLoader`** 。
其实这个双亲翻译的容易让别人误解,我们一般理解的双亲都是父母,这里的双亲更多地表达的是“父母这一辈”的人而已,并不是说真的有一个 Mather ClassLoader 和一个 Father ClassLoader 。另外类加载器之间的“父子”关系也不是通过继承来体现的是由“优先级”来决定。官方API文档对这部分的描述如下: 其实这个双亲翻译的容易让别人误解,我们一般理解的双亲都是父母,这里的双亲更多地表达的是“父母这一辈”的人而已,并不是说真的有一个 Mother ClassLoader 和一个 Father ClassLoader 。另外类加载器之间的“父子”关系也不是通过继承来体现的是由“优先级”来决定。官方API文档对这部分的描述如下:
>The Java platform uses a delegation model for loading classes. **The basic idea is that every class loader has a "parent" class loader.** When loading a class, a class loader first "delegates" the search for the class to its parent class loader before attempting to find the class itself. >The Java platform uses a delegation model for loading classes. **The basic idea is that every class loader has a "parent" class loader.** When loading a class, a class loader first "delegates" the search for the class to its parent class loader before attempting to find the class itself.
@ -114,7 +114,7 @@ protected Class<?> loadClass(String name, boolean resolve)
### 双亲委派模型的好处 ### 双亲委派模型的好处
双亲委派模型保证了Java程序的稳定运行可以避免类的重复加载JVM 区分不同类的方式不仅仅根据类名,相同的类文件被不同的类加载器加载产生的是两个不同的类),也保证了 Java 的核心 API 不被篡改。如果不用没有使用双亲委派模型,而是每个类加载器加载自己的话就会出现一些问题,比如我们编写一个称为 `java.lang.Object` 类的话,那么程序运行的时候,系统就会出现多个不同的 `Object` 类。 双亲委派模型保证了Java程序的稳定运行可以避免类的重复加载JVM 区分不同类的方式不仅仅根据类名,相同的类文件被不同的类加载器加载产生的是两个不同的类),也保证了 Java 的核心 API 不被篡改。如果没有使用双亲委派模型,而是每个类加载器加载自己的话就会出现一些问题,比如我们编写一个称为 `java.lang.Object` 类的话,那么程序运行的时候,系统就会出现多个不同的 `Object` 类。
### 如果我们不想用双亲委派模型怎么办? ### 如果我们不想用双亲委派模型怎么办?

View File

@ -23,7 +23,7 @@
在 Java 中JVM 可以理解的代码就叫做`字节码`(即扩展名为 `.class` 的文件它不面向任何特定的处理器只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效而且由于字节码并不针对一种特定的机器因此Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。 在 Java 中JVM 可以理解的代码就叫做`字节码`(即扩展名为 `.class` 的文件它不面向任何特定的处理器只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效而且由于字节码并不针对一种特定的机器因此Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。
ClojureLisp 语言的一种方言、Groovy、Scala 等语言都是运行在 Java 虚拟机之上。下图展示了不同的语言被不同的编译器编异常`.class`文件最终运行在 Java 虚拟机之上。`.class`文件的二进制格式可以使用 [WinHex](https://www.x-ways.net/winhex/) 查看。 ClojureLisp 语言的一种方言、Groovy、Scala 等语言都是运行在 Java 虚拟机之上。下图展示了不同的语言被不同的编译器编译成`.class`文件最终运行在 Java 虚拟机之上。`.class`文件的二进制格式可以使用 [WinHex](https://www.x-ways.net/winhex/) 查看。
![Java虚拟机](https://user-gold-cdn.xitu.io/2018/5/3/16325b8e190fbabd?w=712&h=316&f=png&s=17643) ![Java虚拟机](https://user-gold-cdn.xitu.io/2018/5/3/16325b8e190fbabd?w=712&h=316&f=png&s=17643)