以Person为例,由于person中的属性都被private了,外界无法直接访问属性,必须对外提供get,set方法。当创建人对象时,对象一经创建就要明确其姓名和年龄,此时就要用到构造方法。
在开发中经常在创建对象的同时就要明确对象的属性值,比如员工入职就要明确他的年龄姓名等属性信息。
构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作.
new 执行过程(创建一个对象分几步)
1.为对象分配内存空间
2.调用对象的合适的构造方法
语法规则
1.方法名称必须与类名称相同
2.构造方法没有返回值类型声明
3.每一个类中一定至少存在一个构造方法,如果一个雷没有写构造方法,那么编译器会为当前类生成一个默认的不带参数的构造方法
//验证:如果一个雷里没有调用构造方法,编译器是否会默认调用没有参数的构造方法
class Person{
private int age;
private String sex;
private String name;
public Person(){
System.out.println("调用了不带参数的构造方法!");
}
}
public class TestDemo {
public static void main(String[] args) {
Person person1=new Person();//new了一个对象,但没有写构造方法,
}
}
只要自己写了构造方法,那编译器就不会自动生成不带有参数的构造方法了,自己写构造方法时,可以同时对变量进行初始化。
//在写构造方法的同时,对变量初始化
//在写构造方法的同事,对变量初始化
class Student{
private int age;
private String name1;
public Student(){
System.out.println("调用了一个不带参数的构造方法");
}
public Student(String name1){
this.name1=name1;//在写构造方法的同时,对变量初始化?
System.out.println("调用了一个带有String参数的构造方法");
}
public Student(int age,String name){
this.age=10;
this.name1="lisi";
System.out.println("调用了带有两个参数的构造方法");
}
//
public String getName1() {
return name1;
}
public void setName1(String name1) {
this.name1 = name1;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name1='" + name1 + '\'' +
'}';
}
}
public class TestDemo {
public static void main(String[] args) {
Student student1 = new Student();
System.out.println(student1);
System.out.println("================");
student1.setName1("caocao");//先调用setName,并把变量设为caocao
String name = student1.getName1();//然后调用getName,不设置变量,并把调用的getName赋给String name
System.out.println(student1);//打印name
}
}
.
构造方法支持重载. 规则和普通方法的重载一致
重载:1.方法名相同
2.参数列表不同
3.返回值不作要求
class Person{
private int age;
private String sex;
private String name;
public Person(){//默认构造函数
this.age=10;
this.name="张三";
this.sex="男";
}
public Person(String name,int age,String sex){//带三个参数的构造函数
this.name="张三";
this.age=10;
this.sex="男";
}
public void show(){
System.out.println("name: "+name+" age: "+age+" sex: "+sex);
}
}
public class TestDemo {
public static void main(String[] args) {
Person person1=new Person();//调用不带参数的构造方法
person1.show();
Person person2=new Person();//调用带三个参数的构造方法
person2.show();
}
}
`