Инициализация объекта в Java - PullRequest
0 голосов
/ 29 марта 2020

Я изучаю некоторые базовые 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

Согласно моему пониманию:

  1. my_class это имя класса
  2. my_object это ссылка на объект, который я создаю
  3. new оператор выделяет память и возвращает ее адрес, который хранится в my_object
  4. 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

Где я иду не так?

1 Ответ

1 голос
/ 29 марта 2020

Вы можете инициализировать любое поле final один раз, , либо в конструкторе (то есть каждый конструктор один раз), либо в его объявлении.

(Примечательно, если вы хотите аргументы конструктора, которые играют роль в значении конечной переменной, вы должны инициализировать его в конструкторе - иначе конечные переменные будут бесполезны!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...