欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

finally語(yǔ)句是在return語(yǔ)句執(zhí)行之后,return語(yǔ)句返回之前執(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;
    }
}

運(yùn)行結(jié)果:

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

注意:

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

二、覆蓋問(wèn)題

finally塊中的return語(yǔ)句會(huì)覆蓋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;
        }
    }
}

運(yùn)行結(jié)果:

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

注意:

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

如果finally語(yǔ)句沒(méi)有return語(yǔ)句覆蓋返回值,那么原來(lái)的返回值可能因?yàn)閒inally里的修改而改變也有可能不變

(1)測(cè)試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;
    }
}

運(yùn)行結(jié)果:

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

注意:

對(duì)于基本數(shù)據(jù)類(lèi)型來(lái)說(shuō),finally中對(duì)返回值的修改不會(huì)影響try中的返回變量的值

(2)測(cè)試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;
    }
}

運(yùn)行結(jié)果:

finally

注意:

對(duì)于引用數(shù)據(jù)類(lèi)型來(lái)說(shuō),finally中對(duì)返回值的修改會(huì)影響try中的返回變量的值

三、異常情況

try塊中的return語(yǔ)句在異常的情況下不會(huì)被執(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;
    }
}

運(yùn)行結(jié)果:

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

注意:

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

try中發(fā)生異常時(shí),return寫(xiě)在catch語(yǔ)句中

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);
        }
    }
}

運(yùn)行結(jié)果:

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

注意:

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

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

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

(2)try語(yǔ)句塊中有強(qiáng)制退出時(shí)也不會(huì)執(zhí)行finally語(yǔ)句塊中的代碼

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");
        }
    }
}

運(yùn)行結(jié)果:

try block

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

相關(guān)文章

  • SpringBoot用多線程批量導(dǎo)入數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法

    SpringBoot用多線程批量導(dǎo)入數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringBoot用多線程批量導(dǎo)入數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02
  • java實(shí)現(xiàn)計(jì)算周期性提醒的示例

    java實(shí)現(xiàn)計(jì)算周期性提醒的示例

    本文分享一個(gè)java實(shí)現(xiàn)計(jì)算周期性提醒的示例,可以計(jì)算父親節(jié)、母親節(jié)這樣的節(jié)日,也可以定義如每月最好一個(gè)周五,以方便安排會(huì)議
    2014-04-04
  • springboot熱部署知識(shí)點(diǎn)總結(jié)

    springboot熱部署知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理了關(guān)于springboot熱部署的知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們參考學(xué)習(xí)下。
    2019-06-06
  • SpringBoot整合Quartz方法詳解

    SpringBoot整合Quartz方法詳解

    這篇文章詳解介紹了SpringBoot整合Quartz的方法,Quartz是一個(gè)比較成熟了的定時(shí)任務(wù)框架,本文實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2023-04-04
  • java實(shí)現(xiàn)IP地址轉(zhuǎn)換

    java實(shí)現(xiàn)IP地址轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)IP地址轉(zhuǎn)換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • SpringBoot+Spring?Data?JPA整合H2數(shù)據(jù)庫(kù)的示例代碼

    SpringBoot+Spring?Data?JPA整合H2數(shù)據(jù)庫(kù)的示例代碼

    H2數(shù)據(jù)庫(kù)是一個(gè)開(kāi)源的關(guān)系型數(shù)據(jù)庫(kù),本文重點(diǎn)給大家介紹SpringBoot+Spring?Data?JPA整合H2數(shù)據(jù)庫(kù)的示例代碼,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • 泛談Java NIO

    泛談Java NIO

    java.nio全稱(chēng)java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO),使用它可以提供非阻塞式的高伸縮性網(wǎng)絡(luò)。下面我們來(lái)簡(jiǎn)單了解一下吧
    2019-05-05
  • Java 中的 String對(duì)象為什么是不可變的

    Java 中的 String對(duì)象為什么是不可變的

    String對(duì)象是不可變的,但這僅意味著你無(wú)法通過(guò)調(diào)用它的公有方法來(lái)改變它的值。本文給大家介紹java中的string對(duì)象為什么是不可變的,需要的朋友一起了解了解吧
    2015-10-10
  • Java中HashMap和Hashtable的區(qū)別淺析

    Java中HashMap和Hashtable的區(qū)別淺析

    這篇文章主要介紹了Java中HashMap和Hashtable的區(qū)別淺析,本文總結(jié)了6條它們之間的不同之處,需要的朋友可以參考下
    2015-03-03
  • java簡(jiǎn)單實(shí)現(xiàn)用語(yǔ)音讀txt文檔方法總結(jié)

    java簡(jiǎn)單實(shí)現(xiàn)用語(yǔ)音讀txt文檔方法總結(jié)

    在本篇文章里小編給大家整理了關(guān)于java簡(jiǎn)單實(shí)現(xiàn)用語(yǔ)音讀txt文檔的詳細(xì)方法總結(jié),有需要的朋友們參考下。
    2019-06-06

最新評(píng)論