Финальный и статический

Anonim

В математике и науке константа - это термин, который обозначает определенное значение, такое как «π», которое является практическим названием для числа 3.14159. Java имеет свои константы. Это переменные, которые под (а) не принадлежат ни одному объекту и под (б) не меняют свое значение после их установки. Статическое слово в объявлении переменной показывает, что переменная не принадлежит ни одному объекту. Существует аналогичное ключевое слово, в котором говорится, что значение переменной будет установлено только один раз и не изменится. Это ключевое слово final. Это ключевое слово не ограничено статическими переменными, но может использоваться с переменными экземпляра, локальными переменными и даже с переменными, которые являются методами параметров. Объявляя переменную как final, вы показываете всем, что переменная во время существования будет иметь такое же значение. Что еще более важно, компилятор обнаружит каждую попытку изменить значение так называемой переменной и сообщит об этом как ошибку. Что касается терминологии Java, переменная, объявленная как статическая и конечная, называется константой.

Что такое финал?

Последний модификатор может использоваться в нескольких местах на языке программирования Java. Здесь мы рассмотрим его наиболее распространенное использование. Последний модификатор может применяться к объявлению локальной переменной, аргументу функции и нестационарным или статическим переменным-членам. В этом контексте переменный модификатор преобразуется в константу. Переводчик перевода будет проверять, пытается ли какой-либо код изменить значение, и такие попытки будут помечены как ошибка. Вот пример.

конечное значение int = 17;

Статические переменные-члены с этим модификатором используются в качестве глобальных констант; например, в переменной java.lang.Math PI, указано точно

public static final double PI = 3.14159265358979323846;

Мы можем применить окончательный модификатор к объявлению функции. Функция, отмеченная финалистом, больше не может быть отменена - это ее окончательная реализация. Абстрактные методы не могут быть объявлены окончательными - тот факт, что они являются абстрактными, означает, что им не хватает реализации; это, конечно, не может быть их конечным состоянием. Вот пример.

public final int смыслLife () {

return 42;

}

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

публичный конечный класс Закрыто {

// …

}

Одним из примеров конечного класса является класс java.lang.String - он конечен, поэтому никто не может его наследовать и, таким образом, получить доступ к его переменным-членам.

Что такое Static?

Статические переменные не относятся к конкретному экземпляру класса. Статические переменные принадлежат самому классу, и в памяти есть только одно место, независимо от количества копий этого класса, созданных в памяти. Нестатические переменные относятся к образцам классов - каждый экземпляр класса имеет свою собственную копию таких переменных. Статические переменные относятся к классу - класс в памяти сохраняет значения таких переменных; поэтому все образцы классов видят один и тот же контент, поэтому мы можем рассматривать статические переменные, которые должны быть разделены между всеми размерами классов. Обновляя переменную значения, новое значение будет автоматически видимым для всех экземпляров этого класса. Статический фильтр может применяться к любому элементу, объявленному законом в классе. В случае членских переменных следствие состоит в том, что такие переменные-члены будут храниться в памяти только в одном месте. Что произойдет, если это метод? Объявляя метод как статический, сообщение одно и то же: соответствующий метод не относится к классам классов, а к самому классу. Следовательно, статические методы не получат скрытую ссылку на объект, по которому они вызывают вызов; в статических методах эта ссылка недоступна. Действительно, вызов статических методов в объекте одинаково запутан как обращение к статическим переменным-членам, ссылаясь на эту ссылку: в обоих случаях лучше просто написать имя класса, точки и имени вызывающего метода.

Разница между конечным и статическим

  1. переменная

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

  1. метод

Static - это метод, который является одним и тем же для каждого объекта данного класса - также называется членом класса, например. таков основной метод. Окончательный метод не может быть обработан в унаследованном классе.

  1. Учебный класс

Финал не может быть расширен, т. Е. Не позволяет подклассы. Static не относится к классу.

  1. Значение

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

Финал против Статичного: Сравнительная таблица

Резюме финального и статического

  • Ключевая работа static предоставляет доступ, даже если нет объекта (экземпляра). Выдающиеся классы объявляются через ключевое слово static. Если вы не хотите, чтобы значение каких-либо изменений в дальнейшем выполнялось в программе, или если вы хотите, чтобы компилятор проверял и запретил, вы можете изменить это обещание в финале. Для инициализации существует статический блок. Статический блок для инициализации объявляется как статический ключ перед скобками.Этот вид блока выполняется один раз, во время чтения классов и обычно инициализирует статические члены класса.