构造器在生成对象过程中对属性进行初始化赋值,可重载多个构造器,类中最少有一个隐式构造器,如果显式定义构造器, 系统就不在提供默认的空参数的构造器,所以在自定义构造器时,如果需要new Person() 需写一个空参构造器,不然会报错
0.构造器定义方式
权限修饰符 构造器名(参数列表){
// 初始化代码体
}
1.隐式
public class PersonTest {
public static void main(String[] args) {
Person p = new Person();
System.out.println(p.age); // 0 默认值;
}
}
class Person{
int age;
//类体存在隐式空参构造器 权限修饰符跟class相同
}
2.显式空参构造器(跟默认构造器一样 权限修饰符可以更改)
public class PersonTest {
public static void main(String[] args) {
Person p = new Person();
System.out.println(p.age); // 0
}
}
class Person{
int age;
public Person() {
}
}
3.显式有形参列表(重载)
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person(20);
System.out.println("p1 age is :" + p1.getAge());
Person p2 = new Person("李狗蛋");
System.out.println("p2 name is :" + p2.getName());
Person p3 = new Person(18,"李狗蛋");
System.out.println("p3 age is :" + p3.getAge() + "\t name is: " + p3.getName());
}
}
class Person{
private int age;
private String name;
public Person(int age) {
this.age = age;
}
public Person(String name) {
this.name = name;
}
public Person(int age,String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
4.赋值顺序
public class PersonTest {
public static void main(String[] args) {
Person p = new Person("李老八");
System.out.println("name"+p.getName());
p.setName("轩子巨二兔");
System.out.println("After setting name:" + p.getName());
}
}
class Person{
private String name; // null(默认) => “李老八”(构造器) => “轩子老师”(操作赋值)
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}