廖雪峰Java2-2数据封装-2构造方法

在2-2-1中,创建1个实例需要3步

        Person ming = new Person();
		ming.setName("  小明  ");
		ming.setAge(16);

问题:能否在创建对象实例时就把内部字段全部初始化为合适的值?
构造方法因此应运而生

1.单个构造方法

  • 构造方法可以在创建对象实例时初始化对象实例
  • 构造方法名就是类名
  • 构造方法的参数没有限制
  • 构造方法没有返回值(也没有void)
  • 必须用new操作符调用构造方法
    Person.java
public class Person {
	private String name;
	private int age;
	public Person(String name,int age) {
		this.name = name;
		this.age = age;
	}
	public void info() {
		System.out.printf("我是%s,今年%d岁" ,name,age);
	}
}

Hello.java

public class Hello {
	public static void main(String[] args) {
		Person ming = new Person("小明",12);
		ming.info();
	}
}
如果一个类没有定义构造方法,编译器会自动生成一个默认构造方法: * 无参数 * 无执行语句 ```#java public Person() { } ``` 如果我们定义了构造方法,编译器不会再自动创建默认的构造方法

构造方法初始化顺序:

  • 先初始化字段
  • 没有赋值的字段初始化为默认值:基本类型=0;引用类型=null
  • 再执行构造方法的代码

多个构造方法

可以定义多个构造方法,编译器通过构造方法的参数数量、位置和类型区分
一个构造方法可以调用其他构造放方法,便于代码复用。
调用其他构造方法的语法是this(...)
Person.java

public class Person {
	private String name;
	private int age;
	public Person(String name,int age) {
		this.name = name;
		this.age = age;
	}
	public Person(String name) {
		this(name,18);
	}
	public Person() {
		this("Unnamed");
	}
	public void info() {
		System.out.printf("我是%s,今年%d岁\n" ,name,age);
	}
}

Hello.java

public class Hello {
	public static void main(String[] args) {
		Person ming = new Person("小明",12);
		ming.info();
		Person hong = new Person("小红");
		hong.info();
		Person jun = new Person();
		jun.info();
	}
}

3.总结:

实例在创建时会调用构造方法
构造方法用于初始化实例
没有定义构造方法时,编译器会自动创建默认的构造方法。
可以定义多个构造方法,编译器根据参数自动判断

posted on 2019-01-13 13:29  singleSpace  阅读(152)  评论(0编辑  收藏  举报