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之后语句不执行,直接跳到下次循环。
参考技术Ajava中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语句。
一种是返回参数所用的关键字,假如一个有返回值的方法执行完了之后需要返回一个参数,示例: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的作用?的主要内容,如果未能解决你的问题,请参考以下文章