6

在过去的两天里,我一直在尝试学习基本的 Java 编程,但在查看以下代码时遇到了一个我无法解决的问题:

class DayCounter {
    public static void main(String[] arguments) {

        int yearIn = 2008;
        int monthIn = 1;
        if (arguments.length > 0)
            monthIn = Integer.parseInt(arguments[0]);
        if (arguments.length > 1)
            yearIn = Integer.parseInt(arguments[1]);
        System.out.println(monthIn + "/" + yearIn + " has "
            + countDays(monthIn, yearIn) + " days.");
    }
}

我看不懂这条线if (arguments.length > 0) 是什么arguments意思?价值从何而来?

4

8 回答 8

8

我无法理解“if (arguments.length > 0)”这行“参数”是什么意思?它的价值从何而来?

它来自方法声明:

public static void main(String[] arguments) {

这声明了一个名为arguments. 对于普通的方法调用,调用者指定参数,这成为参数的初始值。例如:

int foo(int x) {
    System.out.println(x);
}
...
foo(10);

这里,10 是方法的参数,所以它是参数的初始值x

main现在,在 Java 中调用的公共静态 void 方法是一个入口点- 所以当你运行时:

java MyClass x y z

JVM使用包含命令行参数main的数组调用您的方法- 在这里,它将是一个长度为 3 的数组,其值为“x”、“y”和“z”。

有关更多详细信息,请参阅 Java 教程的相关部分:

于 2012-10-08T12:10:21.087 回答
4

arguments是运行时提供给您的 java 程序的命令行选项。它们存储在一个数组中,因此调用arguments.length会为您的程序提供命令行输入的数量。

他们在执行时像这样传递

java program argument1, argument2, argument3

在这种情况下arguments.length,将返回 3,因为有 3 个命令行参数。

于 2012-10-08T12:09:06.133 回答
3

在这种情况下,参数是用于您在执行时作为输入提供的字符串数组的变量名称,

IE

java DayCounter 1 2010

在以下代码摘录中:

public static void main(String[] arguments)

String[]表示变量名称为 的字符串数组arguments。Java 使用此函数原型作为 main 作为默认值。请参阅此处获取教程:http ://docs.oracle.com/javase/tutorial/getStarted/application/index.html

因此,当您lengtharguments( arguments.length) 中引用时,您正在查看字符串数组的“内部”,以查找数组的长度(使用 Java 字符串的内置函数来执行此操作)

于 2012-10-08T12:19:02.693 回答
2

它们来自命令提示符。当你开始运行一个程序时,你可以说:

java program arg1 arg2 ...argN

args 紧跟在程序名称之后。

于 2012-10-08T12:09:02.620 回答
2

-通常参数和参数可以互换使用,但它们是不同的。

我将举一个例子来解释这一点:

public class Test{


   public void go(String s){


   }

   public static void main(String[] args){

      Test t = new Test();
      t.go("Hello");

    }

}

-在上面的代码变量中,该行s中的类型是.Stringpublic void go(String s)Parameter

-"Hello"行中字符串类型的ast.go("Hello")Argument.

-方法定义或声明中的元素是,方法调用中传递Parameters的元素是。Arguments

于 2012-10-08T12:32:55.357 回答
1

参数被传递给主方法

 public static void main(String[] arguments)

在这种情况下,它意味着可以传递给此方法的值数组。通常这是您从命令行或快捷方式传递给程序的参数,然后您可以在程序中使用它们来更改逻辑流程。

于 2012-10-08T12:09:18.340 回答
1

参数是可以在启动时传递给 Java 程序的参数列表。

if (arguments.length > 0) 检查是否提供了任何参数。

否则,您将尝试访问空数组并获取和索引越界异常。

还有很多教程,可以帮助你。

查看Oracle 的基本指南,这里是关于 CMD Line Arguments的。

于 2012-10-08T12:09:28.460 回答
1

首先了解手头代码的含义。它告诉您一年中给定月份的天数。所以很明显,当您运行代码时,您需要将年份值和月份值作为给定值。

在这种情况下,在代码执行期间提供的月份值和年份值成为参数。在这种情况下,“参数”一词被使用,但您可以使用 x 或 y 或 xyz 来命名变量,如您所知。

Java 接受参数作为字符串数组。因此,在将它们用作 Integer 之前,您需要解析它们,这就是上面代码中所做的。

例如

 class WelcomeYouself{

    public static void main(String[] args){ //Here insted of arguments,the word args is used. 

    System.out.println("Hello " + args[0]);
  }
}

现在,当您运行它时,您将自己的名字作为参数传递。

   java WelcomeYourself Feynman; 

 // This how you run or execute the java code passing your name as the "argument". Of course it is presumed you are Feynman.
于 2012-10-08T12:23:04.213 回答