Java构造器的理解
Posted ch42e
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java构造器的理解相关的知识,希望对你有一定的参考价值。
构造器的引入
在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化。创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器。从而保证了初始化的进行。
构造器的命名
- 所取得任何名字可能与类得某个成员名称相冲突
- 调用构造器是编译器得责任,所以必须让编译器知道应该调用哪个方法
Java构造器采用与类相同的名称
class Example{
public String var1;
public String var2;
// 默认构造器(无参构造器)
public Example(){}
}
构造器的形式
不接受任何参数的构造器叫做默认构造器。但是和其他方法一样,Java构造器也能够带有形参,以便指定如何创建对象。
class Example{
public String var1;
public String var2;
// 默认构造器(无参构造器)
public Example(){}
//自定义构造器(带有形参)
public Example(String var1,String vart2){
this.var1 = var1;
this.var2 = var2;
}
public static void main(String[] args){
Example example = new Example("参数1","参数2");
}
}
在上面的代码中,存在两个构造器(默认构造器和自定义构造器),因此我们可以使用new Example()
的方式来创建不带参数的Example对象,同时也可以使用new Example(var1,var2)
的方式来创建对象。
构造器有助于减少错误,并使得代码更容易阅读。从概念上来讲,“初始化”和“创建”是彼此独立的,但是在Java中,“初始化”和“创建”是捆绑在一起,二者不能分离。
构造器没有返回值,不会返回任何东西(new表达式确实返回了对新建对象的引用,但构造器本身并没有任何返回值)
this关键字
this关键字只能够在方法内部使用,表示对“调用方法的哪个对象”的引用。下面给出this关键字的6个用法:
- this可用于引用当前类的实例变量。
- this可用于调用当前类方法(隐式)
- this() 可用于调用当前类的构造函数
- this可以在方法调用中作为参数传递。
- this可以在构造函数调用中作为参数传递。
- this可用于从方法返回当前的类实例。
详细内容可参考链接3
super关键字
构造器是不能够被继承的,如果子类要调用父类中的构造器,那么就必须要用到super关键字了。
package chapter7;
class Example {
public String name;
//无参构造器
public Example(){
System.out.println("Example()");
}
//有参构造器
public Example(String name){
this.name = name;
System.out.println(name);
}
}
public class People extends Example{
public People(){
super();
}
public People(String name){
super(name);
}
public static void main(String[] args){
People people1 = new People();
People people2 = new People("yoloyanng");
}
}
/*
* Output:
* Example()
* yoloyanng
*/
在People类中的两个构造器中包含了super关键字,它们的作用是实例化父类中的构造器,加入到People中。并且super关键字只能够放在首行,而如果没有加上super关键字,编译器会自动加上。
更多用法:
- super可用于直接引用父类实例变量。
- super可用于直接调用父类方法。
- super() 可用于直接调用父类构造函数。
详细内容参考链接4
参考
《Java编程思想》(第四版)
链接1:https://www.cnblogs.com/grl214/p/5895854.html
链接2:https://blog.csdn.net/f381226200/article/details/88368446
链接3:https://www.javatpoint.com/this-keyword
链接4:https://www.javatpoint.com/super-keyword
以上是关于Java构造器的理解的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 中创建构造函数的代码片段或快捷方式
无法解析片段中的 ViewModelProvider 构造?
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段