Topic: 参数 "String[] args" 的问题

  Print this page

1.参数 "String[] args" 的问题 Copy to clipboard
Posted by: gleamyshadow
Posted on: 2006-06-05 22:31

public class HelloWorld{
public static void main(String[] args){
System.out.println("HelloWorld");
}
}
这个程序没什么问题吧,学过java的都看得懂,但是我一直不知道main方法为什么要这样定义,比如为什么一定要这个参数"String[] args",它起什么作用,请高手详细解释一下,很多书上面都没有说明这个问题

2.Re:参数 "String[] args" 的问题 [Re: gleamyshadow] Copy to clipboard
Posted by: wqq0712
Posted on: 2006-06-06 15:17

呵呵~那我从我这的参考书上摘抄下来给你参考参考哈~~
  由于JAVA虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public的,又因为JAVA虚拟机在执行MAIN()方法时不需要创建对象,所以该方法必须是static的,该方法接收一个string类型的数组参数,该数组中保持执行JAVA命令时传递给所运行的类的参数.

3.Re:参数 "String[] args" 的问题 [Re: gleamyshadow] Copy to clipboard
Posted by: gleamyshadow
Posted on: 2006-06-06 19:59

那main方法为什么需要这个数组参数,我不知道它起到一个什么作用

4.Re:参数 "String[] args" 的问题 [Re: gleamyshadow] Copy to clipboard
Posted by: Jcat
Posted on: 2006-06-06 21:30

main是程序的入口(准确的说,是application程序的),有的时候希望在执行该程序时,(动态的)带入一个或多个值,而不是写死在程序里,我想这就是这个数组参数存在的意义吧.

比如,你用过命令行吗?
Windows的DOS中
ping 123.0.0.1

Linux中
man ls

这里ping和man命令后面的参数就需要动态的给出.
(这个隐喻不甚严谨,不过还算形象.)
(上述两个命令跟Java没任何关系,不要误解了)

5.Re:参数 "String[] args" 的问题 [Re: Jcat] Copy to clipboard
Posted by: gleamyshadow
Posted on: 2006-06-07 22:10

Jcat wrote:
main是程序的入口(准确的说,是application程序的),有的时候希望在执行该程序时,(动态的)带入一个或多个值,而不是写死在程序里,我想这就是这个数组参数存在的意义吧.

比如,你用过命令行吗?
Windows的DOS中
ping 123.0.0.1

Linux中
man ls

这里ping和man命令后面的参数就需要动态的给出.
(这个隐喻不甚严谨,不过还算形象.)
(上述两个命令跟Java没任何关系,不要误解了)

但是为什么我们要用(String[] args)作为参数而不用别的,在程序中,我并没有发现她起到什么作用啊?

6.Re:参数 "String[] args" 的问题 [Re: gleamyshadow] Copy to clipboard
Posted by: cainiao025
Posted on: 2006-06-09 00:51

看看这个程序:
class Example
{
public static void main(String args[])
{
//直接从命令行接收参数赋予整数a,b;使a,b可以动态的被赋初值。
int a=Integer.parseInt(args[0]);
int b=Integer.parseInt(args[1]);
int s=a+b;
System.out.println("s="+s);
}
}
运行结果如下:
>javac Example.java
>java Example 4 5
s=9

7.Re:参数 "String[] args" 的问题 [Re: cainiao025] Copy to clipboard
Posted by: gleamyshadow
Posted on: 2006-06-09 03:03

cainiao025 wrote:
看看这个程序:
class Example
{
public static void main(String args[])
{
//直接从命令行接收参数赋予整数a,b;使a,b可以动态的被赋初值。
int a=Integer.parseInt(args[0]);
int b=Integer.parseInt(args[1]);
int s=a+b;
System.out.println("s="+s);
}
}
运行结果如下:
>javac Example.java
>java Example 4 5
s=9

看了这个例子,我更加模糊了,我从来没有在 java ****后面直接跟某个参数的,不知道那是什么意思?

8.Re:参数 "String[] args" 的问题 [Re: gleamyshadow] Copy to clipboard
Posted by: zcjl
Posted on: 2006-06-09 09:23

你应该用过类似
javac HelloWorld.java
这样的命令行吧?

这个语句中,javac是被执行的命令或程序,HelloWorld.java则叫做命令行参数
javac是已经编译好的,但是在运行它之前,无法确认它将被用来编译哪些文件。
有了命令行参数这个概念后,我们可以动态的把需要被编译的对象使用命令行参数的形式传递给javac程序,而main方法的String[] args参数,就是用来接收并存放这些命令行参数的,然后你可以在main方法内部通过args获取命令行参数

