Финал:
Окончание позволяет вам контролировать, можно ли перезаботиться или унаследовать ваши члены, методы или классы.
Когда вы определяете переменную в классе, добавьте конечное ключевое слово перед ней, это означает, что после инициализации эта переменная, ее нельзя изменить Их ссылки больше не могут быть изменены. Его инициализация может быть в двух местах, одно - его определение, а другое заключается в том, что в конструкторе можно выбрать только один из двух.
Следующая программа просто демонстрирует общее использование окончательного:
Общедоступный тест {final int t = 1;
Другое использование - определить параметры в методе как окончательные. . Если вам не нужно изменять переменную объекта в качестве параметра в методе, явно используется Final, что помешает вам непреднамеренно изменять и влиять на вызовный метод.
Кроме того, при использовании переменных параметров в методе во внутреннем классе эта переменная параметра должна быть объявлена окончательной, прежде чем ее можно будет использовать, как показано в следующем коде:
Общедоступный тест {void print (final String str) {class innertest {innertest () {System.out.println (str); {Test Test = New Test ();
Есть две причины, по которым окончательный метод объявляет метод окончательным. Класс унаследован от этого класса. Второй-это механизм, который позволяет компилятору конвертировать все вызовы в этот метод в встроенные (встроенные) вызовы. ., например, сохранение точек останова, нажатые стеки и т. Д., Это может повысить эффективность вашей программы. Таким образом, вы должны использовать окончательный, чтобы определить метод с осторожностью.
Окончательный класс, когда вы используете окончательный на классе, вам нужно тщательно думать, потому что окончательный класс не может быть унаследован кем -либо, что означает, что этот класс является классом листа в дереве наследования, и этот класс, дизайн считался идеальным без модификация или расширение. Для участников в последнем классе вы можете определить его как окончательный или не окончательный. Для методов, поскольку класс принадлежит финалу, они, естественно, становятся окончательными. Вы также можете явно добавить окончательный метод в последнем классе, но это, очевидно, не имеет смысла.
Окончательно:
Ключевое слово, наконец, является лучшим дополнением к модели обработки исключений Java. Наконец -то структура позволяет коду всегда выполнять независимо от того, происходит ли исключение. Используйте, наконец, для поддержания внутреннего состояния объекта и очистки ресурсов, не связанных с памятью. Без, наконец, ваш код будет сбит с толку. Например, следующий код иллюстрирует, как вы пишете код, чтобы бесплатно не предвещать ресурсы, не используя, наконец:
public void writefile (String filePath, String FileName, String Args) Throws ioException {fileWriter fw = new FileWriter (filePath + filename); ();
Этот код создает объект автора файла и вызывает метод записи. Перед тем, как выходить из метода, вы должны закрыть объект файла автора, чтобы избежать уязвимостей ресурсов. Чтобы выполнить эту задачу, мы называем Close at // 2, что является последним утверждением метода. Но что произойдет, если в блоке TRY происходит исключение? В этом случае близкий вызов в // 2 никогда не бывает. Поэтому вы должны поймать это исключение и вставить еще один вызов, чтобы закрыть в // 1, прежде чем переиздать это исключение. Это гарантирует, что объект FileWriter закрыт перед выходом из метода. Написание такого кода является как обременительным, так и склонным к ошибкам, но это необходимо без, наконец. Наконец, предыдущий код может быть переписан в следующую форму:
public void -file (String filePath, String FileName, String Args) Throws IOException {FileWriter FW = New FileWriter (FilePath + FileName); fw .close ();
Блок, наконец, гарантирует, что метод закрытия всегда выполняется независимо от того, выдается ли исключение в блоке TRY. Поэтому гарантируется, что метод закрытия всегда вызывается перед выходом из метода. Таким образом, вы можете быть уверены, что объект FileWriter закрыт и что вы не просочились.
Завершить:
Согласно спецификации языка Java, JVM гарантирует, что этот объект недоступен, прежде чем вызовать функцию завершения, но JVM не гарантирует, что эта функция будет вызвана. Кроме того, спецификация также гарантирует, что функция завершения выполняется не более одного раза.
Как правило, Finalize используется для выпуска некоторых ресурсов, которые нелегко контролировать и очень важны, например, некоторые операции ввода -вывода и соединения данных. Выпуск этих ресурсов очень критичен для всего приложения. В этом случае программисты должны в основном управлять этими ресурсами посредством самой программы (включая выпуск) и дополнять метод выпуска ресурсов с помощью функции завершения в качестве дополнения, чтобы сформировать механизм управления двойным страхованием, а не полагаться исключительно на завершение для выпуска ресурсов.
Суммировать
Окончательный - модификатор (ключевое слово) Если класс объявлен окончательным, это означает, что он не может получить новые подклассы и не может быть унаследован в качестве родительского класса. Поэтому класс не может быть объявлен как абстрактным, так и окончательным. Объявление переменных или методов как окончательные, может гарантировать, что они не изменяются во время использования. Переменные, объявленные окончательным, должны иметь начальное значение при объявлении, и могут быть прочитаны только в будущих ссылках и не могут быть изменены. Методы, объявленные как окончательные, также могут быть использованы только и не могут быть перегружены.
Наконец, предоставляется окончательный блок для выполнения любой операции по очистке при обработке исключения. Если исключение будет сброшено, будет выполнена соглашение о подходящем ущербе, и элемент управления введет наконец -то блок (если есть).
Завершить имя метода. Технология Java позволяет использовать метод infintize () для выполнения необходимой очистки, прежде чем сборщик мусора очистит объекты из памяти. Этот метод вызывается коллекционером мусора при определении того, что объект не ссылается. Это определено в классе объекта, поэтому все классы наследуют его. Подкласс переопределяет метод infintize () для организации системных ресурсов или выполнения других работ по очистке. Метод infintize () вызывается на объект до того, как сборщик мусора удалит его.