java中的return关键字使用解读
return的作用
a.返回方法的返回值(运行结果)
具体表现: 返回不被void关键字修饰的方法的返回值
语法: return 返回值;
注意:返回值类型需要与方法名前面的数据类型保持一致
示例代码如下:
import java.util.Scanner; public class Practice { public static void main(String[] args) { int year=2020; if(isLeapYear(year)){ System.out.println(year+"是闰年"); }else{ System.out.println(year+"是平年"); } } //在isLeapYear是返回实参传过来的年是否是闰年的结果,若是,则返回true,否则返回false public static boolean isLeapYear(int year){ if(year%400==0||(year%4==0&&year%100!=0)){ return true; } return false; } }
示例代码截图如下所示:
b.结束当前方法
语法为: return;
必须要在方法体里头书写才会生效
示例代码如下所示:
public class Practice { public static void main(String[] args) { //当输入第10句坚持就是胜利时,就结束这个程序 // 此时我们可以在main方法里面使用return关键字 int i=0; while(true){ System.out.println("坚持就是胜利"+(++i)); if(i==10){ System.out.println("此时程序结束!!!"); return; } } } }
示例代码截图如下所示
return关键字常见问题
编译器如何判定非void修饰的方法的返回值是否合理???
1.核心判断依据
任意情况下该方法都有返回值,
2.例如如下所示代码
是会运行成功,还是会报错呢?
public class Practice { public static void main(String[] args) { System.out.println(test()); } public static int test(){ boolean flag=true; if(flag){ return 1; } } }
解答:在idea中编译通过不了,提示Missing return statement(没有返回语句)
原因如下:
- 编译器不知道flag的值,也就是说if语句在编译器眼中是可能运行也可能不运行
- 也就是说可能会有返回值,可能也没有返回值。
- 因此不符合任何条件下都有返回值这个要求,因此就会提示没有返回语句
3.那么如何解决这个问题呢?
3.1 第一种,{}里面(循环、分支啥的)的内容用变量去进行接收,然后返回变量的值
语法
public static 变量数据类型 test(){ 变量数据类型 变量名=默认值; boolean flag=true; if(flag){ 变量名=特定值; } return 变量名; }
对之前的错误代码进行改进的结果如下所示:
public class Practice { public static void main(String[] args) { System.out.println(test()); } public static int test(){ int result=55; //定义一个变量来接收返回的结果 boolean flag=true; if(flag){ result=100; } return result; } }
3.2 第二种,{}里面和外面都有返回值
public static 变量数据类型 test(){ boolean flag=true; if(flag){ return 数值1; } return 数值2; //数值1和数值2的数据类型应与变量数据类型保持一致 }
对之前的错误代码进行改进的结果如下所示:
public class Practice { public static void main(String[] args) { System.out.println(test()); } public static int test(){ //if里面外面均有返回值,此时编译器就不用担心有可能无返回值的情况了 boolean flag=true; if(flag){ return 100; } return 55; } }
return后面是否可以写其他语句???
分析
当return的作用为返回方法的运行结果时
以下代码是否会报错?
public class Practice { public static void main(String[] args) { System.out.println(test()); } public static int test(){ return 66; System.out.println("查看是否报错"); } } //此题会报错
答:
会报错,因为按照正常来说当return所在语句运行完成后,意味着该次方法调用语句完成,而return后面的语句压根就没有执行的可能。
因此在编译器编译的过程中,会报错,报错提示你应该把不可访问(多余)的语句给去掉。
当return的作用为结束当前方法时
以下代码是否会报错
public class Practice { public static void main(String[] args) { System.out.println("专注能有效提高做事效率!!!"); return; System.out.println("科学表明"); } }
答:
会报错,因为按照正常来说使用return关键字结束当前方法后,意味着该方法(紧邻着的)后面的语句不可能有机会去运行,因此编译器会给出错误提示Unreachable statement(不可访问的语句),因此此时return后面也不能写其他语句。
总结
无论是返回方法的运行结果还是结束当前方法,后面均不可以写其他语句
return所在语句后面不可以写其他语句。(其他语句和return在同一个{}里面的情况)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Mybatis-plus和Mybatis出现版本不兼容的问题解决
MyBatis-Plus 与 MyBatis 之间的兼容性问题通常是由于版本不匹配引起的,本文主要介绍了Mybatis-plus和Mybatis出现版本不兼容的问题解决,具有一定的参考价值,感兴趣的可以了解一下2024-08-08微服务SpringBoot整合Jasypt加密工具的场景分析
Jasypt是Java加密工具包,能支持对密码的哈希加密,对文本和二进制数据的对称加解密,还能集成SpringBoot项目对配置文件中的密钥进行加密存储,这篇文章主要介绍了微服务SpringBoot整合Jasypt加密工具,需要的朋友可以参考下2022-10-10Spring boot项目redisTemplate实现轻量级消息队列的方法
这篇文章主要给大家介绍了关于Spring boot项目redisTemplate实现轻量级消息队列的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧2019-04-04
最新评论