[关注]Thinking in java 习题中的几个小疑问……
1:
public class E04_DataOnly2 {
  int i;
  float f;
  boolean b;
  public static void main(String[] args) {
    E04_DataOnly2 d = new E04_DataOnly2();//这里不创建d而直接赋值i=47;f=1.1f;b=false;行不?
    d.i = 47;
    System.out.println("d.i = " + d.i);
    d.f = 1.1f;
    System.out.println("d.f = " + d.f);
    d.b = false;
    System.out.println("d.b = " + d.b);
  }

2:
public class E07_ShowArgs2 {
  public static void main(String[] args) {
    if(args.length < 3) {
      System.out.println("Need 3 arguments");
      System.exit(1);
    }
    System.out.println(args[0]);
    System.out.println(args[1]);
    System.out.println(args[2]);
  }
}见每个主运行程序上都有这句
public static void main(String[] args){……};
不过一直不太理解
想请问一下args[]数组是做什么用的?
还有
System.exit(1);是什么意思?
是不是程序的结束语句,然后把结果返回到操作系统中?不过(1)中的1是做什么的?3:public class E01_Precedence {
  static int a,
    x = 40,
    y = 60,
    z = 10;
  public static void main(String[] args) {
    a = x + y - 2/2 + z;
    System.out.println(a);
    a = x + (y - 2)/(2 + z);
    System.out.println(a);
  }

这里的x,y,z可以不用声明变量类型吗?

解决方案 »

  1.   

    int a, 注意看后面的逗号
      

  2.   

    1.不行,不创建对象i,f的内存还没分配呢.
    2.命令行参数,可以用 java 类名 参数,把参数放到args里.
    退出程序.
    3.不可以,java是强类型语言.
      

  3.   

    想请问一下args[]数组是做什么用的?这个是命令行的参数, 比如copy a b 其中的 a b 就是参数System.exit(1);是什么意思? 自己去看APIhttp://api.java2000.net/exit
      

  4.   

    对   a b都是args数组中的元素System.exit(1)是退出虚拟机,一般非零的状态码是异常退出
      

  5.   

    E04_DataOnly2 d = new E04_DataOnly2();//这里不创建d而直接赋值i=47;f=1.1f;b=false;行不? 不行,非静态变量不能在static的main()方法中引用。
    若变量前面加static就可以不创建d而直接赋值。over
      

  6.   

    嗯呵,谢谢啦,没注意……
    不过那个args[]数组还是不太明白:(
      

  7.   

    1.不行,不创建对象i,f的内存还没分配呢. //为啥?前面不是已经声明过变量的类型了吗?
    现在只要赋值不就是给变量i,f,b分配内存了吗?
    还是像5楼说的那样是因为非静态变量不能在static的main()方法中引用所以才必需要创建对像呢?
    2.命令行参数,可以用 java 类名 参数,把参数放到args里. 
    退出程序. 
    args[]是个命令行参数吗?一般主要做什么用的?它的那些参数又是干嘛用的?
    它不用说明它的参数都有哪些就可以随意用吗?
    就像它为啥可以直接写
        System.out.println(args[0]); 
        System.out.println(args[1]); 
        System.out.println(args[2]); 
    这里不是没说明0,1,2是args[]数组中的元素吗?
      

  8.   

    声明是声明,创建需要通过new来.
      

  9.   

    哦?那为啥可以直接用
    int i=47;
    float f=1.1f; 
    boolean b=false;
    这些不是基本类型的数据吗?
    应该可以不用创建对像的啊
      

  10.   

    不过那个args[]数组还是不太明白:这就是个 String数组名啊 就是个参数和其他函数中的参数都一样用,只不过大多人都只把他当规则用而已
    从形式上说,它只是函数的一个参数.但因为main函数是应用程序的入口.执行时可以在命令行中传进参数.例如:
    public class Example
    {
    public static void main(String[] args)
    {
    double n,sum=0.0;
    for(int i=0;i<args.length;i++)
    {
    sum=sum+Double.parseDouble(args[i] );
    }
    n=sum/args.length;
    System.out.println("平均数:"+n);
    }
    }
    编译后,在命令行中执行时输入:
    C:>java Example 10 20 30 40 50 
    输出:
    平均数:30
     
     
      

  11.   

    看这句:public static void main(String[] args)就可以知道,其实main函数也是一个静态函数,
    静态函数不能直接访问同一个类中的非静态成员和方法,只可以直接访问静态成员和方法,
    当你把那些成员变量设为静态成员时,就可以直接调用了;
    或者创建对象也可以调用.例如:你这样设置成员变量就可以不用对象了:
    static int i=47; 
    static float f=1.1f; 
    static boolean b=false; 
      

  12.   

    整理一下:
    1、如果还没有创建对象,那么对象中的变量或者方法是不能访问的。
    2、String[] args:表示的接收到的命令行参数,如果你不是用IDE运行,而是通过命令行如:java XXX aaa bbb,那么args[]就表示的是接收到的参数aaa和bbb;pbulic static void main(String[] args)象C的main()函数一样都是程序的入口函数;System.exit(int)表示退出程序,0为正常退出,1表示不正常退出。
    3、注意:通过逗号的方式可以同时声明多的变量。
      

  13.   

    3:public class E01_Precedence { 
      static int a, 
        x = 40, 
        y = 60, 
        z = 10; 
      public static void main(String[] args) { 
        a = x + y - 2/2 + z; 
        System.out.println(a); 
        a = x + (y - 2)/(2 + z); 
        System.out.println(a); 
      } 

    就这题有一点疑问了
    这里的a先后给赋值了两次
    a = x + y - 2/2 + z; 对
    a = x + (y - 2)/(2 + z); 的结果没影响吗?
      

  14.   

    http://api.java2000.net/ 很强大
      

  15.   

    1。main方法是一个静态的方法,是不能直接引用动态变量的,去看一下JAVA的类的使用那一章,肯定写有的。2。args[]就是为程序传入的参数,像楼上说的那样使用,如果你用DOS来运行你的程序就比较容易理解一点。