Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我能够调用非void函数而不使用java中的返回值?_Java_Function - Fatal编程技术网

为什么我能够调用非void函数而不使用java中的返回值?

为什么我能够调用非void函数而不使用java中的返回值?,java,function,Java,Function,我注意到,在java中,可以有如下语句: Math.random()没有任何错误。当一个值由一个函数返回,但没有以任何其他方式存储或使用时,我预计会出现错误。为什么这里没有错误? 要演示的代码段: static int calledFn() { return 500; } public static void main1() { calledFn(); } public static void main2(

我注意到,在java中,可以有如下语句:
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
s
500
是一种文字,它是一种表达式,但不是一种
语句表达式
。另一方面,
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();