在Java中使用构造函数的this()调用同一类中的另一个构造函数
测试代码的一小部分如下:在Java中使用构造函数的this()调用同一类中的另一个构造函数,java,constructor,Java,Constructor,测试代码的一小部分如下: class Teacher { private String title; String name = "A"; int age = 20; Teacher (String title) { //System.out.println(name); this(name,age,title); } Teacher (String name, int age, String title) {
class Teacher {
private String title;
String name = "A";
int age = 20;
Teacher (String title) {
//System.out.println(name);
this(name,age,title);
}
Teacher (String name, int age, String title) {
System.out.println("OK");
}
}
public class Test {
public static void main (String[] args) {
Teacher teacher1 = new Teacher("John");
Teacher teacher2 = new Teacher("Mike",25,"TA");
}
}
如上所述,我注释了
System.out.println(name)编译后,出现一个错误:在调用超类构造函数之前不能引用name(age)。
但是,我注释了这个(name,age,title)
,这意味着我只使用了System.out.println(name)代码>。错误消失了。因此,我认为名称
和年龄
已初始化,并获得值A
,20
。也就是说,这个(名字、年龄、头衔)
实际上是这个(“a”,20,“John”)
我不知道原理。需要您的帮助。Java文档中说
如果存在,则另一个构造函数的调用必须是构造函数中的第一行
Java文档说
如果存在,则另一个构造函数的调用必须是构造函数中的第一行
Java文档说
如果存在,则另一个构造函数的调用必须是构造函数中的第一行
Java文档说
如果存在,则另一个构造函数的调用必须是构造函数中的第一行
此/超级构造函数调用必须是链接构造函数调用时的第一条语句。有关详细信息,请参阅。此/super构造函数调用必须是链接构造函数调用时的第一条语句。有关详细信息,请参阅。此/super构造函数调用必须是链接构造函数调用时的第一条语句。有关详细信息,请参阅。此/super构造函数调用必须是链接构造函数调用时的第一条语句。有关详细信息,请参见。原则是
如果存在,则必须首先调用另一个构造函数
构造函数中的行
参考:
使用这个
关键字可以调用其他构造函数。
当您注释掉第一条语句时,构造函数调用成为第一行,这是合法的。原则是
如果存在,则必须首先调用另一个构造函数
构造函数中的行
参考:
使用这个
关键字可以调用其他构造函数。
当您注释掉第一条语句时,构造函数调用成为第一行,这是合法的。原则是
如果存在,则必须首先调用另一个构造函数
构造函数中的行
参考:
使用这个
关键字可以调用其他构造函数。
当您注释掉第一条语句时,构造函数调用成为第一行,这是合法的。原则是
如果存在,则必须首先调用另一个构造函数
构造函数中的行
参考:
使用这个
关键字可以调用其他构造函数。
当您注释掉第一条语句时,构造函数调用将成为第一行,这是合法的。调用this()
时,您无法访问name
和age
字段。这些字段尚未初始化。如果希望name默认为“A”,age为20,请直接将值作为参数输入this()
将编译以下类:
class Teacher {
private String title;
String name;
int age;
Teacher (String title) {
this("A",20,title);
}
Teacher (String name, int age, String title) {
this.name = name;
this.age = age;
System.out.println("OK");
}
}
调用this()
时,无法访问name
和age
字段。这些字段尚未初始化。如果希望name默认为“A”,age为20,请直接将值作为参数输入this()
将编译以下类:
class Teacher {
private String title;
String name;
int age;
Teacher (String title) {
this("A",20,title);
}
Teacher (String name, int age, String title) {
this.name = name;
this.age = age;
System.out.println("OK");
}
}
调用this()
时,无法访问name
和age
字段。这些字段尚未初始化。如果希望name默认为“A”,age为20,请直接将值作为参数输入this()
将编译以下类:
class Teacher {
private String title;
String name;
int age;
Teacher (String title) {
this("A",20,title);
}
Teacher (String name, int age, String title) {
this.name = name;
this.age = age;
System.out.println("OK");
}
}
调用this()
时,无法访问name
和age
字段。这些字段尚未初始化。如果希望name默认为“A”,age为20,请直接将值作为参数输入this()
将编译以下类:
class Teacher {
private String title;
String name;
int age;
Teacher (String title) {
this("A",20,title);
}
Teacher (String name, int age, String title) {
this.name = name;
this.age = age;
System.out.println("OK");
}
}
它可能与问题无关,但您应该将这两个构造函数声明为public
。重载时,您必须先调用构造函数,然后再调用任何其他构造函数。Wildnew Teacher(“John”)
将他的头衔设置为john而不是他的名字这可能与问题无关,但您应该将两个构造函数声明为public
。重载时,您必须先调用构造函数,然后再调用任何其他内容。是否新教师(“john”)
将他的头衔设置为john而不是他的名字这可能与问题无关,但您应该将两个构造函数声明为public
。重载时,您必须先调用构造函数,然后再调用任何其他内容。是否新教师(“john”)
将他的头衔设置为john而不是他的名字这可能与问题无关,但您应该将两个构造函数声明为public
。重载时,您必须先调用构造函数,然后再调用任何其他内容。是否新教师(“john”)代码>将他的标题设置为john而不是nameTHX,我认为这是因为您定义的每个类都继承自Object类。当我使用this()函数调用另一个构造函数时,该构造函数中的super(name,age)函数无法为var name执行,并且age尚未初始化。换句话说,在执行超类的构造函数之前,子类的变量不能被初始化,所以你不能称之为(名字,年龄,“教授”)。THX,我认为这是因为你定义的每个类都继承自对象类。当我使用this()函数调用另一个构造函数时,该构造函数中的super(name,age)函数不能为var name和age hav执行