我正在学习Java中的一些基本OOP概念。考虑以下代码片段:
class my_class{
int a;
public my_class() {
System.out.print(a+" ");
a = 10;
System.out.print(a);
}
}
class Main{
public static void main(String[] args) {
my_class my_object = new my_class();
}
}
以下代码的输出为:0 10
根据我的理解:
my_class
是类的名称my_object
是我正在创建的对象的引用new
运算符分配内存并返回存储在my_object
中的地址my_class()
是构造函数,它用默认值0初始化对象的字段,然后将其赋值为10
现在考虑代码:
class my_class{
final int a;
public my_class() {
a=10;
System.out.print(a);
}
}
class Main{
public static void main(String[] args) {
my_class my_object = new my_class();
}
}
根据我之前的理解,它应该创建my_object
,字段final int a
设置为默认值0,该值应该是不可更改的,并在a=10;
处标记错误,但它可以工作并打印输出:10
我哪里错了?
您可以初始化任何final
字段一次,在构造函数中(即每个构造函数一次(或在其声明中。
(值得注意的是,如果你想让构造函数的参数在最终变量的值中发挥作用,你必须在构造函数中初始化它——否则最终变量就没用了!(