java中的return关键字使用解读

 更新时间:2023年08月01日 15:53:20   作者:SSS4362  
这篇文章主要介绍了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在同一个{}里面的情况)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java的string类为什么是不可变的

    Java的string类为什么是不可变的

    这篇文章主要介绍了Java的string类为什么是不可变的,总结了三个答案,需要的朋友可以参考下
    2014-04-04
  • maven加入spring框架的详细教程

    maven加入spring框架的详细教程

    这篇文章主要介绍了maven加入spring框架的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • RestTemplate报错400 Bad Request的解决方案

    RestTemplate报错400 Bad Request的解决方案

    在使用Spring Boot时,若直接通过@Autowired注入RestTemplate可能会遇到400BadRequest错误,原因在于Spring Boot官方文档指出,由于RestTemplate实例通常需要在使用前进行定制,因此Spring Boot不会自动配置单个RestTemplate Bean
    2024-11-11
  • Spring中的@ResponseStatus使用

    Spring中的@ResponseStatus使用

    这篇文章主要介绍了Spring中的@ResponseStatus使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Java实现解析JSON大文件JsonReader工具详解

    Java实现解析JSON大文件JsonReader工具详解

    这篇文章主要介绍了Java实现解析JSON大文件的工具JsonReader使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • 利用Java实现天气预报播报功能

    利用Java实现天气预报播报功能

    这篇文章主要为大家介绍了如何利用Java语言实现天气预报播报功能,文中的示例代码讲解详细,对我们学习Java有一定的帮助,需要的可以参考一下
    2022-06-06
  • IDEA必备开发神器之EasyCode

    IDEA必备开发神器之EasyCode

    对于java程序员来说,日常工作中就是crud的操作,每次都要搭建MVC三层,还是很繁琐,这里就出现了神器easycode的工具.可以快速生成代码.并且还可以自定义模板.需要的朋友可以参考下
    2021-05-05
  • springboot2.3之后hibernate-validator依赖缺失【踩坑】

    springboot2.3之后hibernate-validator依赖缺失【踩坑】

    这篇文章主要介绍了springboot2.3之后hibernate-validator依赖缺失【踩坑】,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java中的深拷贝和浅拷贝介绍

    Java中的深拷贝和浅拷贝介绍

    对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同类类型的对象中去。在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用对象的部分或全部 数据。Java中有三种类型的对象拷贝:浅拷贝(Shallow Copy)、深拷贝(Deep Copy)、延迟拷贝(Lazy Copy)
    2014-03-03
  • GraalVM native-image编译后quarkus的超音速启动

    GraalVM native-image编译后quarkus的超音速启动

    这篇文章主要介绍了经过GraalVM native-image编译后的quarkus,来带大家验证一下号称超音速亚原子的quarkus是否名副其实,有需要的朋友可以借鉴参考下,希望能够有所包帮助
    2022-02-02

最新评论