方法调用期间声明的参数?

时间:2014-05-30 23:12:54

标签: java arguments declaration

  

混淆的另一个常见原因是您不必声明参数类型。以下是错误的!

int hour = 11;
int minute = 59;
printTime(int hour, int minute); // WRONG!
     

在这种情况下,Java可以通过查看其声明来告知小时和分钟的类型。将它们作为参数传递时,不必包含该类型。正确的语法是

printTime(hour, minute)

以上是Green Tea Press的ThinkJava引用。我想知道:

  • 为什么作者说"必须"并且"没必要"?我尝试了这段代码,并且编译错误。
  • 作者不正确吗?他应该说" can&#t; t"并且"不可能"分别?
  • 如果作者不正确,请举例说明这一点吗?

强烈注意

不是查看方法声明,而是查看方法初始化,如示例或as-in:printTime(int hour, int minute);

4 个答案:

答案 0 :(得分:1)

在Java中,printTime(int hour, int minute);会产生语法错误 这意味着它是不可能的,除非你使用的编译器允许你做这样的愚蠢的事情。

答案 1 :(得分:1)

我害怕你误解了作者所说的话:

int hour = 11;
int minute = 59;
printTime(int hour, int minute); // WRONG!

在Java中,你必须指定你使用的每个变量的类型,但是你只需要这样做一次 - 当你最初声明时,这就是在上面代码的前两行中完成。

int hour = 11;
int minute = 59;
printTime(hour, minute); // RIGHT!

此后,每当Java遇到其中一个变量时,它会回顾其初始声明以确定其类型。这是自动完成的:每次使用时都不必重新指定变量的类型 - 事实上,正如您所发现的那样,不能,就像这样做因此会导致语法错误,从而阻止您的代码编译。

(请注意,这种范例在所有strongly typed种语言中都适用,其中Java是众多语言中的一种)。

我想知道你看过这样的事后是否感到困惑

void printTime(int hour, int minute){ 

}

哪个 正确。当然,关键区别在于我们在这里看method declaration:在这种情况下,(int hour, int minute)与上面代码的第三行不同,而是前两行: 在该方法的上下文中声明两个类型为int hourminute的变量。

有什么不同之处在于,在上面的代码中,变量是在一步中声明和初始化的,但请注意:

int hour; //variables DECLARED (given a name and type)
int minute; 
hour = 11; //variables INITIALIZED (set to an initial value) 
minute = 59;

也是有效的,这基本上是我们的方法声明中发生的事情:(int hour, int minute)声明了两个名为inthour的{​​{1}}个变量,但它们没有初始化,直到调用该方法,此时它们被设置为作为参数传入的值。

更新:

话虽这么说,我只是在这里猜测你的困惑的来源,最终是关于如何调用方法而不是如何声明它们。

minute

在您的评论和更新中,您提到了初始化方法所做的工作,我认为您认为这与初始化变量的方式类似 - 我想知道这是否可能是你困惑的根源:

你在这里初始化 {/ 1}}方法,调用 - 你是打电话吧。方法不会像变量那样在Java中“初始化”,它们会声明(见上文),然后它们会被使用,这就是我们在这里看到的情况。

我们鼓励您使用动词作为方法名称,因为方法执行事情 - 例如,printTime(int hour, int minute); // WRONG! printTime(hour, minute); // RIGHT! (可能)打印时间。 调用方法是说做那件事:你没有描述那个东西,你在初始化它时描述变量的方式 - 这就是你在方法声明中所做的)。当您调用方法时 - 当您致电printTime( )时 - 您说做事情 - 打印时间。你没有初始化方法,你正在使用它。

方法调用由其末尾的一组括号表示。有时这些括号是空的:例如,可能需要printTime方法来打印当前时间。其他时候,我们希望方法使用来做事情,我们通过将它们作为参数传递给它们:printTime(),可能会打印出{{1}表示的任何时间传递给它的{}}和printTime()个参数:printTime(int hour, int minute)应该打印hour

minute

也会这样做。将它们作为参数传递给方法是我们在Java中使用变量的众多方法之一。为了在任何中使用这些方法,首先必须声明它并给出一个类型。此后,它可以在任何中使用,而无需重复该类型。实际上,它必须,因为这样做每次都会导致语法错误。

(PS,我意识到我回答了你原来的问题,但你在评论中无意中问了我一个,我认为这很重要)

答案 2 :(得分:1)

作者说你在调用方法时不需要指定数据类型是正确的。 Java了解您已经为变量“hour”和“minute”声明了数据类型。

如果您不理解参数和参数之间的区别,可能会造成混淆。创建方法时,数据类型需要包含在参数中。

答案 3 :(得分:0)

本书中的示例是关于objects始终如何从Class派生的说明,因此在方法调用中使用object会带有Class& #34; membership",因此在方法调用中显式添加Class在语法上是错误的(在Java中不需要)。

但请注意,在定义方法的类中,参数DO需要表示其类成员身份。