Я изучаю некоторые базовые c OOP концепции в Java. Рассмотрим следующий фрагмент кода:
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
Где я иду не так?