最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java基礎(chǔ)之finally語句與return語句詳解

 更新時間:2021年04月26日 14:16:37   作者:星光_依舊燦爛  
這篇文章主要介紹了Java基礎(chǔ)之finally語句與return語句詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下

一、return語句執(zhí)行順序

finally語句是在return語句執(zhí)行之后,return語句返回之前執(zhí)行的

package exception;

public class Demo06 {
    public static void main(String[] args) {
        System.out.println(func());
    }

    public static int func(){
        int a = 10;
        try{
            System.out.println("try中的代碼塊");
            return a += 10;
        }catch (Exception e){
            System.out.println("catch中的代碼塊");
        }finally {
            System.out.println("finally中的代碼塊");
            if(a > 10){
                System.out.println("a > 10,"+"a="+a);
            }
        }
        return a += 50;
    }
}

運行結(jié)果:

try中的代碼塊
finally中的代碼塊
a > 10,a=20
20

注意:

a > 10,a=20的結(jié)果說明了return a += 10已經(jīng)執(zhí)行了,但是沒有直接返回,而是先去執(zhí)行finally語句的內(nèi)容,然后再去返回結(jié)果

二、覆蓋問題

finally塊中的return語句會覆蓋try塊的return返回

package exception;

public class Demo07 {
    public static void main(String[] args) {
        System.out.println(func());
    }

    public static int func(){
        int a = 10;
        try{
            System.out.println("try中的代碼塊");
            return a += 10;
        }catch (Exception e){
            System.out.println("catch中的代碼塊");
        }finally {
            System.out.println("finally中的代碼塊");
            if(a > 10){
                System.out.println("a>10,"+"a="+a);
            }
            return 100;
        }
    }
}

運行結(jié)果:

try中的代碼塊
finally中的代碼塊
a>10,a=20
100

注意:

(1)如果try中有return語句,finally中也有return語句,最終執(zhí)行的是finally中的return語句
(2)如果finally代碼塊中寫了return語句,那么finally之后的return語句就變成不可到達(dá)的語句,需要注釋掉,否則編譯不過

如果finally語句沒有return語句覆蓋返回值,那么原來的返回值可能因為finally里的修改而改變也有可能不變

(1)測試1

package exception;

public class Demo08 {
    public static void main(String[] args) {
        System.out.println(func());
    }

    public static int func(){
        int a = 10;
        try{
            System.out.println("try中的代碼塊");
            return a += 20;
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("catch中的代碼塊");
        }finally {
            System.out.println("finally中的代碼塊");
            a  += 20;
            if(a > 10){
                System.out.println("a > 10,a="+a);
            }
            a += 20;
        }
        return 200;
    }
}

運行結(jié)果:

try中的代碼塊
finally中的代碼塊
a > 10,a=50
30

注意:

對于基本數(shù)據(jù)類型來說,finally中對返回值的修改不會影響try中的返回變量的值

(2)測試2

package exception;

import java.util.HashMap;
import java.util.Map;

public class Demo09 {
    public static void main(String[] args) {
        System.out.println(getMap().get("KEY").toString());
    }

    public static Map<String,String> getMap(){
        Map<String,String> map = new HashMap<>();
        map.put("KEY","INIT");
        try{
            map.put("KEY","try");
            return map;
        }catch (Exception e){
            e.printStackTrace();
            map.put("KEY","catch");
        }finally {
            map.put("KEY","finally");
            map = null;
        }
        return map;
    }
}

運行結(jié)果:

finally

注意:

對于引用數(shù)據(jù)類型來說,finally中對返回值的修改會影響try中的返回變量的值

三、異常情況

try塊中的return語句在異常的情況下不會被執(zhí)行

package exception;

public class Demo10 {
    public static void main(String[] args) {
        System.out.println(func());
    }

    public static int func(){
        int a = 10;
        try{
            System.out.println("try中的代碼塊");
            a = a/0;
            return a += 50;
        }catch (Exception e){
            a += 15;
            System.out.println("catch中的代碼塊");
        }finally {
            System.out.println("finally中的代碼塊");
            if(a > 20){
                System.out.println("a > 20,a ="+a);
            }
            a += 10;
        }
        return a;
    }
}

運行結(jié)果:

try中的代碼塊
catch中的代碼塊
finally中的代碼塊
a > 20,a =25
35

注意:

try語句塊中發(fā)生異常,try語句異常后的內(nèi)容不會執(zhí)行,return語句也不會執(zhí)行,執(zhí)行的是捕獲到的catch語句塊和finally語句塊

try中發(fā)生異常時,return寫在catch語句中

package exception;

public class Demo11 {
    public static void main(String[] args) {
        System.out.println(func());
    }

    public static int func(){
        int a = 10;
        try{
            System.out.println("try中的代碼塊");
            a = a /0;
            return a += 10;
        }catch (Exception e){
            System.out.println("catch中的代碼塊");
            return a += 15;
        }finally {
            System.out.println("finally中的代碼塊");
            if (a > 10){
                System.out.println("a > 10, a = "+a);
            }
            a += 50;
            System.out.println(a);
        }
    }
}

