@@ -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+ - 常规代码中:if …else if …else 等,有时候为了避免 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 岁。如果在常规情况下,是必须写 else 或 else 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
0 commit comments