основы Java о заключительном ключевом слове

Этот код будет обычно работать хорошо, но рассматривать проблему повторного использования кода.

Вы, возможно, записали некоторый фрагмент кода, который не освобождает выделенную память, он выполняется таким способом, которым тогда автоматически исправлена память. Кажется в порядке.

Тогда кто-то еще копирует Ваш отрывок в его проект таким способом, которым он выполняется одну тысячу раз в секунду. У того человека теперь есть огромная утечка памяти в его программе. Не очень хороший в целом, обычно фатальный для серверного приложения.

Повторное использование кода типично на предприятиях. Обычно компания владеет всем кодом, который производят ее сотрудники, и каждый отдел может снова использовать то, чем владеет компания. Таким образом путем писания такого "выглядящего словно невинно" кода Вы вызываете потенциальную головную боль другим людям. Это могло уволить Вас.

5
задан Abhishek Sanghvi 29 August 2009 в 14:29
поделиться

7 ответов

Безусловно! Ключевое слово final может применяться практически ко всему, в каждом случае означающее «вы больше не можете это менять».

Вот что это означает, когда применяется к ...

переменной : вы просто не можете присвоить переменной новое значение (конечно, превращая ее в константу )

a метод : Вы не можете повторно реализовать (т.е. переопределить) этот метод в подклассе

классе : Вы не можете определить подкласс

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

19
ответ дан 18 December 2019 в 06:23
поделиться

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

Из Спецификации языка Java, Третье издание , Раздел 8.4.3.3 :

Метод может быть объявлен окончательный предотвратить переопределение подклассов или скрывая это. Это ошибка времени компиляции попытаться отменить или скрыть финальный метод.

Дополнительную информацию см. на странице Написание окончательных классов и методов из Учебники по Java .

3
ответ дан 18 December 2019 в 06:23
поделиться

Да.

Вы можете сделать метод окончательным

public class A {
   public static final void f() {
      System.out.println("test");
   }
}

Обычно есть две причины для того, чтобы сделать метод окончательным

  1. Когда метод является окончательным, он «может» быть встроен.
  2. Когда метод является окончательным, его невозможно переопределить.
2
ответ дан 18 December 2019 в 06:23
поделиться

Конечно, посмотрите Последнее слово по последнему ключевому слову

public abstract class AbstractBase
{
    public final void performOperation()    // cannot be overridden
    {
        prepareForOperation();
        doPerformOperation();   
    }

    protected abstract void doPerformOperation();    // must override
}
0
ответ дан 18 December 2019 в 06:23
поделиться

Конечно, можно. Сделать невозможным отмену.

1
ответ дан 18 December 2019 в 06:23
поделиться

Да

Последний метод не может быть переопределен подклассами. Это часто используется для предотвращения изменения подклассами критического поведения класса.

0
ответ дан 18 December 2019 в 06:23
поделиться

В качестве примечания к другим ответам. Вы можете использовать final. На практике я редко вижу людей, использующих его, и я не уверен, почему.

Большая часть кода, который я пишу в наши дни, предназначена для многопоточных сред, и я стараюсь сделать класс final неизменяемым (если это значение class), чтобы он был потокобезопасным.

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

Если класс предназначен для наследования, вы должны содержать его в чистоте и небольшого размера, чтобы предотвратить нежелательные побочные эффекты. Все это зависит от того, пишете ли вы код для себя и своей команды или пишете для более широкой аудитории, т.е.

0
ответ дан 18 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: