java中return的作用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中return的作用?相关的知识,希望对你有一定的参考价值。

Java中的return语句总是用在方法中,作为一个无条件的分支,无需判断条件即可发生。return语句主要有两个用途:一方面用来表示一个方法返回的值,另一方面是指它导致该方法退出,并返回那个值。

在返回类型为void的方法里面,有个隐含的return语句,因此,在void方法里面可以省略不写。用在非void返回值类型的方法中,return语句不但能返回基本类型,还可以返回包括用户自定义类在内的所有对象。

拓展资料:

Java中结束语句主要有四类:return,break,continue以及goto。但是goto不常用,所以不对此讨论。

return语句:是指结束该方法,继续执行方法后的语句。

break语句:是指在循环中直接退出循环语句(for,while,do-while,foreach),break之后的循环体里面的语句也执行。

continue语句:是指在循环中中断该次循环语句(for,while,do-while,foreach),本次循环体中的continue之后语句不执行,直接跳到下次循环。

参考技术A

java中return的作用如下:

根据《Java编程思想:第四版》4.5节中介绍:return语句作为一个无条件的分支,无需判断条件即可发生。return语句主要有两个用途:一方面用来表示一个方法返回的值(假定没有void返回值),另一方面是指它导致该方法退出,并返回那个值。

根据方法的定义,每一个方法都有返回类型,该类型可以是基本类型,也可以是对象类型,同时每个方法都必须有个结束标志,因此,return起到了这个作用。在返回类型为void的方法里面,有个隐含的return语句,因此,在void方法里面可以省略不写。

拓展资料:

一、return语句和其他控制结束语句的区别如下:

Java中结束语句主要有四类:return,break,continue以及goto。但是goto不常用,所有此文不对此讨论。

1、return语句:是指结束该方法,继续执行方法后的语句。

2、break语句:是指在循环中直接退出循环语句(for,while,do-while,foreach),break之后的循环体里面的语句也执行。

3、continue语句:是指在循环中中断该次循环语句(for,while,do-while,foreach),本次循环体中的continue之后语句不执行,直接跳到下次循环。

二、return在try-catch-finally语句中的使用,若在 try或catch语句里面有return语句,finally语句和return语句的执行顺序问题:

1、若有finally语句,则无论如何,都会执行该语句,在try或catch中的return语句会将它的返回值压入栈内,然后执行finally语句,当finally执行完成后,若finally语句里有return语句,则执行return语句并结束。

2、若finally没有return语句,则返回被保存的栈里的return语句,再执行。然而,在压栈时候,要注意压入栈内的是什么东西,是值本身还是引用,若是引用则引用的值会改变,若是变量值,则不会改变。

参考技术B Java中的return语句总是和方法有密切关系,return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句)。
以下是无返回值的情况:

public void test1() System.out.println("---------无返回值类型的return语句测试--------"); for (int i = 1; ; i++) if (i == 4) return; System.out.println("i = " + i);

当i=4时,循环结束..
return有一个特性就是一旦调用return 那么直接结束方法.
有如下例子:

public int locate() while (true)return 4;

以上代码是不会报错的,

public int locate() while (isTrue())return 4; boolean isTrue() return true;

这段代码却会报错, 这是因为编译器认为while语句有在任何情况下都能执行的能力,但是只在入参为true的情况下有该能力。JVM不知道当istrue为假的时候该怎么办,所以报错.
在看如下代码:

public int locate() while (isTrue())return 4; return 0; boolean isTrue() return true;

这段代码也不会报错,因为添加了return 0;虽然说JVM不知道当istrue为假的时候该怎么办,但是仍然会返回0值,方法就有了返回值.
参考技术C

根据《Java编程思想:第四版》4.5节中介绍:return语句作为一个无条件的分支,无需判断条件即可发生。return语句主要有两个用途:一方面用来表示一个方法返回的值(假定没有void返回值),另一方面是指它导致该方法退出,并返回那个值。根据方法的定义,每一个方法都有返回类型,该类型可以是基本类型,也可以是对象类型,同时每个方法都必须有个结束标志,因此,return起到了这个作用。在返回类型为void的方法里面,有个隐含的return语句,因此,在void方法里面可以省略不写。

return语句和其他控制结束语句的区别

Java中结束语句主要有四类:return,break,continue以及goto。但是goto不常用,所有此文不对此讨论。

    return语句:是指结束该方法,继续执行方法后的语句。

    break语句:是指在循环中直接退出循环语句(for,while,do-while,foreach),break之后的循环体里面的语句也执行。

    continue语句:是指在循环中中断该次循环语句(for,while,do-while,foreach),本次循环体中的continue之后语句不执行,直接跳到下次循环。

return在try-catch-finally语句中的使用

若有finally语句,则无论如何,都会执行该语句,在try或catch中的return语句会将它的返回值压入栈内,然后执行finally语句,当finally执行完成后,若finally语句里有return语句,则执行return语句并结束。若finally没有return语句,则返回被保存的栈里的return语句,再执行。然而,在压栈时候,要注意压入栈内的是什么东西,是值本身还是引用,若是引用则引用的值会改变,若是变量值,则不会改变。

