Hello,大家好!我是小米,今天继续来聊面试中的高频考点!今天的主题是构造方法(Constructor),也就是创建对象时自动调用的方法。这个知识点看似简单,但却容易被忽略或误解。在面试中,尤其在Java语言的面试里,构造方法的一些细节可能会成为小伙伴们的绊脚石。所以,今天就带大家详细了解一下构造方法的几个关键知识点~
什么是构造方法?
在Java中,构造方法是一个特殊的方法,它的主要作用就是在创建对象的时候初始化对象的状态。构造方法的名字和类名相同,没有返回值类型。无论是有参构造还是无参构造,Java在新对象创建时会自动调用构造方法,这也是构造方法的核心特点之一。
举个栗子
在这里,Person类中定义了一个构造方法Person(String name, int age)。每当我们创建一个Person类的实例时,这个构造方法就会被调用,初始化name和age。
使用的时候可以这样:
默认构造方法
默认构造方法是指没有参数的构造方法。当我们没有显式定义任何构造方法时,Java会默认提供一个无参的构造方法。这也是为什么在一些没有构造方法的类中依然可以创建对象的原因。
默认构造方法的规则
只有当类中没有显性声明任何构造方法时,Java才会提供默认构造方法。如果我们在类中已经定义了构造方法,无论是有参的还是无参的,Java将不再自动生成默认构造方法。如果仍想要无参的构造方法,就得自己显式定义一个。
例如:
在这个例子中,Dog类中已经定义了两个构造方法,一个带参数,一个不带参数。因为定义了构造方法,所以Java不会自动生成默认构造方法。
面试小陷阱!
一个常见面试陷阱是这样的:
如果我们在Cat类中定义了一个带参构造方法Cat(String name),想再用无参构造方法创建实例时:
上面会报错!这是因为一旦定义了带参数的构造方法,Java就不会自动提供无参的默认构造方法了。因此,如果需要无参构造方法,记得手动添加:
构造方法的重载
构造方法是可以重载的,也就是说,我们可以在一个类中定义多个构造方法,但这些构造方法的参数列表必须不同。这是为了让对象在初始化时可以接收不同的参数组合,非常灵活。
重载构造方法的示例
在这里,Car类中定义了四个构造方法,可以根据不同的参数需求初始化Car对象:
面试思考点
重载构造方法不仅可以让代码更灵活,还让对象的创建变得更加直观和易于理解。但要注意避免过多的重载构造方法,否则代码可能会变得复杂难懂。
构造方法的细节
1. 构造方法没有返回值
这是构造方法和普通方法最大的区别之一。构造方法没有返回类型,也不能使用void关键字。任何在构造方法中的return语句都只是用于提前结束方法的执行,并不会返回任何值。
2. 构造方法不能被继承
构造方法是不能被继承的,但子类在实例化时会隐式调用父类的构造方法。Java中的每一个构造方法都会调用父类的构造方法,直接或间接地调用Object类的构造方法。
如果没有使用super关键字调用父类的构造方法,Java会默认在构造方法的第一行加上super(),调用父类的无参构造方法。
3. 构造方法的执行顺序
当我们创建一个类的对象时,构造方法的执行顺序从父类到子类,自上而下执行:
总结一下~
- 默认构造方法:如果没有定义任何构造方法,Java会提供一个无参的默认构造方法。
- 构造方法可以重载:可以定义多个构造方法,但每个构造方法的参数列表必须不同。
- 构造方法没有返回值:构造方法没有返回类型,不能使用void关键字。
- 构造方法不能被继承:子类会隐式调用父类的构造方法,但构造方法本身不可继承。
- 执行顺序:构造方法的执行顺序是从父类到子类。
END
构造方法可能看起来只是个简单的初始化方法,但它的行为和使用方式非常讲究。希望通过这篇文章,小伙伴们能对构造方法有更深入的理解。面试时遇到这个问题,不要再掉以轻心哦~
希望今天的分享对大家有帮助!如果有任何问题,欢迎留言讨论~
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!