|
21 | 21 | - [1.2.4. 自增自减运算符](#124-自增自减运算符)
|
22 | 22 | - [1.2.5. Java中的几种基本数据类型是什么,对应的,各自占用多少字节呢?](#125-java中的几种基本数据类型是什么对应的各自占用多少字节呢)
|
23 | 23 | - [1.2.6. 自动装箱与拆箱](#126-自动装箱与拆箱)
|
| 24 | + - [1.2.7. continue、break、和return的区别是什么?](#127-continuebreak和return的区别是什么) |
24 | 25 | - [1.3. 方法(函数)](#13-方法函数)
|
25 | 26 | - [1.3.1. 什么是方法的返回值?返回值在类的方法里的作用是什么?](#131-什么是方法的返回值返回值在类的方法里的作用是什么)
|
26 | 27 | - [1.3.2. 为什么 Java 中只有值传递?](#132-为什么-java-中只有值传递)
|
|
65 | 66 | - [3.1.1. Collections 工具类和 Arrays 工具类常见方法总结](#311-collections-工具类和-arrays-工具类常见方法总结)
|
66 | 67 | - [3.2. 异常](#32-异常)
|
67 | 68 | - [3.2.1. Java 异常类层次结构图](#321-java-异常类层次结构图)
|
68 |
| - - [3.2.1.1. Throwable 类常用方法](#3211-throwable-类常用方法) |
69 |
| - - [3.2.1.2. 异常处理总结](#3212-异常处理总结) |
| 69 | + - [3.2.2. Throwable 类常用方法](#322-throwable-类常用方法) |
| 70 | + - [3.2.3. try-catch-finally](#323-try-catch-finally) |
| 71 | + - [3.2.4.使用 `try-with-resources` 来代替`try-catch-finally`](#324使用-try-with-resources-来代替try-catch-finally) |
70 | 72 | - [3.3. 多线程](#33-多线程)
|
71 | 73 | - [3.3.1. 简述线程、程序、进程的基本概念。以及他们之间关系是什么?](#331-简述线程程序进程的基本概念以及他们之间关系是什么)
|
72 | 74 | - [3.3.2. 线程有哪些基本状态?](#332-线程有哪些基本状态)
|
@@ -265,6 +267,18 @@ Java**中**有8种基本数据类型,分别为:
|
265 | 267 |
|
266 | 268 | 更多内容见:[深入剖析 Java 中的装箱和拆箱](https://www.cnblogs.com/dolphin0520/p/3780005.html)
|
267 | 269 |
|
| 270 | +#### 1.2.7. continue、break、和return的区别是什么? |
| 271 | +
|
| 272 | +在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。但是,有时候可能需要在循环的过程中,当发生了某种条件之后 ,提前终止循环,这就需要用到下面几个关键词: |
| 273 | +
|
| 274 | +1. continue :指跳出当前的这一次循环,继续下一次循环。 |
| 275 | +2. break :指跳出整个循环体,继续执行循环下面的语句。 |
| 276 | +
|
| 277 | +return 用于跳出所在方法,结束该方法的运行。return 一般有两种用法: |
| 278 | +
|
| 279 | +1. `return;` :直接使用 return 结束方法执行,用于没有返回值函数的方法 |
| 280 | +2. `return value;` :return 一个特定值,用于有返回值函数的方法 |
| 281 | +
|
268 | 282 | ### 1.3. 方法(函数)
|
269 | 283 |
|
270 | 284 | #### 1.3.1. 什么是方法的返回值?返回值在类的方法里的作用是什么?
|
@@ -708,19 +722,18 @@ String s = input.readLine();
|
708 | 722 |
|
709 | 723 | **注意:异常和错误的区别:异常能被程序本身处理,错误是无法处理。**
|
710 | 724 |
|
711 |
| -##### 3.2.1.1. Throwable 类常用方法 |
| 725 | +#### 3.2.2. Throwable 类常用方法 |
712 | 726 |
|
713 |
| -- **public string getMessage()**:返回异常发生时的简要描述 |
714 |
| -- **public string toString()**:返回异常发生时的详细信息 |
715 |
| -- **public string getLocalizedMessage()**:返回异常对象的本地化信息。使用 Throwable 的子类覆盖这个方法,可以生成本地化信息。如果子类没有覆盖该方法,则该方法返回的信息与 getMessage()返回的结果相同 |
716 |
| -- **public void printStackTrace()**:在控制台上打印 Throwable 对象封装的异常信息 |
| 727 | +- **`public string getMessage()`**:返回异常发生时的简要描述 |
| 728 | +- **`public string toString()`**:返回异常发生时的详细信息 |
| 729 | +- **`public string getLocalizedMessage()`**:返回异常对象的本地化信息。使用 `Throwable` 的子类覆盖这个方法,可以生成本地化信息。如果子类没有覆盖该方法,则该方法返回的信息与 `getMessage()`返回的结果相同 |
| 730 | +- **`public void printStackTrace()`**:在控制台上打印 `Throwable` 对象封装的异常信息 |
717 | 731 |
|
718 |
| -##### 3.2.1.2. 异常处理总结 |
| 732 | +#### 3.2.3. try-catch-finally |
719 | 733 |
|
720 | 734 | - **try 块:** 用于捕获异常。其后可接零个或多个 catch 块,如果没有 catch 块,则必须跟一个 finally 块。
|
721 | 735 | - **catch 块:** 用于处理 try 捕获到的异常。
|
722 |
| -- **finally 块:** 无论是否捕获或处理异常,finally 块里的语句都会被执行。当在 try 块或 catch 块中遇到 return |
723 |
| - 语句时,finally 语句块将在方法返回之前被执行。 |
| 736 | +- **finally 块:** 无论是否捕获或处理异常,finally 块里的语句都会被执行。当在 try 块或 catch 块中遇到 return 语句时,finally 语句块将在方法返回之前被执行。 |
724 | 737 |
|
725 | 738 | **在以下 4 种特殊情况下,finally 块不会被执行:**
|
726 | 739 |
|
@@ -749,6 +762,47 @@ public class Test {
|
749 | 762 |
|
750 | 763 | 如果调用 `f(2)`,返回值将是 0,因为 finally 语句的返回值覆盖了 try 语句块的返回值。
|
751 | 764 |
|
| 765 | +#### 3.2.4.使用 `try-with-resources` 来代替`try-catch-finally` |
| 766 | +
|
| 767 | +《Effecitve Java》中明确指出: |
| 768 | +
|
| 769 | +> 面对必须要关闭的资源,我们总是应该优先使用try-with-resources而不是`try-finally`。随之产生的代码更简短,更清晰,产生的异常对我们也更有用。`try-with-resources`语句让我们更容易编写必须要关闭的资源的代码,若采用`try-finally`则几乎做不到这点。 |
| 770 | +
|
| 771 | +Java 中类似于`InputStream`、`OutputStream` 、`Scanner` 、`PrintWriter`等的资源都需要我们调用`close()`方法来手动关闭,一般情况下我们都是通过`try-catch-finally`语句来实现这个需求,如下: |
| 772 | +
|
| 773 | +```java |
| 774 | + //读取文本文件的内容 |
| 775 | + Scanner scanner = null; |
| 776 | + try { |
| 777 | + scanner = new Scanner(new File("D://read.txt")); |
| 778 | + while (scanner.hasNext()) { |
| 779 | + System.out.println(scanner.nextLine()); |
| 780 | + } |
| 781 | + } catch (FileNotFoundException e) { |
| 782 | + e.printStackTrace(); |
| 783 | + } finally { |
| 784 | + if (scanner != null) { |
| 785 | + scanner.close(); |
| 786 | + } |
| 787 | + } |
| 788 | +``` |
| 789 | +
|
| 790 | +使用Java 7之后的 `try-with-resources` 语句改造上面的代码: |
| 791 | +
|
| 792 | +```java |
| 793 | +try (Scanner scanner = new Scanner(new File("test.txt"))) { |
| 794 | + while (scanner.hasNext()) { |
| 795 | + System.out.println(scanner.nextLine()); |
| 796 | + } |
| 797 | +} catch (FileNotFoundException fnfe) { |
| 798 | + fnfe.printStackTrace(); |
| 799 | +} |
| 800 | +``` |
| 801 | +
|
| 802 | +当然多个资源需要关闭的时候,使用 `try-with-resources` 实现起来也非常简单,如果你还是用`try-catch-finally`可能会带来很多问题。 |
| 803 | +
|
| 804 | +通过使用分号分隔,可以在`try-with-resources`块中声明多个资源: |
| 805 | +
|
752 | 806 | ### 3.3. 多线程
|
753 | 807 |
|
754 | 808 | #### 3.3.1. 简述线程、程序、进程的基本概念。以及他们之间关系是什么?
|
|
0 commit comments