第7章测试

Java变量类型 - 局部变量、实例变量和类变量

测试说明

1
选择题
下列关于Java局部变量的描述,哪个是正确的?

解析

局部变量是在方法、构造方法或代码块内部声明的变量。与实例变量和类变量不同,局部变量没有默认初始值,必须在使用前显式初始化。局部变量的作用域仅限于声明它的方法或代码块,存储在栈内存中。

2
选择题
实例变量的默认值是什么?

解析

实例变量有默认初始值:整数类型(byte、short、int、long)默认为0,浮点类型(float、double)默认为0.0,字符类型(char)默认为'\u0000',布尔类型(boolean)默认为false,对象引用类型默认为null。

3
判断题
类变量(静态变量)属于类,所有对象实例共享同一个副本。

解析

正确。类变量使用static关键字声明,属于类而不是对象实例。无论创建多少个对象,类变量只有一个副本,所有实例共享这个副本。类变量在类加载时初始化,可以通过类名直接访问。

4
代码分析
分析以下代码,哪个变量是实例变量?
public class Example { static int classVar = 10; // 变量A private int instanceVar = 20; // 变量B public void method() { int localVar = 30; // 变量C final int CONSTANT = 40; // 变量D } }

解析

instanceVar是实例变量。它在类中但在方法外声明,没有static关键字。classVar是类变量(有static关键字),localVar和CONSTANT都是局部变量(在方法内声明)。

5
选择题
局部变量存储在哪个内存区域?

解析

局部变量存储在栈内存中。每个方法调用都会在栈中创建一个栈帧,局部变量就存储在这个栈帧中。方法执行完毕后,栈帧被销毁,局部变量也随之销毁。实例变量存储在堆内存中,类变量存储在方法区中。

6
判断题
实例变量可以通过类名直接访问。

解析

错误。实例变量属于对象实例,必须通过对象实例来访问,不能通过类名直接访问。只有类变量(静态变量)才能通过类名直接访问。例如:obj.instanceVar(正确),ClassName.instanceVar(错误)。

7
代码分析
以下代码的输出结果是什么?
public class Test { static int count = 0; public Test() { count++; } public static void main(String[] args) { Test t1 = new Test(); Test t2 = new Test(); System.out.println(count); } }

解析

输出结果是2。count是类变量(静态变量),所有实例共享。每次创建对象时,构造方法被调用,count++执行一次。创建两个对象后,count的值变为2。

8
选择题
关于变量的生命周期,下列说法正确的是?

解析

类变量的生命周期从类加载到程序结束,是最长的。局部变量的生命周期最短,仅在方法执行期间存在。实例变量在对象创建时创建,对象销毁时销毁。类变量在类加载时初始化,不是在对象创建时。

9
判断题
在静态方法中可以直接访问类变量,但不能直接访问实例变量。

解析

正确。静态方法属于类,不属于任何特定的对象实例。因此可以直接访问类变量(静态变量),但不能直接访问实例变量。如果要在静态方法中访问实例变量,必须先创建对象实例。

10
代码分析
以下代码中,哪一行会导致编译错误?
public class VariableTest { private int instanceVar = 10; public static void staticMethod() { int localVar = 20; // 第1行 System.out.println(localVar); // 第2行 System.out.println(instanceVar); // 第3行 VariableTest obj = new VariableTest(); // 第4行 System.out.println(obj.instanceVar); // 第5行 } }

解析

第3行会导致编译错误。在静态方法中不能直接访问实例变量instanceVar,因为静态方法属于类,而实例变量属于对象。第5行是正确的,因为通过对象实例obj来访问实例变量。

测试完成!

0
继续加油!

建议回顾相关知识点,加强练习。