運行結(jié)果:

try中的代碼塊
catch中的代碼塊
finally中的代碼塊
a > 10, a = 25
75
25

注意:

try中發(fā)生異常之后,catch中的return語句先執(zhí)行,確定了返回值之后(保存起來,finally中的語句對返回值無影響)再去finally語句塊,執(zhí)行完之后再返回a的值,finally中對a的修改對返回值無效

四、finally語句一定會被執(zhí)行嗎?

(1)當(dāng)程序進(jìn)入try語句之前就出現(xiàn)異常時,會直接結(jié)束

(2)try語句塊中有強制退出時也不會執(zhí)行finally語句塊中的代碼

System.exit(0);

代碼示例:

package exception;

public class Demo12 {
    public static void main(String[] args) {
        int a = 10;
        try{
            System.out.println("try block");
            System.exit(0);
        }catch (Exception e){
            System.out.println("catch block");
        }finally {
            System.out.println("finally block");
        }
    }
}

運行結(jié)果:

try block

到此這篇關(guān)于Java基礎(chǔ)之finally語句與return語句詳解的文章就介紹到這了,更多相關(guān)java finally語句與return語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中的@Conditional?注解的使用

    SpringBoot中的@Conditional?注解的使用

    @Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,滿足條件的才給容器注冊Bean,本文主要介紹了SpringBoot中的@Conditional?注解的使用
    2024-01-01
  • Java獲取任意http網(wǎng)頁源代碼的方法

    Java獲取任意http網(wǎng)頁源代碼的方法

    這篇文章主要介紹了Java獲取任意http網(wǎng)頁源代碼的方法,可實現(xiàn)獲取網(wǎng)頁代碼以及去除HTML標(biāo)簽的代碼功能,涉及Java正則操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • SpringBoot入門之集成Druid的方法示例

    SpringBoot入門之集成Druid的方法示例

    這篇文章主要介紹了SpringBoot入門之集成Druid的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Mybatis之映射實體類中不區(qū)分大小寫的解決

    Mybatis之映射實體類中不區(qū)分大小寫的解決

    這篇文章主要介紹了Mybatis之映射實體類中不區(qū)分大小寫的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot 中html的頁面間跳轉(zhuǎn)問題小結(jié)

    SpringBoot 中html的頁面間跳轉(zhuǎn)問題小結(jié)

    這篇文章主要介紹了SpringBoot 中html的頁面間跳轉(zhuǎn)問題小結(jié),本文給大家分享兩種方法,結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • Java生成CSV文件實例詳解

    Java生成CSV文件實例詳解

    這篇文章主要介紹了Java生成CSV文件的方法,很實用的功能,需要的朋友可以參考下
    2014-07-07
  • 一文吃透 Spring 中的 AOP 編程

    一文吃透 Spring 中的 AOP 編程

    這篇文章主要介紹了springboot中的AOP編程,本文介紹的非常詳細(xì),有一定的參考價值,感興趣的小伙伴可以借鑒一下
    2023-04-04
  • Android studio按鈕點擊頁面跳轉(zhuǎn)詳細(xì)步驟

    Android studio按鈕點擊頁面跳轉(zhuǎn)詳細(xì)步驟

    在Android應(yīng)用程序中,頁面跳轉(zhuǎn)是非常常見的操作,下面這篇文章主要給大家介紹了關(guān)于Android studio按鈕點擊頁面跳轉(zhuǎn)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Feign踩坑源碼解讀之@FeignClient注入容器

    Feign踩坑源碼解讀之@FeignClient注入容器

    文章主要介紹了FeignClientsRegistrar類的作用和注冊Feign客戶端的過程,以及FeignClientFactoryBean的使用和目標(biāo)對象的獲取
    2024-11-11
  • Java web過濾器驗證登錄防止未登錄進(jìn)入界面

    Java web過濾器驗證登錄防止未登錄進(jìn)入界面

    這篇文章主要介紹了Java web過濾器驗證登錄防止未登錄進(jìn)入界面,在一些系統(tǒng)中經(jīng)??梢杂玫酱斯δ?,對java web 驗證登錄知識感興趣的朋友一起看下吧
    2016-08-08

最新評論

龙南县| 巴青县| 尤溪县| 陇川县| 哈巴河县| 萨嘎县| 富阳市| 杭州市| 原阳县| 留坝县| 大田县| 青田县| 桂平市| 孟连| 图们市| 电白县| 达州市| 湘西| 香河县| 乐清市| 鸡泽县| 墨江| 朔州市| 宜兴市| 云和县| 桓仁| 定边县| 大埔区| 长阳| 监利县| 建宁县| 拜城县| 峨眉山市| 湄潭县| 甘洛县| 道真| 馆陶县| 葵青区| 沙洋县| 武强县| 湘阴县|