Я пойду, вы не знаете, как использовать ключевое слово final в Java.

Java

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

Я очень восхищаюсь некоторыми коллегами, они пишут сочинения по 40 символов, которые, на мой взгляд, почти невозможно закончить. Потому что я хочу ежедневное обновление, длинную статью из 10 000 слов, если я пойду оригинально, это займет как минимум неделю, а то и месяц.

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

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

Уже 9:30 вечера, а я еще не ушел с работы, потому что мне нужно исправить ошибку с Сяо Ван. Я заказал пиццу премиум-класса, и когда я хорошо ел с Сяо Ваном, он вдруг задал мне вопрос: «Босс, не могли бы вы подробно рассказать мне о последнем ключевом слове, я всегда чувствую, что недостаточно знаю о это ключевое слово. всеобъемлющее."

Внезапно мой гнев пришел, хотя Сяо Ван попросил очень скромное и смиренное отношение, но я не мог не закричать: «Черт, Сяо Ван, ты не знаешь, как использовать final, как я взял интервью в первое место? Вы вошли!"

Когда я злюсь и злюсь, у меня все еще есть принципы. После того, как я вернулся домой в 10:30, я решил написать статью для Сяо Вана, хорошо рассказать о последнем ключевом слове и надеюсь помочь большему количеству друзей.

несмотря на то чтонаследоватьЭто позволяет нам повторно использовать существующий код, но иногда по какой-то причине нам действительно нужно ограничить расширяемость, и ключевое слово final может нам в этом помочь.

01. выпускной класс

Если класс украшен ключевым словом final, он не может быть унаследован. Если вы внимательно посмотрите, в Java есть много конечных классов, таких как наиболее распространенный класс String.

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence,
               Constable, ConstantDesc {}

Почему класс String разработан как окончательный? Причин примерно три:

  • Чтобы реализовать пул строковых констант
  • для безопасности потоков
  • Для неизменности HashCode

Для более подробных причин вы можете проверить статью, которую я написал ранеестатья.

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

public final class Writer {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

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

Однако тот факт, что класс является окончательным, не означает, что объекты этого класса неизменны.

Writer writer = new Writer();
writer.setName("沉默王二");
System.out.println(writer.getName()); // 沉默王二

Значение по умолчанию для поля имени писателя равно null, но его можно изменить на «Silent King II» с помощью метода установки. То есть, если класс только final, то это еще не все условие неизменяемости.

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

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

02. окончательный метод

Метод, украшенный final, не может быть переопределен. Если мы проектируем класс и считаем, что некоторые методы не должны быть переопределены, мы должны разработать его как окончательный.

Примером может служить класс Thread, который сам по себе не является окончательным, а значит, мы можем его расширять, но егоisAlive()Метод окончательный:

public class Thread implements Runnable {
    public final native boolean isAlive();
}

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

Класс актера имеет окончательный методshow():

public class Actor {
    public final void show() {
        
    }
}

Когда мы пытаемся переопределить этот метод, возникает ошибка компиляции:

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

Класс финальный, и класс не финальный, но все его методы финальные, вдумайтесь, какая между ними разница?

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

03. конечная переменная

Переменные, украшенные final, не могут быть переназначены. Другими словами, после инициализации конечной переменной ее нельзя изменить. Меня раньше спрашивал друг, что такое эффективный финал и что такое финал, я также объяснял это в предыдущих статьях, так что вот адрес:

ITwanger.com/Java/2020/0…

1) Окончательно модифицированные базовые типы данных

Чтобы объявить конечную переменную типа int:

final int age = 18;

Попытался изменить его на 30, и компилятор разозлился:

2) Окончательные измененные ссылочные типы

Теперь есть обычный класс Pig, у которого есть имя поля:

public class Pig {
   private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Объявите окончательно оформленный объект Pig в тестовом классе:

 final Pig pig = new Pig();

Компилятор также разозлится, если попытается переназначить pig:

Но мы все еще можем изменить значения полей Pig:

final Pig pig = new Pig();
pig.setName("特立独行");
System.out.println(pig.getName()); // 特立独行

3) окончательные измененные поля

Окончательно измененные поля можно разделить на два типа, один статический, а другой не статический, следующим образом:

public class Pig {
   private final int age = 1;
   public static final double PRICE = 36.5;
}

Нестатическое конечное поле должно иметь значение по умолчанию, иначе компилятор предупредит, что оно не инициализировано:

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

  1. окончательные измененные параметры

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

public class ArgFinalTest {
    public void arg(final int age) {
    }

    public void arg1(final String name) {
    }
}

Если вы попытаетесь изменить его, компилятор выдаст следующую ошибку:

04. Резюме

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

Если вы считаете, что статья полезна для вас, пожалуйста, выполните поиск по запросу "Тихий король 2"Первый раз читаю, отвечаю"параллелизмСуществует также практика параллельного программирования на Java, переписанная Али Даниэлем, и вам больше не придется беспокоиться о трудностях интервьюера в этом отношении.

Эта статья была включена в GitHub,Портал~, а также полноценные тестовые сайты для интервью с крупными производителями Добро пожаловать в Star.

Я Тихий Король Эр, программист с красивой внешностью, но полагающийся на талант.Подпишитесь, чтобы повысить эффективность обучения, не забудьте три последовательных ах, лайкните, любимый, оставьте сообщение, я не выбираю, хи хи.