Концепция создания статического финала класса в Java - PullRequest
0 голосов
/ 18 декабря 2018

Я новичок в Java, и на школьном уровне, у меня есть один запрос, может любой лучше объяснить мне его концепцию, что это значит и когда использовать и почему.

public class ParentClass {
    private static final ParentClass ourInstance=new ParentClass();
    private ArrayList<Integer> arr=new ArrayList<>();
    public static ParentClass getinstance() {
        return ourInstance;
    }
    private ParentClass() {

    }
    public void setList(ArrayList<Integer> al) {
        arr.addAll(al);
    }

    public ArrayList<Integer>  getList(){
        return arr;
    }

}

Я хочусосредоточиться на этой строке private static final ParentClass ourInstance=new ParentClass(); что это значит и когда мы должны объявить синтаксис следующим образом?Я знаю, что мы можем сделать класс Final, тогда ни один подкласс не сможет расширить конечный класс. В вышеприведенном коде способ объявления - это нечто иное, это меня не смутило.

Ответы [ 4 ]

0 голосов
/ 18 декабря 2018
private static final ParentClass ourInstance=new ParentClass();

Когда вы объявляете поле класса как окончательное, вы не можете переназначить его значение после инициализации.

Это означает, что вы не можете выполнить код ниже:

ParentClass otherInstance = new ParentClass();
ourInstance = otherInstance;   // Not allowed as ourInstance is final.

Но вы можете выполнить следующие операции, т.е. вы можете изменить поля нашего экземпляра, вызвав его методы установки: - например,

ourInstance.setSomeMethod(someValue);   // Allowed as you are not modifying object's reference but only its properties which are not final.
0 голосов
/ 18 декабря 2018

То, что вы делаете, это «Вы создаете константу класса», слово финал в этом контексте используется для создания константы.Кроме того, он статичен, поэтому нет необходимости создавать экземпляр для доступа к нему.

Вы создаете его экземпляр там, где он объявлен, потому что вы не можете сделать это снаружи, так как ваш конструктор является приватным.Так что доступ к экземпляру этого класса возможен только с помощью вызова getInstance, и этот уже созданный экземпляр доступен.Снаружи невозможно создать экземпляр.Таким образом, вы создаете синглтон, что означает, что в VM будет создан только один экземпляр этого класса.

0 голосов
/ 18 декабря 2018

Поскольку ключевое слово static включено, значение будет постоянным для всех объектов класса.Закрытое конечное значение переменной будет похоже на константу для каждого объекта.Вы можете ссылаться на java.lang.String. Статический элемент является одним и тем же членом во всех экземплярах класса и самого класса.

0 голосов
/ 18 декабря 2018

Я знаю, когда мы можем сделать класс Final, тогда ни один подкласс не сможет расширить конечный класс.

True.Но в вашем коде final применяется к полю, что означает, что это статическое поле ourInstance не будет изменено, т. Е. Не будет переназначено другому экземпляру.

Причинапочему static применяется здесь:

private static final ParentClass ourInstance = new ParentClass();

работает с

public static ParentClass getinstance() {
    return ourInstance;
}

private ParentClass() {
}

для реализации одноэлементного шаблона проектирования .

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