Этот код будет обычно работать хорошо, но рассматривать проблему повторного использования кода.
Вы, возможно, записали некоторый фрагмент кода, который не освобождает выделенную память, он выполняется таким способом, которым тогда автоматически исправлена память. Кажется в порядке.
Тогда кто-то еще копирует Ваш отрывок в его проект таким способом, которым он выполняется одну тысячу раз в секунду. У того человека теперь есть огромная утечка памяти в его программе. Не очень хороший в целом, обычно фатальный для серверного приложения.
Повторное использование кода типично на предприятиях. Обычно компания владеет всем кодом, который производят ее сотрудники, и каждый отдел может снова использовать то, чем владеет компания. Таким образом путем писания такого "выглядящего словно невинно" кода Вы вызываете потенциальную головную боль другим людям. Это могло уволить Вас.
Безусловно! Ключевое слово final
может применяться практически ко всему, в каждом случае означающее «вы больше не можете это менять».
Вот что это означает, когда применяется к ...
переменной : вы просто не можете присвоить переменной новое значение (конечно, превращая ее в константу )
a метод : Вы не можете повторно реализовать (т.е. переопределить) этот метод в подклассе
классе : Вы не можете определить подкласс
В каждом случае мы просто указываем: как только эта вещь объявлено, это последнее значение (или реализация), который вы когда-либо увидите для него.
Да, можно объявить метод как final
. Это будет означать, что метод не может быть переопределен его подклассами.
Из Спецификации языка Java, Третье издание , Раздел 8.4.3.3 :
Метод может быть объявлен окончательный предотвратить переопределение подклассов или скрывая это. Это ошибка времени компиляции попытаться отменить или скрыть финальный метод.
Дополнительную информацию см. на странице Написание окончательных классов и методов из Учебники по Java .
Да.
Вы можете сделать метод окончательным
public class A {
public static final void f() {
System.out.println("test");
}
}
Обычно есть две причины для того, чтобы сделать метод окончательным
Конечно, посмотрите Последнее слово по последнему ключевому слову
public abstract class AbstractBase
{
public final void performOperation() // cannot be overridden
{
prepareForOperation();
doPerformOperation();
}
protected abstract void doPerformOperation(); // must override
}
Да
Последний метод не может быть переопределен подклассами. Это часто используется для предотвращения изменения подклассами критического поведения класса.
В качестве примечания к другим ответам. Вы можете использовать final. На практике я редко вижу людей, использующих его, и я не уверен, почему.
Большая часть кода, который я пишу в наши дни, предназначена для многопоточных сред, и я стараюсь сделать класс final неизменяемым (если это значение class), чтобы он был потокобезопасным.
Проблема с пометкой некоторых методов как final (а не других) заключается в том, что вы заявляете, что в этом методе есть что-то особенное, а в других нет ничего особенного. По моему опыту, люди редко имеют в виду именно это.
Если класс предназначен для наследования, вы должны содержать его в чистоте и небольшого размера, чтобы предотвратить нежелательные побочные эффекты. Все это зависит от того, пишете ли вы код для себя и своей команды или пишете для более широкой аудитории, т.е.