Что означает метод this()?
Я столкнулся с этим блоком кода, и есть одна строка, в которой я не могу понять смысл или что он делает.
public Digraph(In in) {
this(in.readInt());
int E = in.readInt();
for (int i = 0; i < E; i++) {
int v = in.readInt();
int w = in.readInt();
addEdge(v, w);
}
}
Я понимаю, что this.method()
или this.variable
, но что такое this()
?
Ответы
Ответ 1
Это перегрузка конструктора:
public class Diagraph {
public Diagraph(int n) {
// Constructor code
}
public Digraph(In in) {
this(in.readInt()); // Calls the constructor above.
int E = in.readInt();
for (int i = 0; i < E; i++) {
int v = in.readInt();
int w = in.readInt();
addEdge(v, w);
}
}
}
Вы можете сказать, что этот код является конструктором, а не методом из-за отсутствия возвращаемого типа.
Это очень похоже на вызов super()
в первой строке конструктора для инициализации расширенного класса. Вы должны вызвать this()
(или любую другую перегрузку this()
) в первой строке вашего конструктора и тем самым избежать дублирования кода конструктора.
Вы также можете посмотреть этот пост: Перегрузка конструктора в Java - лучшая практика
Ответ 2
Используя эту функцию() как функцию, она по сути вызывает конструктор класса. Это позволяет использовать все общие инициализации в одном конструкторе и иметь специализации в других. Так, например, в этом фрагменте кода вызов this(in.readInt())
вызывает конструктор Digraph, который имеет один аргумент int.
Ответ 3
Этот фрагмент кода является конструктором.
Этот вызов this
вызывает другой конструктор того же класса
public App(int input) {
}
public App(String input) {
this(Integer.parseInt(input));
}
В приведенном выше примере мы имеем конструктор, который принимает int
и тот, который принимает String
. Конструктор, который принимает String
, преобразует String
в int
, а затем делегирует конструктору int
.
Обратите внимание, что вызов другого конструктора или конструктора суперкласса (super()
) должен быть первой строкой в конструкторе.
Возможно, просмотрите этот для более подробного объяснения перегрузки конструктора.
Ответ 4
Это почти то же самое
public class Test {
public Test(int i) { /*construct*/ }
public Test(int i, String s){ this(i); /*construct*/ }
}
Ответ 5
Другой конструктор класса Digraph с параметром int.
Digraph(int param) { /* */ }
Ответ 6
Вызов this
по существу вызывает класс Constructor.
Например, если вы что-то расширяете, чем с add(JComponent)
, вы можете сделать: this.add(JComponent).
Ответ 7
Перегрузка конструктора:
Пример:
public class Test{
Test(){
this(10); // calling constructor with one parameter
System.out.println("This is Default Constructor");
}
Test(int number1){
this(10,20); // calling constructor with two parameter
System.out.println("This is Parametrized Constructor with one argument "+number1);
}
Test(int number1,int number2){
System.out.println("This is Parametrized Constructor with two argument"+number1+" , "+number2);
}
public static void main(String args[]){
Test t = new Test();
// first default constructor,then constructor with 1 parameter , then constructor with 2 parameters will be called
}
}
Ответ 8
this();
- это конструктор, который используется для вызова другого конструктора в классе,
например: -
class A{
public A(int,int)
{ this(1.3,2.7);-->this will call default constructor
//code
}
public A()
{
//code
}
public A(float,float)
{ this();-->this will call default type constructor
//code
}
}
Примечание: Я не использовал конструктор this()
в конструкторе по умолчанию, потому что это приведет к состоянию взаимоблокировки.
Надеюсь, это поможет вам:)