final、finally和return

finally和return的执行顺序在.NET中是如何的? 总结起来,在.NET中,finally块和return语句的执行顺序是:先执行finally块中的代码,然后再执行return语句返回结果。在.NET中,finally块和return语句的执行顺序是确定的。无论是在try块中正常执行到return语句,还是在catch块中捕获到异常并执行return语句,finally块中的代码都会在return语句返回结果之前被执行。在.NET中,finally块和return语句是两个不同的概念,它们在程序执行过程中具有不同的行为和执行顺序。在上面的示例中,当调用。 阅读详情

final、finally和return

众所周知,一提到final就会想到static、一想到try…catch用法就会想到还有个finally、一想到finally就又会引出return与其的关系。

那么就来好好理一理这三者:

1、final与static的区别

首先这两者都是有相同点的:

①都可以修饰类,成员变量,方法
②都不能用于修饰构造方法

其次static可以修饰代码块,final不可以;
static不可以修饰方法内的局部变量,final可以;

static:

  • static修饰表示静态或全局变量,被修饰的属性和方法属于类,可以用类名.静态属性/方法名访问
  • static修饰的代码块为静态代码块,当Java的JVM加载时,会执行且只执行一次该代码块
  • static修饰的变量可以被重新赋值
  • 在static修饰的方法中不能够同时拥有super和this关键字
  • static方法不能被重写
  • static方法必须被实现,不能是抽象的

final

  • final修饰表示常量,一旦创建不可改变
  • final标记的成变量必须在声明时赋值,且不能重新赋值
  • final方法不能被子类重写,不能被继承

2、finally与return之间执行顺序对返回值的影响

在这里主要讨论try语句块下和finally语句块不考虑catch语句块

2、1 对于返回值问题,当finally和return中同时有return语句的时候会出现这几种情况:
①finally语句块会执行

②finally中没有return,finally对return变量的重新赋值修改无效

③try和finally都包含return,return值会以finally语句块return值为准

2、2 代码演示:

public class FinallyTest {
    public static void main(String[] args) {
        Logger logger = Logger.getLogger(String.valueOf(FinalTest.class));
        System.out.println(FinalTest.test());
    }
    public static @NotNull String test() {
        String str = "你好";
        int i = 9;
         /**
         * 当finally中有return的时候,若finally中改变了变量的值,则return返回finally中的值
         */
        try {
            str = "爸爸";
            System.out.println("try....");
            return str;
        } finally {
            System.out.println("finally....");
            str = "儿子";
            return str;
        }
    }
}

输出结果:
在这里插入图片描述

public class FinallyTest {
    public static void main(String[] args) {
        Logger logger = Logger.getLogger(String.valueOf(FinalTest.class));
        System.out.println(FinalTest.test());
    }
    public static @NotNull String test() {
        String str = "你好";
        int i = 9;
         /**
         * 当finally中没有return的时候,若finally中改变了变量的值,则没有影响
         */
        try {
            str = "爸爸";
            System.out.println("try....");
            return str;
        } finally {
            System.out.println("finally....");
            str = "儿子";
           // return str;
        }
    }
}

输出结果:
在这里插入图片描述

3、在try…catch中finally语句块一定会被执行吗?

那么问题就又来了,在try语句中finally语句一定会被执行到吗?答案当然是不一定啊,肯定会有特殊情况啊!!!

①程序正常执行结束:

