[docs update]java基础部分图片上传到图床
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 25 KiB |
1
docs/java/basis/images/java-code-to-machine-code.drawio
Normal file
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 125 KiB |
@ -1 +1 @@
|
||||
<mxfile host="Electron" modified="2022-01-30T07:12:58.695Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="e6cfDzwHOZ-OtEea5Rce" version="13.4.5" type="device"><diagram id="mPrK13Eo7WhzfbSKrwnZ" name="Page-1">7Vtdd6M2EP01PGaPkQDjR3+m6Uma9Djbdh9lEIZGRq6QY7u/vhIWNiDsOE0M3l2OH4xGQkJzZ0Z3JDDgcLG5ZWgZPlAfEwN0/I0BRwYAZte2xZ+UbJWkA82dZM4iX8kOgmn0L84aKukq8nFSaMgpJTxaFoUejWPs8YIMMUbXxWYBJcVRl2iONcHUQ0SX/hn5PNxJXdA9yH/B0TzMRjad3q5mgbLGaiZJiHy6zong2IBDRinfXS02Q0yk9jK97O6bHKndPxjDMT/nhmA0jm55TBZxH94/P8EpHPdvLPVsfJtNGPti/qpIGQ/pnMaIjA/SAaOr2Mey144oHdrcU7oUQlMI/8acbxWYaMWpEIV8QVSteGC2/Uve/8XOit9Ud2lhtCmUtqoU0JirTk1XlPcalZXJC+ZeqEbYzUpO5aiylCihK+bhExrKjA6xOeYn2oE9pMIZMF1g8eTiPoYJ4tFr8TmQMsr5vp26tc8Y2uYaLGkU8yTX85MUiAbKwaCjjEu5FyzbQKm9e7K5uNg9QFbKzeQgSs3qHSZmN2FiZVP5vyZ3VSYGvwcTc8wGbExN+hWRlVLDcyhiP5oJaypb38G2JIzrMOJ4ukQpQGuxiJ22oyAiZEgJZWlf0EfYDTxpGpzRF5yrcTwXz4IzLOgVM443p21IxzwDp1NUNrBUeX1Yq8xsAQpz61QGapWZ5KB6PxIAXIO71+K24NyVoVON4dl++zFAYCNL/CbiuXArSt9yNYdgKwuNLu9ng3jEEWsCUYtv442Hlzyi8WXjm41d36qKby6YQce5dHwDpbXEaTq8OT9NdPsUsvEmO7A7JaR2jqjuKoH1CUQB6o4kkkR2UScKXA97lSRh5tqWfQ7N/JAT2fa1eVFXQ+GHBsDqHTH6HAB75pYHANiXQqCnIfC44o/BA15Qtq12CTF/XlR7UZ0xjXFJ90qESDSPRdET+sJCPpDajDxE+qpiEfl+GiqrcC6Gz/fGwo95jmkXgYMVntOrAu5SuGXhMwfcHxHjK0QekBdGMW6xO4adYzeNnZ6lTjnyXh7FPCeErlvojkDnVMTLmqGzNOjuHlu8juDVNRvHy36bYeDY78sDggMAPkrCPeXIASjlT4gLUOJUAjpwD2t2KAAuwtN1ledUaldoNJN9Mk3vlmn6Ln3QaPqbHTllTnlhvi9wKBtCP0mkX9G49d9j8bZxmmM1cmjwXZ1LZbp/e+fKrga/pp0rnbAOQ+y9CJxAp55NrCAIQHX65zszx774JtaNWc7/KtbH/YF3LQm41Z77vulfZx/8Oo36l55UfI292j0MO0c8rNubdS6+wWJa1+Zg4AwC+kPFONApcYiKTcbqPS7rYhg4dWPQsBeA64NA3+kVefPRmPQTcm+RoZQypF7T5BvoOdOQoCT5jfKJVFSL3yn8uo0nT0Df3J/+ft+idhK1btOoQT1RmkQEt053Dnxu1ZFmvfDpJ8saUu2OY26E0kbhjVskL2756PPcHUeto7rfMNCPCvos4qHoN/JaLz6RtTXPfKCetaXMZ4gS3kJ3ArrmSQ/Uk707QvAckeeQYeRPOeK4xTCPoX11FEgnrndCO5v01ZSB1FTSIngCwf2a2dy5DWhZ0EdYELCsL5/Egyq6qpkJWRX7b2PbEPysPzTGljEYGr1uKpkYA3ExSSX9X9ErupVf/RnAIdKlZ6xgQM4/K/nJXIr6TZLC3hcNTGe5SRHO6sXVPP2XQ42MnhjTNUTeIMbPhtoNI56gB42+fuR4HSGFoBkmA+S9zFN5efCc7TuqnNt5HKS/tE+xAMq4CUcy1bzAq9olSmBVvQTiVriO+f5gJIqH7yZ35nr4/BSO/wM=</diagram></mxfile>
|
||||
<mxfile host="Electron" modified="2022-08-11T10:29:38.995Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="EaH9fKq6YaRBX68HPPyn" version="13.4.5" type="device"><diagram id="mPrK13Eo7WhzfbSKrwnZ" name="Page-1">7Vtbd6M2EP41PGYPiIvh0XbsbNpkkx6nl32UQVw2MnKFHNv99RUgbED4kqxt3JSThzAjIcF8M6NvJKPow9nqjsJ5+Eg8hBWgeitFv1UA0Bxd5/9SzTrXOE4vVwQ08kSnrWIS/YOEUhXaReShpNKREYJZNK8qXRLHyGUVHaSULKvdfIKrs85hgCTFxIVY1v4ZeSzMtTbobfVfURSExcya5eQtM1h0Fm+ShNAjy5JKHyn6kBLC8qvZaohwarzCLvl94x2tmwejKGbH3ODfjqI7FuNZ3NcfXp71iT7q3xji2di6eGHk8fcXIqEsJAGJIR5ttQNKFrGH0lFVLm37PBAy50qNK38gxtYCTLhghKtCNsOilT8wXf+V3v/FLMTvYrhMuF1VpLWQfBIzMahmcXlj0bQxeUXMDcUMsm2EuRKyoC7aY5DCxyANENvTD+T9UmuVJhCWv0NkhviT8w4UYciit6o3QeGUwaafuLVPKVyXOsxJFLOkNPJzquAdRHzplnAuEV163Qdq/e293flF/gCFVHqTrSpzq3e4mNmGi9Vd5aMu16aL6f9JF7O0FnxMvPQbxAthhpeQ53445d5U976tb6UwLsOIockcZogt+Rq234/8COMhwYRmY+keRLbvpq7BKHlFpRbLtdHU/5gHvSHK0Gov5gU4atXYwBDycrtWacUCFJbWqQLUJjcpQfV+JAC4hnA/R9iCY1cG9dRx+3OA6K0s8auIldItl76XWrbJNhUuubwfDaJ2XSBK+W20ctGcRSQ+b34zke0ZTfnNBlPd+iBKx+c3UFtLrLbTm/VZs9t5yMZBdmCqNaTyyBR31cA6AVHQ5UDiRSI9axD5tovcRpIwtU3D/CDNPD6ITPPaoqgnofCpATCcHU5fAmDD3MoAAPNcCDgSAk8L9uQ/ohmh6+aQ4C/LqmavmjMmMarZXqggjoKYiy43IeL6QWq6yIW4LxpmkedlqbIJ52r6PEEufEfkaGYVOL0hcpwm4M6FW5E+S8D9EVG2gPgRumEUow67XdhZZtvYyVXqhEH39Ym/1BiTZQfdDuishnx5YegMCbr7pw6vHXj1tNbxMg8zDBR7/fSAYAuAB5NwQzlKAKb6Z8g4KHGmAaq+gbU4FACnMfpB/l0yqdlg0UJ3Ypreq9P0vJ6QaPrBgaw6pzwz39dsyRH6SZLGFYm7+N2Vb1unOUYrhwbXfC5VmPrwzpV5ZCa50M6VTFiHIXJfOU5Avcwmlu/7oLn886ypZZ49vG60ev3XsD5uDrwvUoAb3bnvjg3fw/FlXVd8yUXF77F78QhD1o4I6zlT9ewbLJpxbQEGjiCgnyrHAbXGIRo2GZv3uIyzYWBdGoOWowBcHwTyTi+vm3fmpP8h9+YVSq1Cctom30CumYYYJsk3wsapoTr89uHXa714AvLm/uS3hw61vaj12kZNlwulcYRRF3THwGc3HWleFj75ZFlCqttxLM1Q2yi8savkxa4ffR674ygNdOlfGMhHBX0asZCPG7ldFO+p2tpnPrpctWXMZwgT1kG3B7r2SY8uF3v3GKMA4peQIuhNGGSow7CMoXl1FEgmrvfcOqvspymD1FJJh+AeBDdrZnvnNqBjQT/DgoBhfDkRD2oY6nxM6GX44n4N1F9NL/wG2MQfsTVt+ChDGZkKp2f9oTIylMFQcXqZZqwM+MU40/R/gW/wLv3oTwEWTiN6Siv+Y/29SL+Yy0C/STLU+7yDZs1XGcBFO78Ksv+jnjK4VRwtvegPFMfZTPWDT5V9X/jFvdZ8guEU4QF0X4NMX5+8viHJ5dK24yD7y8bkq1+aNBtCohIsOzJQQ8js/sl27bDLAA1JqdcQQtr7kxIXt99P5m67/QpVH/0L</diagram></mxfile>
|
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 24 KiB |
@ -41,7 +41,7 @@ Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不
|
||||
|
||||
除了我们平时最常用的 HotSpot VM 外,还有 J9 VM、Zing VM、JRockit VM 等 JVM 。维基百科上就有常见 JVM 的对比:[Comparison of Java virtual machines](https://en.wikipedia.org/wiki/Comparison_of_Java_virtual_machines) ,感兴趣的可以去看看。并且,你可以在 [Java SE Specifications](https://docs.oracle.com/javase/specs/index.html) 上找到各个版本的 JDK 对应的 JVM 规范。
|
||||
|
||||

|
||||

|
||||
|
||||
#### JDK 和 JRE
|
||||
|
||||
@ -57,7 +57,7 @@ JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有
|
||||
|
||||
**Java 程序从源代码到运行的过程如下图所示:**
|
||||
|
||||

|
||||

|
||||
|
||||
我们需要格外注意的是 `.class->机器码` 这一步。在这一步 JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。而且,有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),所以后面引进了 JIT(just-in-time compilation) 编译器,而 JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什么经常会说 **Java 是编译与解释共存的语言** 。
|
||||
|
||||
@ -78,7 +78,7 @@ AOT 可以提前编译节省启动时间,那为什么不全部使用这种编
|
||||
- **编译型** :[编译型语言](https://zh.wikipedia.org/wiki/%E7%B7%A8%E8%AD%AF%E8%AA%9E%E8%A8%80) 会通过[编译器](https://zh.wikipedia.org/wiki/%E7%B7%A8%E8%AD%AF%E5%99%A8)将源代码一次性翻译成可被该平台执行的机器码。一般情况下,编译语言的执行速度比较快,开发效率比较低。常见的编译性语言有 C、C++、Go、Rust 等等。
|
||||
- **解释型** :[解释型语言](https://zh.wikipedia.org/wiki/%E7%9B%B4%E8%AD%AF%E8%AA%9E%E8%A8%80)会通过[解释器](https://zh.wikipedia.org/wiki/直譯器)一句一句的将代码解释(interpret)为机器代码后再执行。解释型语言开发效率比较快,执行速度比较慢。常见的解释性语言有 Python、JavaScript、PHP 等等。
|
||||
|
||||

|
||||

|
||||
|
||||
根据维基百科介绍:
|
||||
|
||||
@ -126,7 +126,7 @@ AOT 可以提前编译节省启动时间,那为什么不全部使用这种编
|
||||
>
|
||||
> 基于以上这些原因,OpenJDK 还是有存在的必要的!
|
||||
|
||||

|
||||

|
||||
|
||||
🌈 拓展一下:
|
||||
|
||||
|
@ -209,7 +209,7 @@ System.out.println(person1.getAddress() == person1Copy.getAddress());
|
||||
|
||||
我专门画了一张图来描述浅拷贝、深拷贝、引用拷贝:
|
||||
|
||||

|
||||

|
||||
|
||||
## Java 常见类
|
||||
|
||||
|
@ -16,7 +16,7 @@ head:
|
||||
|
||||
**Java 异常类层次结构图概览** :
|
||||
|
||||

|
||||

|
||||
|
||||
### Exception 和 Error 有什么区别?
|
||||
|
||||
@ -31,7 +31,7 @@ head:
|
||||
|
||||
比如下面这段 IO 操作的代码:
|
||||
|
||||

|
||||

|
||||
|
||||
除了`RuntimeException`及其子类以外,其他的`Exception`类及其子类都属于受检查异常 。常见的受检查异常有: IO 相关的异常、`ClassNotFoundException` 、`SQLException`...。
|
||||
|
||||
@ -49,7 +49,7 @@ head:
|
||||
- `UnsupportedOperationException`(不支持的操作错误比如重复创建同一用户)
|
||||
- ......
|
||||
|
||||

|
||||

|
||||
|
||||
### Throwable 类常用方法有哪些?
|
||||
|
||||
|