9.Re:参数 "String[] args" 的问题 [Re: gleamyshadow] Copy to clipboard
Posted by: Jcat
Posted on: 2006-06-09 14:57

用数组是为了可以接收多个参数;
用String数组是因为你在命令行输入的是字符串。(传入以后再把它转换为int什么的)

总之,就是约定啦,我还想问为什么main方法要叫main,而不叫base, primary, heading什么的。。。。

10.Re:参数 "String[] args" 的问题 [Re: gleamyshadow] Copy to clipboard
Posted by: gleamyshadow
Posted on: 2006-06-09 18:35

基本了解了,谢谢各位

11.Re:参数 "String[] args" 的问题 [Re: gleamyshadow] Copy to clipboard
Posted by: lisliefor
Posted on: 2006-06-09 20:46

花了好多时间啊!Smile

public class Print{
  int daynum;
  int week;
  
  public void DatePrint(String daynum,String week){
    this.daynum = Integer.parseInt(daynum);
    this.week = Integer.parseInt(week)+1; //因为周日为第一天
    if(this.daynum<0||this.daynum>31||this.week<0||this.week>7){
      System.out.println("daynum为输入月份的天数,week为该月第一天是星期几(周日week=0)!请输入有效数据!");
      return;
    }
    else{
      String a[] = {" "," "," "," "," "," "," "};
      System.out.println("Sun. Mon. Tue. Wed. Thu. Fri. sta.");
      int day = 1,j=this.week;
      System.out.print(a[this.week-1]);
      System.out.print(day);
      day++;
      while(day<this.daynum+1){
        j++;
        day++;
        if(j==1){
          System.out.print(" ");
          System.out.print(day);
        }
        else if(j==7){
          if(day<10){
            System.out.print(" ");
            System.out.print(day+"\n");
          }
          else{
            System.out.print(" ");
            System.out.print(day+"\n");
          }
          j=0;
        }
        else{
          if(day<10){
            System.out.print(" ");
            System.out.print(day);
          }
          else{
            System.out.print(" ");
            System.out.print(day);
          }
        }
      }
    }
  }
  public static void main(String args[]){
    Print pd = new Print();
    //pd.DatePrint(31+"",5+"");
    pd.DatePrint(args[0],args[1]);
  }
}

12.Re:参数 "String[] args" 的问题 [Re: gleamyshadow] Copy to clipboard
Posted by: lisliefor
Posted on: 2006-06-09 20:48

一个小bug,因为从9 到 10 ,由一个一位数字转两位数字,10前少一个空格,导致该行10后面的数字排列不整齐,不过下面还是整齐的。
不知道符合LZ的意思不?

13.Re:参数 "String[] args" 的问题 [Re: gleamyshadow] Copy to clipboard
Posted by: lisliefor
Posted on: 2006-06-09 20:50

汗~~帖子发错地方了!
LZ这是你另一个帖子“如何控制输出字符的位置 ”的回复!
Blush
天啦!我在干什么?!!!

14.Re:参数 "String[] args" 的问题 [Re: gleamyshadow] Copy to clipboard
Posted by: gleamyshadow
Posted on: 2006-06-09 22:06

没事,我看到了哈,谢了
但是这个题是在书上讲java.util.Calendar这个类后的一个练习题,好象你的程序中没有用到这个类哦,还有,你的程序我可以通过编译,运行时要出错啊,后来我又想了一下,自己另外写了一个,运行结果就是我想要的,另外还解决了你那个bug,你看一下咯
---------------------------------------------------------------------------------
import java.util.*;
class A1{
  public static void main(String[] args){
   GregorianCalendar gc=new GregorianCalendar();
   gc.set(2006,Calendar.JUNE,1);
   int a=gc.get(Calendar.DAY_OF_WEEK)-1;
   System.out.println(" <2006年6月>");
System.out.println("日 一 二 三 四 五 六 ");
   for(int i=0;i<a;i++){//定位第一天的显示位置
     System.out.print(" ");
   }
   System.out.print("1 ");
   for(int i=2;i<31;i++){
     gc.set(2006,Calendar.JUNE,i);
     int b=gc.get(Calendar.DAY_OF_WEEK)-1;
     int da=gc.get(Calendar.DATE);
     if(da<10){//当日期是单位数时,每个日期之间输入3个空格.
      if(b<6){
        System.out.print(da+" ");
      }
      else {
        System.out.println(da+" ");
      }
     }
     else{//当日期是双位数时,每个日期之间输入2个空格.
       if(b<6){
        System.out.print(da+" ");
      }
      else {
        System.out.println(da+" ");
      }
     }     
   }
  }
}


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923