Skip to content

Commit d3d5378

Browse files
committed
de
1 parent dee04b7 commit d3d5378

File tree

3 files changed

+571
-5
lines changed

3 files changed

+571
-5
lines changed

src/Java/chapter02/35.md

Lines changed: 92 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,91 @@ public class MerchandiseV2DescAppMain {
121121
int a = 1;
122122
```
123123

124-
- return 执行到时,整个方法就结束了;
124+
- **return 执行到时,整个方法就结束了**
125125

126126
- 就类似 break 的一样,不过 return 的是方法而不是循环;
127+
127128
- 适当的利用 return 有时会有意想不到的效果,比如:提前结束方法;
129+
130+
- 常规代码中:ifelse ifelse 等,有时候为了避免 if 执行后在执行 if 中另外一种条件的代码,则必须写在 else 里面(保证整组的判断)因为 if else 只会执行其中一个!可如果是在方法当中,我们就可以利用 return 来省略简化代码。
131+
132+
- 优化表达:在包含多个条件判断的代码中,if-else if-else 结构确保只执行一个分支。但在方法中,我们可以通过 return 语句提前返回,从而简化代码结构,避免使用复杂的 else 嵌套。
133+
134+
- 让我用代码示例来说明这两种写法的区别:
135+
136+
```java
137+
// 传统的 if-else 写法
138+
public String getGrade(int score) {
139+
String result;
140+
if (score >= 90) {
141+
result = "A";
142+
} else if (score >= 80) {
143+
result = "B";
144+
} else if (score >= 70) {
145+
result = "C";
146+
} else {
147+
result = "D";
148+
}
149+
return result;
150+
}
151+
152+
// 使用 return 简化后的写法
153+
public String getGradeSimplified(int score) {
154+
if (score >= 90) {
155+
return "A";
156+
}
157+
if (score >= 80) {
158+
return "B";
159+
}
160+
if (score >= 70) {
161+
return "C";
162+
}
163+
return "D";
164+
}
165+
```
166+
167+
第二种写法通过 return 语句直接返回结果,避免了 else 的使用,使代码更加简洁易读。每个条件判断后立即返回结果,后续的代码自然不会执行,因此不需要显式地用 else 来防止执行。这种模式在实际开发中被称为"卫语句"Guard Clauses)模式。
168+
169+
这种优化特别适用于:
170+
171+
1. 方法中的条件判断
172+
2. 需要提前返回的场景
173+
3. 有多个独立条件判断的情况
174+
175+
- 比如有一件事只能二选一:用户注册时,如果年龄大于等于18岁则是成年账号,否则是未成年账号。这种情况下,我们只能希望执行的满18岁,就不要执行未满18岁。如果在常规情况下,是必须写 elseelse if
176+
177+
```java
178+
// 正常编写
179+
public class Main {
180+
public static void main(String[] args) {
181+
int Condition = 17;
182+
if (Condition < 18) {
183+
System.out.println("未满18岁");
184+
} else {
185+
System.out.println("已满18岁");
186+
}
187+
}
188+
}
189+
// 输出
190+
未满18
191+
192+
// else 不能省略,会执行 已满18岁
193+
public class Main {
194+
public static void main(String[] args) {
195+
int Condition = 17;
196+
if (Condition < 18) {
197+
System.out.println("未满18岁");
198+
}
199+
System.out.println("已满18岁");
200+
}
201+
}
202+
203+
// 输出
204+
未满18
205+
已满18
206+
```
207+
208+
- 在上面代码中可以知道,是不能省略 else 的,也没有别的办法。此时 return 用上(但是必须创建方法就可以省略)
128209

129210
## 2. 看例程:让超市找出利润最高的商品的方法
130211

@@ -274,26 +355,32 @@ public class RunLittleSupperMarketAppMain {
274355
}
275356
```
276357

277-
**思考🤔:**为什么 `littleSuperMarket.getBiggestProfitMerchandise().describe();` 可以连续调用?原因是什么?
358+
**思考🤔:** 为什么 `littleSuperMarket.getBiggestProfitMerchandise().describe();` 可以连续调用?原因是什么?
278359

279360
因为:方法 `littleSuperMarket.getBiggestProfitMerchandise()` 的返回类型是 `MerchandiseV2` 所以是支持的。
280361

281362

282363

283364
## 4. 法调用调试之 Step Into:进入被调用的方法内部继续调试
284365

285-
![](./35.assets/1673767739843-ff17fa35-3080-4cf8-b0ed-d7bcf15a6959.png)
366+
::: tabs
286367

287-
![](./35.assets/1673767778646-ba8f752d-b29a-4030-8e45-4b0929de011a.png)
368+
@tab 1. 点击 37 行代码
288369

289-
![](./35.assets/1673767941151-d55ace71-5716-47d7-b49e-463cb52cc5a5.png)
370+
![](./35.assets/1673767739843-ff17fa35-3080-4cf8-b0ed-d7bcf15a6959.png)
290371

372+
@tab 2. 点击 step into 就会进入方法
291373

374+
![](./35.assets/1673767778646-ba8f752d-b29a-4030-8e45-4b0929de011a.png)
292375

376+
@tab 3. Step Out 执行到方法结束,返回到调用方法的地方
293377

378+
![](./35.assets/1673767941151-d55ace71-5716-47d7-b49e-463cb52cc5a5.png)
294379

295380

296381

382+
:::
383+
297384

298385

299386

58.2 KB
Loading

0 commit comments

Comments
 (0)