• 解析java中的return关键字


    解析java中的return关键字

    return的作用

    a.返回方法的返回值(运行结果)

    具体表现: 返回不被void关键字修饰的方法的返回值

    语法: return 返回值;

    注意:返回值类型需要与方法名前面的数据类型保持一致

    示例代码如下:

    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;
        }
    
    }
    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;
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    示例代码截图如下所示:
    在这里插入图片描述

    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;
               }
           }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    示例代码截图如下所示
    在这里插入图片描述

    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;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    解答:在idea中编译通过不了,提示Missing return statement(没有返回语句)

    原因如下:

    编译器不知道flag的值,也就是说if语句在编译器眼中是可能运行也可能不运行

    ​ 也就是说可能会有返回值,可能也没有返回值。

    因此不符合任何条件下都有返回值这个要求,因此就会提示没有返回语句

    3.那么如何解决这个问题呢?

    3.1 第一种,{}里面(循环、分支啥的)的内容用变量去进行接收,然后返回变量的值

    语法

    public static 变量数据类型 test(){
      变量数据类型 变量名=默认值;
      boolean flag=true;
      if(flag){
        变量名=特定值;
      }
      return 变量名;  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    对之前的错误代码进行改进的结果如下所示:

    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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    3.2 第二种,{}里面和外面都有返回值
    public static 变量数据类型 test(){
      boolean flag=true;
      if(flag){
       return 数值1;
      }
      return 数值2;  
      //数值1和数值2的数据类型应与变量数据类型保持一致
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    对之前的错误代码进行改进的结果如下所示:

    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;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    return后面是否可以写其他语句???

    分析

    当return的作用为返回方法的运行结果时

    以下代码是否会报错?

    public class Practice {
        public static void main(String[] args) {
            System.out.println(test());
        }
        public static int test(){
            return 66;
            System.out.println("查看是否报错");
        }
    }
    //此题会报错
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    答:会报错,因为按照正常来说当return所在语句运行完成后,意味着该次方法调用语句完成,而return后面的语句压根就没有执行的可能。因此在编译器编译的过程中,会报错,报错提示你应该把不可访问(多余)的语句给去掉。

    当return的作用为结束当前方法时

    以下代码是否会报错

    public class Practice {
        public static void main(String[] args) {
            System.out.println("专注能有效提高做事效率!!!");
            return;
            System.out.println("科学表明");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    答:会报错,因为按照正常来说使用return关键字结束当前方法后,意味着该方法(紧邻着的)后面的语句不可能有机会去运行,因此编译器会给出错误提示Unreachable statement(不可访问的语句),因此此时return后面也不能写其他语句。

    总结

    无论是返回方法的运行结果还是结束当前方法,后面均不可以写其他语句

    return所在语句后面不可以写其他语句。(其他语句和return在同一个{}里面的情况)

  • 相关阅读:
    解读 Servlet 源码:GenericServlet,ServletConfig,ServletContext
    机器学习:在线学习和离线学习区别
    HTML入门基础标签(结构标签,文本标签,特殊字符转义标签,多媒体标签)
    【常用代码15】文字单词超出强制分割换行,word-break: break-all;和word-wrap: break-word;的区别
    〖Python 数据库开发实战 - MongoDB篇①〗- MongoDB数据库的介绍与安装
    行秋的Buffer
    BS 476-4 建筑材料不燃性检测
    GDAL获取Hadoop hdfs tif文件信息(java)
    Ubuntu安装grafana并配置influxdb数据源
    Elasticsearch 保姆级入门篇
  • 原文地址:https://blog.csdn.net/SSS4362/article/details/125623550