ПредыдущийСтатья была о начале работы со Spring Boot, в результате некоторые читатели оставили сообщение о том, что Java еще не закончена, поэтому я на мгновение был ошеломлен. Затем эта статья продолжит работу над Java, открывая четвертый эпизод нашумевшей серии My Go: Вы пока не можете использовать это ключевое слово.
«Босс, не могли бы вы рассказать мне об этом ключевом слове подробнее, я всегда чувствую, что мое понимание этого ключевого слова недостаточно всестороннее.» Сяо Ван снова подошел ко мне, и его отношение было очень скромным и смиренным, но я все же выдержал это. Он не мог перестать кричать: «Я теряю это, Сяо Ван, ты не знаешь, как это использовать, как я вообще взял у тебя интервью!»
Сяо Ван испугался того, что я сказал, и быстро спрятался в своем посте, чтобы исправить ошибку. Что касается меня, то я работал сверхурочно и начал писать эту статью, я очень старался. В Java ключевое слово this относится к ссылке на текущий объект (чей метод вызывается), понимаете, ребята? Если вы не понимаете, давайте продолжим чтение.
После прочтения не понимаю, вы приходите забивать меня, я обещаю не отпор, они не сражаются лицом.
01. Устраните двусмысленность полей
Бьюсь об заклад, все читатели, мужчины и женщины, молодые и старые, должны знать это употребление, в конце концов, оно часто используется при написании методов построения. Кто не знает, идите сюда, и я пришлю вам красный конверт с копейкой, лишь бы у вас была толстая кожа.
public class Writer {
private int age;
private String name;
public Writer(int age, String name) {
this.age = age;
this.name = name;
}
}
Класс Writer имеет две переменные-члены, а именно age и name.При использовании параметризованного конструктора, если имя параметра и имя переменной-члена совпадают, необходимо использовать ключевое слово this для устранения неоднозначности: this.age относится к переменная-член, возраст Ссылается на параметры конструктора.
02. Другие конструкторы ссылочных классов
Когда класс имеет несколько конструкторов, и они пересекаются, вы можете использовать ключевое слово this для вызова разных конструкторов, тем самым уменьшая объем кода.
Например, для вызова параметризованного конструктора из конструктора без параметров:
public class Writer {
private int age;
private String name;
public Writer(int age, String name) {
this.age = age;
this.name = name;
}
public Writer() {
this(18, "沉默王二");
}
}
Вы также можете вызвать конструктор без параметров из параметризованного конструктора:
public class Writer {
private int age;
private String name;
public Writer(int age, String name) {
this();
this.age = age;
this.name = name;
}
public Writer() {
}
}
должны знать о том,this()
Должен быть первым оператором в конструкторе, иначе будет сообщено об ошибке.
03. Передать как параметр
В следующем примере есть конструктор без аргументов, который вызываетprint()
метод, параметр имеет только одно ключевое слово this.
public class ThisTest {
public ThisTest() {
print(this);
}
private void print(ThisTest thisTest) {
System.out.println("print " +thisTest);
}
public static void main(String[] args) {
ThisTest test = new ThisTest();
System.out.println("main " + test);
}
}
Давайте распечатаем и посмотрим результат:
print com.cmower.baeldung.this1.ThisTest@573fd745
main com.cmower.baeldung.this1.ThisTest@573fd745
Как видно из результатов, это то, что мыmain()
Объект ThisTest, созданный с использованием нового ключевого слова в методе.
04. Цепной вызов
Читатели, изучавшие JavaScript или jQuery, могут быть знакомы с цепочками вызовов, подобнымиa.b().c().d()
, как будто это можно было бы называть бесконечно.
В Java соответствующее имя собственное называется шаблоном Builder, давайте посмотрим на пример.
public class Writer {
private int age;
private String name;
private String bookName;
public Writer(WriterBuilder builder) {
this.age = builder.age;
this.name = builder.name;
this.bookName = builder.bookName;
}
public static class WriterBuilder {
public String bookName;
private int age;
private String name;
public WriterBuilder(int age, String name) {
this.age = age;
this.name = name;
}
public WriterBuilder writeBook(String bookName) {
this.bookName = bookName;
return this;
}
public Writer build() {
return new Writer(this);
}
}
}
Класс Writer имеет три переменных-члена, а именно age, name и bookName, а также конструктор, соответствующий трем из них.Параметром является внутренний статический класс WriterBuilder.
Внутренний класс WriterBuilder также имеет три переменных-члена, которые согласуются с классом Writer, с той разницей, что в конструкторе класса WriterBuilder присваиваются только возраст и имя, а другая переменная-член bookName передается через отдельный метод.writeBook()
Чтобы присвоить значение, обратите внимание, что возвращаемый тип этого метода — WriterBuilder, и, наконец, возвращает ключевое слово this, используя return.
Прошлойbuild()
Метод используется для создания объекта Writer, параметром является ключевое слово this, которое является текущим объектом WriterBuilder.
На этом этапе создание объекта Writer может быть выполнено в цепочке вызовов.
Writer writer = new Writer.WriterBuilder(18,"沉默王二")
.writeBook("《Web全栈开发进阶之路》")
.build();
05. Доступ к объекту внешнего класса во внутреннем классе
Честно говоря, с момента появления функционального программирования в Java 8 это редко используется для доступа к объектам внешнего класса во внутренних классах. Давайте посмотрим пример:
public class ThisInnerTest {
private String name;
class InnerClass {
public InnerClass() {
ThisInnerTest thisInnerTest = ThisInnerTest.this;
String outerName = thisInnerTest.name;
}
}
}
В конструкторе внутреннего класса InnerClass объект внешнего класса можно получить через внешний класс .this, а затем можно использовать переменные-члены внешнего класса, такие как имя.
06. О супер
Я изначально хотел написать отдельную статью по ключевому слову супер, но писать особо не о чем. По сути, ключевое слово this и ключевое слово super имеют много общего, поэтому давайте поговорим об этом в конце этой статьи.
Короче говоря, ключевое слово super используется для доступа к родительскому классу.
Сначала посмотрите на родительский класс:
public class SuperBase {
String message = "父类";
public SuperBase(String message) {
this.message = message;
}
public SuperBase() {
}
public void printMessage() {
System.out.println(message);
}
}
Давайте посмотрим на подклассы:
public class SuperSub extends SuperBase {
String message = "子类";
public SuperSub(String message) {
super(message);
}
public SuperSub() {
super.printMessage();
printMessage();
}
public void getParentMessage() {
System.out.println(super.message);
}
public void printMessage() {
System.out.println(message);
}
}
1) Super ключевое слово может быть использовано для доступа к конструктору родительского класса
Видите ли, подклассы могут передаватьсяsuper(message)
для вызова конструктора родительского класса. Теперь давайте создадим новый объект SuperSub и посмотрим, что получится на выходе:
SuperSub superSub = new SuperSub("子类的message");
Новое ключевое слово будет инициализировать сообщение родительского класса через ключевое слово super при вызове конструктора для создания объекта подкласса, поэтому в это время сообщение родительского класса будет выводить «сообщение подкласса».
2) ключевое слово super может обращаться к переменным родительского класса
В классе SuperSub в приведенном выше примереgetParentMessage()
пройти черезsuper.message
Переменное члена сообщения одинакового имени метода родительского класса.
3) Когда метод переопределен, ключевое слово Super может получить доступ к способу того же имени родительского класса
Класс SuperSub в приведенном выше примере имеет конструктор без параметров.SuperSub()
использовать вsuper.printMessage()
Вызывается одноименный метод родительского класса.
07. Резюме
Дорогие читатели, я должен был сказать это исчерпывающе, не так ли? Думаю, после прочтения этой статьи Сяо Ван обязательно поблагодарит меня за мой труд, ведь он хороший коллега, активный и старательный.
Если вы считаете, что статья полезна для вас, пожалуйста, выполните поиск по запросу "Тихий король 2"Первый раз читаю, отвечаю"параллелизмСуществует также практика параллельного программирования на Java, переписанная Али Даниэлем, и вам больше не придется беспокоиться о трудностях интервьюера в этом отношении.
Эта статья была включена в GitHub,Портал~, а также полноценные тестовые сайты для интервью с крупными производителями Добро пожаловать в Star.
Я Тихий Король Эр, программист с красивой внешностью, но полагающийся на талант.Подпишитесь, чтобы повысить эффективность обучения, не забудьте три последовательных ах, лайкните, любимый, оставьте сообщение, я не выбираю, хи хи.