一.什么是构造器
构造器是对象初始化的工具
当我们创建对象时:
java
Dog dog = new Dog();
上面这个圆括号"()"就代表构造器 new的作用是创建对象(开辟空间)
二.构造器的作用
当我们创建一个对象时
java
public class Dog {
int leg;
String fuse;
double price;
}
我们并不知道它要占多大空间,需要一开始就给它一个基础空间。java中有一个特殊的方法,这个方法跟类名相同,它就是构造器
java
public Dog(){
}
这个方法没有返回值,它的目标是对对象进行初始化。我们在写代码时可以不写,java会帮助我们自己生成。如果没有这个方法,不进行初始化就会报错

正确写法

三.默认构造器
3.1 类名 a = new 构造器();
那么当我们给属性赋值操作分别在构造器前和构造器后,哪个才是有用的呢?
java
/**
* 狗类
*/
public class Dog {
int leg = 4;
String fuse;
double price;
public int getLeg() {
return leg;
}
public void setLeg(int leg) {
this.leg = leg;
}
public String getFuse() {
return fuse;
}
public void setFuse(String fuse) {
this.fuse = fuse;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Dog(){
leg = 3;
}
public static void main(String[] args) {
Dog dog = new Dog();
System.out.println(dog.getLeg());
}
}
可以看到我在创建leg时已经赋值为4,而在我自己写的构造器中给leg赋值为3。那么运行main函数结果为3。当我们new对象时就会调用构造器,就像调用方法一样,所以构造器也叫构造方法。
3.2初始化的默认值
java
/**
* 狗类
*/
public class Dog {
int leg;
String fuse;
double price;
public int getLeg() {
return leg;
}
public void setLeg(int leg) {
this.leg = leg;
}
public String getFuse() {
return fuse;
}
public void setFuse(String fuse) {
this.fuse = fuse;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public static void main(String[] args) {
Dog dog = new Dog();
System.out.println(dog.getLeg());
System.out.println(dog.getPrice());
System.out.println(dog.getFuse());
}
}

int---0
double---0.0
boolean---false
String---null
八个基本数据类型外---null
现在我们知道构造器是初始化内容的,那么是否可以在初始化时就赋值呢?
答案是肯定的

如图在初始化前打上断点,进入里面会跳转到构造器。这里是我自己写的构造器,那么price就会为999;

四.有参数构造器(方法)
4.1示例


为什么price是123不是999,是因为这里调用了有参数构造器
4.2全参构造器



java
public Dog(int leg, String fuse, double price) {
this.leg = leg;
this.fuse = fuse;
this.price = price;
}
要调用全参构造器时,创建对象时参数要按顺序写。
java
Dog dog = new Dog(4,"yellow",520.0);
java
public Dog(){
this.price=999;
}
public Dog(double price){
this.price=price;
}
public Dog(int leg, String fuse, double price) {
this.leg = leg;
this.fuse = fuse;
this.price = price;
}
public static void main(String[] args) {
Dog dog = new Dog(4,"yellow",520.0);
System.out.println(dog.getLeg());
System.out.println(dog.getPrice());
System.out.println(dog.getFuse());
Dog dog1 = new Dog();
System.out.println(dog1.getPrice());
}
那么dog1的价格会是多少呢?答案是999,因为dog1调用的时第一个无参构造器。
一般写代码建议写一个无参的一个全参的。