args [0],args [1]是变量吗?

时间:2019-06-03 16:25:19

标签: java arrays string variables args

我有类似的代码:

public class Hi
{
  public static void main(String args[])
  {
    ...
  }
}

如果我输入以下命令“ java Hi String1 String2”,则表示有多少个对象。

正确答案:

对象:3:“ String1”对象,“ String2”对象,数组点由args组成。

变量:4:args,“ String1”,“ String2”,数组指向args。

我的问题是:

我是否可以将变量计数中的“ String1”和“ String2”视为args [0]和args [1]? (这意味着args [0]和args [1]是变量。)

如果代码是

int a[2]={0};

我知道有1个数组对象和2个变量(一个数组对象),但是由于Java中的String很特殊,我想知道我是否必须使用“ String1”和“ String2”,否则我可以使用args [0]和args [1]作为变量如下?

对象:3:“ String1”对象,“ String2”对象,数组点由args组成。

变量:4:args,args [0],args [1],由args组成的数组点。

1 个答案:

答案 0 :(得分:-1)

TL; DR 简短答案:是的,args[0]args[1]是变量。


根据JLS 4.12.3. Kinds of Variables,有8种变量。其中,您的代码使用其中的3个:

  
      
  1. 实例变量是在类声明中声明的字段,无需使用关键字static§8.3.1.1)。

         

    如果类T具有作为实例变量的字段a,那么将创建新的实例变量a并将其初始化为默认值(§4.12.5),作为类T或的每个新创建对象的一部分。 T(§8.1.4)的子类的任何类。在完成对对象变量(§12.6的所有必要定稿之后,如果不再引用该实例变量作为字段的对象,则该实例变量实际上将不复存在。

  2.   
  3. 数组组件是未命名的变量,每当创建一个新的数组对象(§4.12.5时,都会创建并初始化为默认值(§10 (Arrays)), §15.10.2)。当不再引用数组时,数组组件实际上将不复存在。

  4.   
  5. 方法参数§8.4.1)名称参数值传递给方法。

         

    对于方法声明中声明的每个参数,每次调用该方法时都会创建一个新的参数变量(§15.12)。使用方法调用中的相应参数值初始化新变量。当方法的主体执行完成时,方法参数实际上将不复存在。

  6.   

运行java Hi String1 String2会得到:

  • 3个对象:

    • String[2] (数组)
    • "String1" (字符串)
    • "String2" (字符串)
  • 4个变量 1

    • args (方法参数)
    • args.length (实例变量)
    • args[0] (数组组件)
    • args[1] (数组组件)

请注意,如果您创建一个String[2]且未为数组组件分配值(即,将它们保留为null),则只有1个对象,但仍有4个对象变量。

1)不计算String对象内部的私有字段(实例变量)。


int a[2]={0};是无效的代码,将无法编译。

使用初始化程序时,您无法指定数组大小,因为它在初始化程序中是隐含的。

此外,您应始终将[]数组声明为类型的一部分,而不是名称的一部分。指定名称的[]是从C语言继承的,不建议使用。

正确的声明是:

int[] a = { 0 };

哪个是

  • 1个对象:

    • int[1] (数组)
  • 3个变量:

    • a (局部变量,种类#8)
    • a.length (实例变量)
    • a[0] (数组组件)