构造器是Java基础中非常重要的知识点,我相信读者们只要认真的看完我这篇文章,绝对会对构造器的认识提升一个甚至好几个档次。
看一个需求:
首先我们看一个需求:前面我们在创建人类的对象的时候,我们是先把一个对象创建好,再给他的年龄和姓名属性赋值,如果现在我要求,在创建人类对象的时候,就直接指定这个对象的姓名和年龄,该怎么做?这个时候就可以使用构造器。
public class Constructor01 {
//编写一个main方法
public static void main(String[] args) {
//当我们new 一个对象时,直接通过构造器指定名字和年龄
Person p1 = new Person("smith", 80);
System.out.println("p1的信息如下");
System.out.println("p1对象name=" + p1.name);//smith
System.out.println("p1对象age=" + p1.age);//80
}
}
//在创建人类的对象时,就直接指定这个对象的年龄和姓名
//
class Person {
String name;
int age;
//构造器
//作者解读
//1. 构造器没有返回值, 也不能写void
//2. 构造器的名称和类Person一样
//3. (String pName, int pAge) 是构造器形参列表,规则和成员方法一样
public Person(String pName, int pAge) {
System.out.println("构造器被调用~~ 完成对象的属性初始化");
name = pName;
age = pAge;
}
}
关于构造器的一些细节:把下面的代码看懂就自然掌握了构造器的所有细节了
1.如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器(也叫默认构造器)
2.一旦定义了自己的构造器,那么系统默认的构造器就被覆盖了
3.一个类可以定义多个不同的构造器,就像Person类可以定义好几个构造器
4.构造器的名字要与类的名字一样
5.构造器是完成对象的初始化,而不是创建对象,创建对象这一步在new Person(“king”,“40”)这里已经完成
6.在创建对象的时候,系统就已经开始自动的调用构造器了
public class ConstructorDetail {
//编写一个main方法
public static void main(String[] args) {
Person p1 = new Person("king", 40);//第1个构造器
Person p2 = new Person("tom");//第2个构造器
Dog dog1 = new Dog();//使用的是默认的无参构造器
}
}
class Dog {
//如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器(也叫默认构造器)
//使用javap指令 反编译看看
/*
默认构造器
Dog() {
}
*/
//一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,
//除非显式的定义一下,即: Dog(){} 写 (这点很重要)
//
public Dog(String dName) {
//...
}
Dog() { //显式的定义一下 无参构造器
//其实你不定义也行,因为系统会有,我只是定义出来让你看看系统给你定义的无参构造器长啥样而已
}
}
class Person {
String name;
int age;//默认0
//第1个构造器
public Person(String pName, int pAge) {
name = pName;
age = pAge;
}
//第2个构造器, 只指定人名,不需要指定年龄
public Person(String pName) {
name = pName;
}
}