Java构造器就是有这么简单,腾讯T3面试官透露

//输出

默认构造器

从这个例子我们看到了,构造器为 TestMain() ,创建对象时,会分配内存并调用对应的构造方法,可以看到输出结果为 默认构造器 ,它已经被正确地初始化了。

二、构造器命名规则

从上面那个例子中或许已经观察到了:类名和构造器名必须相同,所以”每个方法首字母小写“的编码风格并不适用于构造器。

三、注意事项

  • 构造器必须与主类同名

  • 构造器可以有参数

  • 构造器可以重载

  • 没有返回值

  • 不添加构造器编译器生成默认构造器

四、默认构造器

默认构造器(又名无参构造器)是没有形式参数的,它创建的是”默认对象“。举个例子:

public class TestMain {

//没有指定构造器,Java编译器会自动生成默认构造

public static void main(String[] args)

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

{

new TestMain();

}

}

//输出

new TestMain()创建了一个新对象,并调用了默认构造——虽然我们并没有主动定义它。Java规定了,如果没有构造会生成默认构造,如果存在了一个及以上的构造便不会自动生成。

public class TestMain {

TestMain(int i) {}

TestMain(float f) {}

public static void main(String[] args) {

TestMain t1 = new TestMain(); //会报错,没有对应的构造方法

TestMain t2 = new TestMain(1);

TestMain t3 = new TestMain(2.0f);

}

}

//输出

new TestMain()编译器会报错,因为我们没有定义对应的无参构造方法,编译器无法顺利创建对象。如果你没有定义构造器,编译器会认为”你需要一个构造器,我帮你造一个“;如果你自己写了一个构造器,编译器会认为”你已经有构造器了,你知道自己在做什么,我不帮你生成“。

五、构造方法重载

有默认无参构造,就有带参构造;有带参构造也就会发生方法重载。为了满足不同的初始化需求,我们通常会需要定义多个带参构造器,由于都是构造器,它们的名称必须相同,为了让方法名相同而参数不同的方法存在,我们就必须使用 方法重载 。它是构造器所必须的。

public class TestMain {

TestMain() {

System.out.println(“默认构造”);

}

TestMain(int i) {

System.out.println(“int带参构造”);

}

TestMain(float f) {

System.out.println(“float带参构造”);

}

public static void main(String[] args) {

TestMain t1 = new TestMain();

TestMain t2 = new TestMain(1);

TestMain t3 = new TestMain(2.0f);

}

}

//输出

默认构造

int带参构造

float带参构造

从上述代码中我们可以看到,类中定义了三个不同的构造方法,main方法中,在括号里传递不同的参数,编译器会根据参数的类型寻找对应的构造方法,从而初始化三个不同的对象,这就是构造方法的重载。

涉及基本类型的重载

在使用构造方法的重载时,我们经常会遇到将基本类型传递给重载方法时的一些问题。基本类型可以从一个 较小(窄类型) 类型自动提升(转型)为一个 较大(宽类型) 类型,当涉及到方法重载时便会造成一些混淆。举个例子:

public class TestMain {

TestMain(int i) {

System.out.println(“int带参构造”);

}

TestMain(long l) {

System.out.println(“long带参构造”);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值