当return遇到try、catch、finally时会发生什么?
1.return的作用
在Java中的return语句和方法有密切的关系,return语句用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句)。就像下边这样:
package com.albertyy.other;
/*
* 公众号:AlbertYang
*/
public class Return {
public static void main(String[] args) {
System.out.println(method1());
System.out.println(method2());
}
//返回方法指定类型的值
public static int method1(){
return 1;
}
//在循环中使用,帮助你跳出或中止循环
public static int method2(){
int count = 0;
for (int i = 0; i < 10; i++) {
count++;
if(count==5){
return count ;
}
}
return count;
}
}
运行结果:
1 5
return有一个特性就是一旦调用return 那么就会直接结束当前方法的运行。
2.try,catch,finally的作用
在Java中有检查异常和非检查异常(运行时异常)两种异常:
运行时异常,编译时不被检查的异常,不需要强制捕获,编译也能通过,他们是RuntimeException的子类。检查异常,编译时被检测的异常,需要用try、catch对异常进行处理,编译才能通过。
try,catch,finally的用法:
try
{
//需要被检测的异常代码
}
catch(Exception e)
{
//异常处理,即处理异常的代码
}
finally
{
//一定会被执行的代码
}
3.return遇到try、catch、finally时会发生什么
上文中我们提到,一旦调用return 就会直接结束方法的运行,finally中的代码一定会执行,那么当我们在try{}代码块中return之后会发生什么?
package com.albertyy.other;
/*
* 微信公众号:AlbertYang
*/
public class AlbertTest {
public static void main(String[] args) {
System.out.println(method());
}
public static int method() {
int i = 1;
try {
i++;
System.out.println("try block, i = " + i);
return i;
} catch (Exception e) {
i++;
System.out.println("catch block i = " + i);
return i;
} finally {
i = 10;
System.out.println("finally block i = " + i);
}
}
}
运行结果:
try block, i = 2 finally block i = 10 2
结果和你想的一样吗?当try中带有return时,会先执行return前的代码,然后暂时保存需要return的信息,再执行finally中的代码,最后再通过return返回之前保存的信息。所以,这里方法返回的值是try中计算后的2,而非finally中计算后的10。
当finally中带有return的时候又会出现什么结果呢?
package com.albertyy.other;
/*
* 微信公众号:AlbertYang
*/
public class AlbertTest {
public static void main(String[] args) {
System.out.println(method());
}
public static int method() {
int i = 1;
try {
i++;
System.out.println("try block, i = " + i);
return i;
} catch (Exception e) {
i++;
System.out.println("catch block i = " + i);
return i;
} finally {
i = 10;
System.out.println("finally block i = " + i);
return i;
}
}
}
运行结果:
try block, i = 2 finally block i = 10 10
当finally中有return的时候,try中的return就会失效,在执行完finally的return之后,直接结束方法。这种写法,编译是可以编译通过的,但是编译器会给予警告,所以不推荐在finally中写return。
总结:
1.java的异常处理中,在不抛出异常的情况下,程序执行完try里面的代码块之后,该方法并不会立即结束,而是继续试图去寻找该方法有没有finally的代码块,如果没有finally代码块,整个方法在执行完try代码块后返回相应的值来结束整个方法。
2.如果有finally代码块,不管有没有异常,finally中的代码都会执行。当try、catch中有return时并没有返回运算之后的值,而是把值保存起来,继续执行finally中的代码,不管finally中对该值有没有做改变,返回的值都不会改变,依然返回保存起来的值。finally代码中最好不要包含return,程序会提前退出,也就是说返回的值不是try或catch中的值。
3.finally里的语句只有两种情况下,会不被执行。一种是,在try-catch语句之前,程序就结束了或者挂掉了。第二种是遇到System.exit();
正文结束
- 编程入门的姿势-5月8日微信群语音分享
- 性能测试必备监控技能jvm之jdk命令行工具篇16
- 性能测试必备监控技能MySQL篇15
- [快学Python3]Number(数字)
- [快学Python3]基础知识
- [快学Python3]开发工具
- [快学Python3]解析器
- [快学Python3]函数
- [快学Python3]循环控制
- [linux][kprobe]谁动了我的文件---使用kprobe找到目标进程
- [快学Python3]if条件控制
- codeforces 767A Snacktower(模拟)
- [快学Python3]Sets(集合)
- [nptl][rwlock]pthread rwlock原理分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android Q之气泡弹窗的实现示例
- Python with语句用法原理详解
- pytorch 计算ConvTranspose1d输出特征大小方式
- Keras中 ImageDataGenerator函数的参数用法
- CI框架网页缓存简单用法分析
- 掌握PHP垃圾回收机制详解
- PHP基于面向对象封装的分页类示例
- PHP获取对象属性的三种方法实例分析
- PHP7内核之Reference详解
- PHP基于PDO扩展操作mysql数据库示例
- php实现的PDO异常处理操作分析
- PHP yield关键字功能与用法分析
- php PDO属性设置与操作方法分析
- PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
- CI框架实现创建自定义类库的方法