Java程序的输出 | Set 45(静态和实例变量)
先决条件:静态和实例变量
问题 1. 这个问题的输出是什么?
class Test1 {
int x = 10;
public static void main(String[] args)
{
Test1 t1 = new Test1();
Test1 t2 = new Test1();
t1.x = 20;
System.out.print(t1.x + " ");
System.out.println(t2.x);
}
}
选项
A) 10 10
乙) 20 20
C) 10 20
D) 20 10
Output: D
说明:实例变量是对象级变量意味着将为每个对象创建一个单独的实例变量副本。
问题 2. 这个问题的输出是什么?
class Test1 {
static int i = 1;
public static void main(String[] args)
{
for (int i = 1; i < 10; i++) {
i = i + 2;
System.out.print(i + " ");
}
}
}
选项
A) 3 6 9
B) 3 6 9 .... 27
C) 错误
D) 没有
Output: A
说明:这里的局部变量是在执行后打印的。如果我们要执行静态变量,那么我们写Test1.i或者我们写Test1 object.i。
问题 3. 这个问题的输出是什么?
class Test1 {
static int i = 1;
public static void main(String[] args)
{
int i = 1;
for (Test1.i = 1; Test1.i < 10; Test1.i++) {
i = i + 2;
System.out.print(i + " ");
}
}
}
选项
A) 1 3 9
B) 1 2 3 … 9
C) 3 5 7 9 11 13 15 17 19
D) 无
Output: C
说明:这里声明了变量的两个不同的 i 副本,一个是静态的,另一个是本地的。如果我们编写Test1.i,则执行静态变量,如果我们只编写i,则执行局部变量。
问题 4. 这个问题的输出是什么?
class Test1 {
static int i = 1;
public static void main(String[] args)
{
static int i = 1;
for (Test1.i = 1; Test1.i < 10; Test1.i++) {
i = i + 2;
System.out.print(i + " ");
}
}
}
选项
A) 错误
乙)1 3 9
C)3 5 7 9 11 13 15 17 19
D)1 2 3 … 9
Output: A
说明:我们不能在块内声明静态变量。如果我们在块内声明静态变量,那么我们将得到编译时错误:表达式的非法开始。
问题 5. 这个问题的输出是什么?
class Test1 {
public static void main(String[] args)
{
static int arr1[] = { 11, 22, 33 };
static int arr2[] = { 11, 22, 33, 44, 55 };
static int ptr[];
ptr = arr1;
arr1 = arr2;
arr2 = ptr;
System.out.print(arr1.length + " ");
System.out.println(arr2.length);
}
}
选项
A) 错误
乙)5 5
C)5 3
D)3 5
Output: A
说明:这里我们试图将数组声明为静态类型,但我们不能将本地数组声明为静态类型。如果我们尝试将局部变量声明为静态变量,则会得到错误:表达式的非法开始。