return语句在try-catch-finally中使用情形:

    若try执行成功后返回,在try和catch里面都执行return语句,这样情况与4相同,但该方法更佳,因为,可以立刻查看出异常的抛出情况。

    若只需要在try和catch都执行后还需继续执行相关语句,则在try-catch所有语句后执行return语句。

    若catch执行后返回,则在catch和所有语句后执行return语句。

    若try执行成功后返回,则在try和全部语句后使用return语句。

参考技术D return的常用作用有以下两种
一种是返回参数所用的关键字,假如一个有返回值的方法执行完了之后需要返回一个参数,示例:public string functionTest()
String a = "abc";
return a;

那么这个方法被调用之后就会返回一个值为abc的字符串,string result = functionTest();

第二种用法是,代码执行到此处终止。
比如当代码执行到某个地方会出现几种结果,然后其中一种结果就不能执行后续代码,这时候在那里加上一个return就可以终止后面的代码执行。本回答被提问者采纳

在 Java 中,后自增运算符如何在 return 语句中起作用?

【中文标题】在 Java 中,后自增运算符如何在 return 语句中起作用?【英文标题】:In Java, how does a post increment operator act in a return statement? 【发布时间】:2010-10-13 20:57:34 【问题描述】:

鉴于以下代码,ixAdd 会按照您的预期执行吗? e.在自增之前返回 ix 的值,但在离开函数之前自增类成员?

class myCounter 
    private int _ix = 1;

    public int ixAdd()
    
        return _ix++;
    

我不太确定当程序离开函数的堆栈帧(或 Java 中的任何内容)时,通常的 post/pre 递增规则是否也适用于 return 语句。

【问题讨论】:

ehm.. 你的意思是,就像将上面的代码粘贴到我的编辑器中并运行它?我不知道,对不起。 :-p 我去给自己喝杯咖啡... 投票赞成关闭...我以为作者可以立即关闭它? 嘿,现在我知道我为什么不尝试了:得到 Jon Skeet 的答案。它实际上比问题更有用。 @PT 有趣的是,尝试一下会很容易:) 【参考方案1】:

关键部分是在计算表达式后立即发生后递增/递减。它不仅发生在返回发生之前 - 它发生在任何以后的表达式被评估之前。例如,假设您写道:

class myCounter 
    private int _ix = 1;

    public int ixAdd()
    
        return _ix++ + giveMeZero();
    

    public int giveMeZero()
    
        System.out.println(_ix);
        return 0;
    

这也会打印出递增的结果,因为递增发生在调用 giveMeZero() 之前。

【讨论】:

感谢乔恩的回答。正如 Paul Tomblin 指出的那样,在我的编辑器中输入代码而不是在帖子中也可以回答这个问题。但现在我得到的比我要求的要多。 @Jon:对于从 C 到 Java 的人(这将是很多人)来说,这是一件好事。作为一个长期使用 C 的长期 Java 用户,我不知道 Java 比 C 更清楚地定义了 ++ 的工作原理。我学会了避免从 C 中“聪明”++ 使用! 它不仅发生在返回发生之前,而且如果它是一个局部变量,return 语句不会返回增加的值。您的示例显示了一个全局变量。 @ernesto:没有任何区别:return 语句返回表达式的值,这将是预增量值。无论是使用局部变量还是字段,都是一样的。此处使用该字段来表明giveMeZero 方法观察到增加的值。【参考方案2】:

好吧,我们来看看字节码(使用javap -c <classname>自己看):

Compiled from "PostIncTest.java"
class myCounter extends java.lang.Object
myCounter();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   aload_0
   5:   iconst_1
   6:   putfield    #2; //Field _ix:I
   9:   return

public int ixAdd();
  Code:
   0:   aload_0
   1:   dup
   2:   getfield    #2; //Field _ix:I
   5:   dup_x1
   6:   iconst_1
   7:   iadd
   8:   putfield    #2; //Field _ix:I
   11:  ireturn


如您所见,ixAdd() 中的指令 6 和 7 在返回之前处理增量。因此,正如我们所料,减量运算符在用于 return 语句时确实有效。但是请注意,在这两个出现之前有一个dup 指令;增加的值(当然)不会反映在返回值中。

【讨论】:

【参考方案3】:

是的,确实如此。

但不要那样做,在表达式中有副作用是不好的风格。

【讨论】:

这里的副作用是有意为之的,我看不出它有什么害处。【参考方案4】:

是的,即使在退货声明中,通常的规则也适用于后期增量。基本上,它在底层会做的是将返回值存储到寄存器中,然后递增类成员,然后从方法返回。

你可以在a later answer看到这个显示字节码的问题。

【讨论】:

【参考方案5】:

它确实返回递增之前的值,然后递增_ix。因此,第一次在 myCounter 实例上调用 ixAdd 方法时,它将返回 1,第二次将返回 2,依此类推。

【讨论】:

以上是关于java中return的作用?的主要内容,如果未能解决你的问题,请参考以下文章

java中return的作用

java中return的用法

Java PreparedStatement RETURN_GENERATED_KEYS 不起作用

java中Method类有啥作用

函数中return的作用

在 if 语句中使用 return 时有啥作用?