如下两端代码片段分别是否可以通过编译?为什么? class Something { int i; public void doSomething() { System.out.println("i = " + i); } } class Something { final int i; public void doSomething() { System.out.println("i = " + i); } }
时间: 2023-07-15 14:14:04 浏览: 88
第一个代码片段可以通过编译,因为它定义了一个非 final 的实例变量 i,并在 doSomething 方法中使用了它。
第二个代码片段也可以通过编译,因为它定义了一个 final 的实例变量 i,并在 doSomething 方法中使用了它。但是需要注意的是,final 实例变量必须在声明时或构造函数中初始化,否则会编译错误。因此,下面的代码将无法通过编译:
```
class Something {
final int i;
public Something() {
// 编译错误:final 变量 i 未初始化
}
public void doSomething() {
System.out.println("i = " + i);
}
}
```
阅读全文