我有类似的代码:
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组成的数组点。
答案 0 :(得分:-1)
TL; DR 简短答案:是的,args[0]
和args[1]
是变量。
根据JLS 4.12.3. Kinds of Variables,有8种变量。其中,您的代码使用其中的3个:
实例变量是在类声明中声明的字段,无需使用关键字
static
(§8.3.1.1)。如果类T具有作为实例变量的字段a,那么将创建新的实例变量a并将其初始化为默认值(§4.12.5),作为类T或的每个新创建对象的一部分。 T(§8.1.4)的子类的任何类。在完成对对象变量(§12.6的所有必要定稿之后,如果不再引用该实例变量作为字段的对象,则该实例变量实际上将不复存在。
数组组件是未命名的变量,每当创建一个新的数组对象(§4.12.5时,都会创建并初始化为默认值(§10 (Arrays)), §15.10.2)。当不再引用数组时,数组组件实际上将不复存在。
方法参数(§8.4.1)名称参数值传递给方法。
对于方法声明中声明的每个参数,每次调用该方法时都会创建一个新的参数变量(§15.12)。使用方法调用中的相应参数值初始化新变量。当方法的主体执行完成时,方法参数实际上将不复存在。
运行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]
(数组组件)