混淆的另一个常见原因是您不必声明参数类型。以下是错误的!
int hour = 11; int minute = 59; printTime(int hour, int minute); // WRONG!
在这种情况下,Java可以通过查看其声明来告知小时和分钟的类型。将它们作为参数传递时,不必包含该类型。正确的语法是
printTime(hour, minute)
以上是Green Tea Press的ThinkJava引用。我想知道:
不是查看方法声明,而是查看方法初始化,如示例或as-in:printTime(int hour, int minute);
。
答案 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
hour
和minute
的变量。
有什么不同之处在于,在上面的代码中,变量是在一步中声明和初始化的,但请注意:
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)
声明了两个名为int
和hour
的{{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需要表示其类成员身份。