以下代码的输出结果是什么?
public class Test {
public static final int VALUE = 10;
public static void main(String[] args) {
final int x;
if (VALUE > 5) {
x = 20;
} else {
x = 30;
}
System.out.println(x);
}
}
解析
正确答案是C。final局部变量可以延迟初始化,但只能赋值一次。由于VALUE=10>5,所以x被赋值为20。
以下代码中,哪一行会导致编译错误?
final class FinalClass {
public void method() {
System.out.println("Final class method");
}
}
class SubClass extends FinalClass { // 第7行
@Override
public void method() { // 第9行
System.out.println("Sub class method");
}
}
解析
正确答案是A。第7行会导致编译错误,因为final类不能被继承。一旦类被声明为final,就不能有子类。
以下代码的运行结果是什么?
public class Test {
public static void main(String[] args) {
final StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
System.out.println(sb.toString());
}
}
解析
正确答案是C。final修饰的引用变量不能重新赋值,但可以修改对象的内容。StringBuilder对象的内容可以被修改。