为什么我能够调用非void函数而不使用java中的返回值?
我注意到,在java中,可以有如下语句:为什么我能够调用非void函数而不使用java中的返回值?,java,function,Java,Function,我注意到,在java中,可以有如下语句: Math.random()没有任何错误。当一个值由一个函数返回,但没有以任何其他方式存储或使用时,我预计会出现错误。为什么这里没有错误? 要演示的代码段: static int calledFn() { return 500; } public static void main1() { calledFn(); } public static void main2(
Math.random()代码>没有任何错误。当一个值由一个函数返回,但没有以任何其他方式存储或使用时,我预计会出现错误。为什么这里没有错误?
要演示的代码段:
static int calledFn()
{
return 500;
}
public static void main1()
{
calledFn();
}
public static void main2()
{
500;
}
在上面的代码中,函数main2()中出现了预期的错误,但main1()中没有错误。但是这两个函数不是做完全相同的事情吗?
我尝试过非void函数,它们是用户定义和预定义的。函数返回原语还是引用数据类型值也无关紧要。在这两种情况下都没有错误。在Java中,使用术语方法而不是函数
当调用一个非void的方法时,这意味着方法调用本身期望相应的方法返回一个值。只要调用的方法被编码为返回指定类型的变量,那么无论该值是否分配给变量,都将不可避免地返回该值(在本例中为int)。方法调用本身就是返回值所指向的。如果不是一个变量,这个返回值就不会被存储
满足编译器的最低要求是:methodcall->returnvalue
返回值是否用于赋值或比较是另一回事。不用赋值或使用值,只需调用方法本身就足够了。当您将一个变量分配给一个返回值时,可以将其视为返回值首先传递给方法调用,然后返回值传递给指定要分配的变量
method-call -> return value -> assignment
该方法的总体思路是“执行任务”。然后有一件事被称为应用程序设计,它决定了如何使用该任务?。这就是你的答案
明白了,如果没有,那么让我们举个例子
以下是一种进行划分的方法:-
int divide(int a, int b){
return a / b;
}
现在,这个函数的用途是什么,一般开发者会说它只用于两个数字的除法
但我也可以使用此方法生成一个除零异常
因此,我们可以为不同的目的使用一个方法。这是我认为如果我们不存储返回类型就不会出错的原因之一。在方法中,例如main1
和main2
,应该有语句
500
不是语句,而是Math.random()
和calledFn()代码>是语句
让我们看看“陈述”的确切构成:
需要注意的重要一点是,有一种语句称为“表达式语句”。让我们看看它的语法:
ExpressionStatement:
StatementExpression ;
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression
表达式statement
只是一个语句表达式
后跟一个代码>。请注意,并非所有表达式都是StatementExpression
s500
是一种文字,它是一种表达式,但不是一种语句表达式
。另一方面,Math.random()
和calledFn()
是方法调用,它们是StatementExpression
s
显示的所有语法都是从中摘录的
但是这两个函数不是做完全相同的事情吗
在句法上,它们不是。在main2
的方法体中,有一个文本后跟一个代码>,编译器不将其识别为语句。在main1
中,编译器将calledFn()
识别为方法调用,因此calledFn()代码>是一条语句
作为人类,我们倾向于在心里用方法调用返回的值“替换”方法调用,但编译器在解析代码时不会这样做。调用方法可能会产生副作用,因此调用方法而不存储结果可能有意义。召唤
Math.random();
double rand = Math.random();
而不仅仅是
double rand = Math.random();
提供不同分布的随机数
纯值<代码> 500代码/代码>没有存储没有意义,肯定是错误。
因为java不认为是错误。“这两个函数不是都是完全相同的吗?”“不,它们中的一个调用方法,方法调用是语句,另一个有自由浮动表达式,一般表达式不是语句,所以它不是有效的语法。忽略方法的返回值是完全有效的。因为编译器没有分析被调用的方法,它不知道调用在做什么,所以它必须允许它。100代码>行什么都不做,编译器知道这一点,所以它将其标记为错误,告诉您所做的事情没有任何意义,您应该修复它。除了Sweeper的答案之外,Java允许您在将方法调用用作语句时丢弃返回类型。这是因为一种方法可能有副作用。例如,从列表中删除指定的项,并返回该项是否存在于列表中以及是否随后已被删除。但有时,你只是不在乎该项目是否包含在列表中——它现在不存在才是最重要的。
Math.random();
double rand = Math.random();
double rand = Math.random();