如何在Java中正确使用参数?为什么它们有利?

时间:2010-03-06 17:15:29

标签: java parameters

以下是代码:

class Time {
public static void printTime (int hour, int minute) {
System.out.print (hour) ;
System.out.print (":") ;
System.out.print (minute) ; 
} 

public static void main (String[] args) {
hour = 11 ; 
minute = 30 ;
printTime () ; 

}
}

当我尝试编译时,这是终端所说的:

david-allenders-macbook-pro:~ davidallender$ Javac Time.java
Time.java:9: cannot find symbol
symbol  : variable hour
location: class Time
hour = 11 ; 
^
Time.java:10: cannot find symbol
symbol  : variable minute
location: class Time
minute = 30 ;
^
Time.java:11: printTime(int,int) in Time cannot be applied to ()
printTime () ; 
^
3 errors
david-allenders-macbook-pro:~ davidallender$ 

我正在学习,所以我真的不知道发生了什么。现在我在书中关于/ on / within / above / preposition(我不确定什么是正确的介词)方法的部分。

  • 参数有什么作用?
  • 为什么有用?
  • 我在上面的代码中做错了什么?
  • 错误消息的含义是什么?

3 个答案:

答案 0 :(得分:5)

参数提供了完成工作所需的方法信息。例如,找到数字的平方根的函数将该数字作为参数。

您需要传递参数以提供参数值。因此,您无需尝试在minute方法中设置hourmain,而是需要调用

printTime(11, 30);

作为一种元评论,这是你很早就会学到的东西 - 虽然像这样的网站可以帮助你解决具体问题,但你最好还是阅读关于Java的入门级书籍。如果您已经在阅读一本书但没有清楚地描述参数,那么您可能想考虑另外一本书:)

答案 1 :(得分:2)

这应该更好:

class Time {
public static void printTime (int hour, int minute) {
System.out.print (hour) ;
System.out.print (":") ;
System.out.print (minute) ; 
} 

public static void main (String[] args) {
int hour = 11 ; 
int minute = 30 ;
Time.printTime (hour, minute) ; 

}
}

糟糕的格式化。帮自己一个忙,并仔细考虑如何格式化代码。对于像这样的小例子来说并不重要,但如果你的抱负和计划增长,你就需要它。

我可能这样写:

package cruft;

import java.text.DecimalFormat;
import java.text.NumberFormat;

public class Time
{
    private static final NumberFormat DEFAULT_FORMAT = new DecimalFormat("00");
    private static final int DEFAULT_CAPACITY = 8;
    private static final char DEFAULT_DELIMITER = ':';

    private final int hour;
    private final int minute;
    private final int second;

    public Time()
    {
        this(0, 0, 0);
    }

    public Time(int hour)
    {
        this(hour, 0, 0);
    }

    public Time(int hour, int minute)
    {
        this(hour, minute, 0);
    }

    public Time(int hour, int minute, int second)
    {
        this.hour = hour;
        this.minute = minute;
        this.second = second;
    }

    public String toString()
    {
        StringBuilder builder = new StringBuilder(DEFAULT_CAPACITY);

        builder.append(DEFAULT_FORMAT.format(hour))
               .append(DEFAULT_DELIMITER)
               .append(DEFAULT_FORMAT.format(minute))
               .append(DEFAULT_DELIMITER)
               .append(DEFAULT_FORMAT.format(second));

        return builder.toString();
    }

    public static void main(String[] args)
    {
        Time time = new Time(11, 5);
        System.out.println(time);
    }
}

注意:一致的大括号放置,方法缩进等等。这就是我的意思。

答案 2 :(得分:1)

我认为你做错了一个主要的事情,应该特别指出的是你在没有定义类型的情况下声明参数。 Java以其静态冻结岩石类型系统而闻名,这意味着无论如何,您始终必须定义变量的类型。比较一下,在PHP中你可以用Java做$number = 1;,而不能用。{/ p>

作为原型,每个变量/参数声明都遵循[type] [name] = [possible default value];模式,例如int number = 1;。有效类型是基元(intdoublebytechar等),当然也包括StringCalendar等对象你可能正在使用的课程。

相同的静态适用于调用方法,您需要为每个方法显式提供具有正确类型的精确数量的参数,以便能够调用它们。 Java会在适用的情况下自动将某些原始值(例如int)转换为long,但通常在Java中,您将使用实际对象,并且只有在适用时才会对其进行下载。您无法以与C / C ++ / PHP相同的方式自动为方法参数提供默认值,即您无法执行此操作

public void callMe(int number = 911) { ... }

但你必须这样做

public void callMe() { callMe(911); }
public void callMe(int number) { ... }

获得相同的效果。

当然,即使是最基本的规则也存在例外,例如静态和动态类型之间的差异,满足适当数量的参数和默认值的方法,但您可以暂时忘记这些并首先关注基础知识。希望这对你有帮助!