public class FinalTest {
    public static void main(String[] args) {
        Logger logger = Logger.getLogger(String.valueOf(FinalTest.class));
        System.out.println(FinalTest.test());
    }
    public static @NotNull String test() {
        String str = "你好";
        int i = 9;

        if (i == 9){
        /**程序执行到这一步直接返回str的值,不再继续向下执行**/
            return str;
        }
        try {
            System.out.println("try.....");
            return str;
        } finally {
            System.out.println("finally.....");
        }
}

输出结果:
在这里插入图片描述

②抛出异常,执行到try抛出异常直接结束

public class FinalTest {
    public static void main(String[] args) {
        Logger logger = Logger.getLogger(String.valueOf(FinalTest.class));
        System.out.println(FinalTest.test());
    }
    public static @NotNull String test() {
        String str = "你好";
        int i = 9;
        /**抛出异常,执行到return str的时候抛出异常直接结束**/
        i = i / 0;
        try {
           System.out.println("try....");
            return str;
        } finally {
            System.out.println("finally.....");
        }
    }
}

输出结果:
在这里插入图片描述
这里提示11、28行出错就是我们的 test方法下的i = i / 0;
这本就是个错误的表示,在程序执行中会报错,用try来执行会直接抛出异常
在这里插入图片描述
在这里插入图片描述
③系统直接退出不再向下执行

public class FinalTest {
    public static void main(String[] args) {
        Logger logger = Logger.getLogger(String.valueOf(FinalTest.class));
        System.out.println(FinalTest.test());
    }
    public static @NotNull String test() {
        String str = "你好";
        int i = 9;
        /**系统退出不在向下执行程序**/
        try {
            System.out.println("try....");
            System.exit(0);
            return str;
        } finally {
            System.out.println("finally....");
        }
     }
 }

输出结果:
在这里插入图片描述

3种六轴IMU姿态解算算法对比:互补滤波、Mahony与卡尔曼滤波性能实测 本文深入对比了三种六轴IMU姿态解算算法:互补滤波、Mahony与卡尔曼滤波的性能表现。通过实测数据分析了各算法在精度、计算复杂度和适用场景上的差异,为无人机、机器人等运动控制系统提供了选型建议。重点探讨了六轴陀螺仪与加速度传感器的数据融合技术,帮助开发者根据项目需求选择最优解算方案。 阅读详情

相关推荐

ComfyUI新手必看:JoyCaption 2插件安装全流程(附百度网盘资源)

本文为ComfyUI新手提供了JoyCaption 2插件的完整安装与部署指南。详细介绍了从环境准备、插件获取、模型文件配置到核心节点使用的全流程,并重点解析了其集成的LLM反推模式,帮助用户高效实现从图片到精准提示词的转换。

mango的博客 303

finally语句与return语句详解

文章目录1.return语句执行顺序1.1finally语句是在return语句执行之后,return语句返回之前执行的2.覆盖问题2.1finally块中的return语句会覆盖try块的return返回2.2如果finally语句没有return语句覆盖返回值,那么原来的返回值可能因为finally里的修改而改变也有可能不变3.异常情况3.1try块中的return语句在异常的情况下不会被执行3.2try中发生异常时,return写在catch语句中4.finally语句一定会被执行吗? 1.retur

qq_46804966的博客 9550

用yolov8训练自己的模型并调取摄像头实时检测,新手小白超友好教程!逻辑梳理,从0开始逐步实操❤

帮新手小白学会用yolov8,包含多篇高质量博客整理

Lhhhhds的博客 2941

Java中finally与return的执行顺序

在Java的异常处理中,try、catch 和 finally 是按顺序执行的。如果 try 中没有异常,则顺序为 try→finally,如果 try 中有异常,则顺序为 try→catch→finally。但是当 try、catch、finally 中加入 return 之后,return 和 finally 的执行顺序让很多人混淆不清。下面来分别说明一下。 1. try 和 catch 中带有return 1)try 中带有 return public class tryDemo { ...

骏马逸动,心随你动的博客 8637

实战指南:如何用Frida绕过某梆加固的Anti-Frida检测(附完整脚本)

本文深入剖析了企业级加固方案中的Anti-Frida检测机制,并提供了实战对抗策略。通过分析基于文件系统、内存特征、行为及环境的多层次检测原理,文章详细介绍了如何定位检测逻辑、绕过maps文件扫描、对抗内存与行为特征检测,并附上了针对某梆加固的完整绕过脚本与系统化工程方案。

weixin_42527589的博客 600

Windows C语言编程:Beep API实现蜂鸣器原理与实战

如果你在 Windows 上写过 C 语言程序,想给程序加个简单的提示音,第一个想到的可能是 printf("\a") 。这个转义字符确实能在某些终端里发出“嘀”的一声,但它太原始、太不可控了,而且很多时候根本没声音。那么,有没有一种更“Windows”、更可控、更专业的方法来让你的程序“说话”呢? 答案是肯定的,而且它比你想象的要强大和复杂。Windows 提供了一个名为 Beep 的 API 函数,专门用于生成蜂鸣声。你可能觉得这功能太简单,甚至有点过时——不就是让电脑“哔”一声吗?但恰恰是这个看似简单

weixin_34109408的博客 395

finally与return总结

如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。情况二:如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。如果return的数据是基本数据类型,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。

weixin_59640333的博客 2141

PyTorch生成式人工智能——VQ-VAE详解与实现

VQ-VAE (Vector Quantised-Variational AutoEncoder) 的核心思想就是将 VAE 的连续潜变量离散化。它通过学习一个码本 (Codebook) 来实现这一点,码本是一个包含有限个嵌入向量的字典。模型不是直接输出一个连续的潜在向量,而是从码本中找出与编码器输出最接近的嵌入向量来代替它。本节首先详细讲解 VQ-VAE 的技术原理,然后使用 PyTorch 从零开始实现 VQ-VAE 模型。

盼小辉丶的博客 3298

return与finally到底谁先执行?

关于return与finally的强弱关系的解释。其中返回值的一些注意事项

没伞的孩子就得跑的专栏 8153

改进yolov8|BackBone改进:PWConv、FasterNeXt替换yolov8主干网络

各位哥哥姐姐弟弟妹妹大家好,我是干饭王刘姐,主业干饭,主业2.0计算机研究生在读。和我一起来改进yolov8变身计算机大牛吧!本文中的论文笔记都是刘姐亲自整理,原创整理哦~

weixin_44379985的博客 748

一个中科大差生的8年程序员工作总结

今年终于从大菊花厂离职了,离职前收入大概60w不到吧,在某乎属于比较差的,今天终于有空写一下自己的职场故事,也算是给自己近8年的程序员工作做个总结复盘。近8年有些事情做对了,也有更多事情做错了,在这里记录一下,希望能够给后人一些帮助吧,也欢迎私信交流。文笔不好,见谅,有些细节记不清了,如果有出入,就当是我编的这个故事吧。 PS:有几个问题先在这里解释一下,评论就不一一回复了 1、关于差生,我本人在科大时确实成绩偏下,差生主要讲这一点,没其他意思。 2、因为买房是我人生中的大事,我认为需要记录和总结一下

陈小房的自我修炼 5万+

final,finally,finalize区别、return和finally谁被最后执行?

final,finally,finalize区别、return和finally谁被最后执行?

BaoZi969的博客 176

【ComfyUI 基础教程】ComfyUI 局部重绘工作流教程

本篇指南将带你了解 ComfyUI 中的局部重绘工作流,并带你完成一个局部重绘的示例,以及遮罩编辑器的使用等。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 303

final,finally和finalize区别,catch里面有return语句的执行顺序

/* * 1:final,finally和finalize的区别 * final:最终的意思,可以修饰类,成员变量,成员方法 * 修饰类:类不能被继承 * 修饰方法:方法不能被重写 * ...

chengqishun0973的博客 278

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

final finally finalize/ return catch面试题

package cn.itcast_07; /* * 面试题: * 1:final,finally和finalize的区别 * final:最终的意思,可以修饰类,成员变量,成员方法 * 修饰类,类不能被继承 * 修饰变量,变量是常量 * 修饰方法,方法不能被重写 * finally:是异常处理的一部分,用于释放资源。 * 一般来说,代码肯定会执行,特殊情况:在执...

grace_fang的博客 407

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

finally里面的代码return后会不会执行,什么时候执行?final,finally,finalize的区别

1、这是一个经常面试到的面试题: 在finally代码前执行了return,那么finally里面的代码还会执行吗?是return前执行还是return后执行? finally一般都是配合try catch一起使用,一般用作资源释放等,无论程序释放异常或者其他方式返回,只要虚拟机不退出(一般也不会发生)finally里面的代码始终都会执行。会在return前执行。 public static void main(String[] args){ int c = testReturn();

wang_yi_l的博客 1114

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IO流_面试题之final,finally和finalize的区别、面试题之如果在finally之前有return

package cn.itcast_07; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /* * 面试题: * 在面试时,如果有不知道的可以向面试官虚心请教 * 1:final、finally和finalize的区别 * final:最

辐_射的博客 856

异常-面试题之final,finally和finalize的区别,如果在finally之前有return

package cn.itcast_07; /* * 面试题: * 1:final,finally和finalize的区别 * final:最终的意思,可以修饰类,成员变量,成员方法 * 修饰类,类不能被继承 * 修饰变量,变量是常量 * 修饰方法,方法不能被重写 * finally:是异常处理的一部分,用于释放资源。 * ...

兴趣是最好的老师 292

final关键字与finally以及break、continue、return

一、final关键字与finally **final关键字** (1)、final关键字可以用来修饰类、方法、基本类型以及引用数据类型. (2)、final修饰的类是最终类,不能被继承,但其仍然可以拥有父类 (3)、final修饰的方法是最终方法,表示改方法不能被重写,但能被重载 (4)、final修饰基本类型时表示最终值,值不能被修改.修饰引用数据类型时,修饰的是地址值 **finally** finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语

qq_40226268的博客 1175

final/finally/finalize,return和finally的执行顺序

一,首先 final,finally和finalize的区别: 1.final 1)final修饰类,不能被继承。 2)修饰方法,不能被重写或覆盖。而且final方法是静态绑定的,在编译时就确定好是哪个类的方法,所以final方法效率要高。 3)修饰变量,只能赋值一次。 当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不...

仅做个人笔记 453

return,抽象类与接口,对象序列化机制,this和super,标识符,break和continue以及return,final,finally和finalize

return,抽象类与接口,对象序列化机制,this和super,标识符,break和continue以及return,final,finally和finalize

adamsugar的博客 937

java final return_java中 try return finally return

finally块里面的代码一般都是会执行的,除非执行 System.exit(int),停止虚拟机,断电。1.若try代码块里面有return ,假设要return 的值 是A,A为基本类型或者被final修饰的不可变类型(如:基本类型的包装类型Integer,Double,String ),并且finally语句块里面 对try语句块里面要return 的值A做了修改 比如A+1,但是最终返回的...

weixin_42227736的博客 400

面试被问finally 和 return,到底谁先执行?

经常有人面试被问到,finally 和 return,到底谁先执行呢? 为了解决这个问题,其实我们可以先想想 finally 是被用来干嘛的呢?它是被用来结束一些正常的收尾动作或结束标识。也就是说无论怎么样,finally 都会被最后执行。例如:一般在操作数据库时,用Jdbc连接池连接数据库后释放资源,需要 finally 来处理。再如 redis 连接,在获取连接池处理完数据的增删改查后,需要释...

wangsofa的博客 1779

finally final finalize区别及 try catch finally中return值分析

一、final修饰符(关键字) 类被声明为final,意味着它不能被继承。因此一个类不能既被声明为abstract的,又被声明为final的。 变量或方法声明为final,可以保证它们在使用中不被改变;(引用变量对应的引用地址不能变,但是堆中对应的对象可以变); 被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改(不可修改的是栈中存储的内存地址,不

hellothejava的博客 548

面试题之final,finally和finalize的区别以及如果catch里面有return语句,请问finally里面的代码还会执行吗?

/*  * 面试题:  * 1:final,finally和finalize的区别  * final:最终的意思,可以修饰类,成员变量,成员方法  *         修饰类,类不能被继承  *         修饰变量,变量是常量  *         修饰方法,方法不能被重写  * finally:是异常处理的一部分,用于释放资源。  *         一般来说,代码肯定会执

2605

finally 和 return,到底谁先执行

为了解决这个问题,其实我们可以先想想 finally 是被用来干嘛的呢?它是被用来结束一些正常的收尾动作或结束标识。也就是说无论怎么样,finally 都会被最后执行。例如:一般在操作数据库时,用Jdbc连接池连接数据库后释放资源,需要 finally 来处理。再如 redis 连接,在获取连接池处理完数据的增删改查后,需...

2023年最新地推相关信息 340
上一篇: 由浅到深的JDBC
下一篇: throw 和 throws 的区别
长安不野
博客等级 码龄6年 83粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值