可能为一个类写了多个构造器,有时可能想在一个构造器中调用另一个构造器,以避免重复代码。可用this关键字做到这一点。
通常写this的时候,都是指“这个对象”或者“当前对象”,而且它本身表示对当前对象的引用。在构造器中,如果为this添加了参数列表,那么就有了不同的含义。这将产生对符合此参数列表的某个构造器的明确调用;这样,调用其他构造器就有了直接的途径:
public class Flower{
int petalCount=0;
String s="initial value";
Flower(int petals){
petalCount=petals;
System.out.print("Constructor w/int arg only,petalCount=.."+petalCount);
}
Flower(String ss){
System.out.print("Constructor w/String arg only,s="+ss);
s=ss;
}
Flower(String s,int petals){
this(petals);
this(s); //Can't call two!
this.s=s; //Another use of"this"
System.out.print("String&int args");
}
Flower(){
this("hi",47);
System.out.print("default constructor(no args)");
}
void printPetalCount(){
this(11); //Not inside non-constructor!
System.out.print("petalCount="+petalCount+"s="+s);
}
public static void main(String[]args){
Flower x=new Flower():
x.printPetalCount();
}
}
结果输出:
Constructor w/int arg only,petalCount=47
String & int args
default constructor(no args)
petalCount=47 s=hi
构造器Flower(String s,int petals)表明:尽管可以用this调用一个构造器,但却不能调用两个。此外,必须将构造器调用置于最起始处,否则编译器会报错。
这个例子也展示了this的另一种用法。由于参数s的名称和数据成员s的名字相同,所以会产生歧义。使用this.s来代表数据成员就能解决这个问题。在Java程序代码中经常出现这种写法。
printPetalCount()方法表明,除构造器之外,编译器禁止在其他任何方法中调用构造器。
分享到:
相关推荐
- 成员变量可以在构造器中初始化,确保每个新创建的对象都有正确的初始值。 - 另外,Java提供了`this`关键字,可以用来引用当前对象,常用于在构造器之间传递参数。例如: ```java class Person { String name;...
在无参数构造器中,我们使用this关键字调用了两个参数构造器,以便初始化对象的状态。在一个参数构造器中,我们也使用this关键字调用了两个参数构造器,以便减少代码的重复。 使用this关键字调用构造器可以减少代码...
构造器使用 super 去调用超类中的构造器。 五、编译器自动加入代码 编译器自动加入代码到构造器,对于这个,Java 程序员新手可能比较混淆。当我们写一个没有构造器的类,编译的时候,编译器会自动加上一个不带参数...
在构造器中,`this`可以用来调用同一类中具有不同参数列表的其他构造器,这有助于代码复用和简化初始化逻辑。 例如: ```java public class Platypus { String name; Platypus(String input) { name = input;...
- **使用`this`调用构造器**:在一个构造器内部,可以使用`this(参数列表)`来调用同一类中的另一个构造器。这种调用必须是构造器的第一条语句。 - **使用`super`调用父类构造器**:在一个构造器内部,可以使用`...
然而,在构造器中,“this”关键字用于调用同一类中的另一个构造器,且这种调用必须位于构造器的第一行,否则会导致编译错误。例如: ```java public class Platypus { String name; Platypus(String input) { ...
在JPA中,构造器的使用是实现对象映射和数据查询的一种高效方式,特别是对于复杂的查询场景,如多表查询。 构造器允许我们在创建实体类的实例时传入参数,这些参数可以用于初始化对象的状态。在JPA中,我们可以利用...
在`Testoo.java`文件中,很可能包含了测试这些概念的代码,通过创建不同类型的对象,调用构造器初始化它们,然后通过getter和setter方法来访问和修改成员变量的值。这样的测试有助于验证类的设计是否正确,以及继承...
在 `ThisTest(int i, String s)` 构造器中,`this(s)` 被用来调用另一个带字符串参数的构造器。这种方式允许我们在创建对象时简化代码,避免重复的初始化逻辑。需要注意的是,这种调用必须是构造器的第一行,并且一...
需要注意的是,在构造器中使用this调用另一个构造器时,调用语句必须位于构造器的第一行。这是因为在Java中,一个构造器只能调用一次其他构造器,并且调用必须是构造器中的第一个操作。 7. 关于this和super的区别 ...
`this`关键字在类的方法或构造器中使用时,它总是指向调用该方法或构造器的那个对象。这意味着`this`是当前对象的引用,可以帮助我们区分局部变量和实例变量。 2. **访问实例变量** 当类中存在同名的实例变量和...
在面向对象编程语言中,构造器(Constructor)是一种特殊的方法,主要用于初始化新创建的对象。它与类同名,并且没有返回值类型(即使是`void`也不行)。构造器在创建对象时被调用,确保对象状态的有效性和完整性。 ...
在`ThisTest`类的`ThisTest(int i, String s)`构造器中,`this(s)`调用了带有字符串参数的构造器,而`this.i = i++;`则初始化实例变量`i`。需要注意的是,构造器之间的调用必须作为构造器的第一行,并且一个构造器...
1. **基类构造器的调用**:如果类A继承自类B,那么在类A的构造函数执行之前,会先调用类B的构造函数。这是为了确保基类的部分先得到初始化。 2. **成员变量构造器的调用**:接着,按照声明的顺序,类A中每个成员...
标题中的“spring介绍(set和构造器注入)”是指在Spring框架中两种主要的依赖注入(Dependency Injection,简称DI)方式:setter注入和构造器注入。在Spring框架中,DI是一种核心特性,它允许我们解耦组件之间的关系...
总结来说,"面向对象-构造函数-调用&内存图解"涵盖了构造函数在对象创建过程中的角色,以及构造函数调用如何影响内存分配和对象实例化。理解这些概念对于编写高效、健壮的面向对象代码至关重要,特别是在处理大量...
1. 实例方法或构造器中使用当前对象的成员: 当在方法或构造器内部需要访问类的成员变量或方法时,可以使用`this`关键字。虽然通常情况下可以省略`this`,但在变量名与形参名相同的情况下,`this`是必要的,以区分...
也就是说,在一个实例方法或构造器中,`this`代表调用该方法或构造器的对象本身。这使得我们可以在方法内部引用该对象的成员变量或调用其方法。 #### `this`的使用场合 ##### 1. 访问当前对象的数据成员 当我们...
当创建一个对象时,如果没有显式调用构造器,那么就会自动使用默认构造器。 2. **作用**: - **创建对象**:与`new`关键字一起使用,构造器负责实例化对象。 - **初始化属性**:构造器允许我们在创建对象的同时为...
- **引用当前对象的属性**:可以在方法或构造器中使用`this`来引用当前对象的属性。 ```java public class Person { private String name; public void setName(String name) { this.name = name; // 使用this...