构造方法是一个用来初始化一个对象的内部状态的特殊方法(给属性赋值)。
构造方法时创建对象的根本,创建对象其实都是使用new 构造方法() 来完成的。
▼语法
[修饰符] 方法名([参数列表]){ //构造方法名必须和类名一致
//方法体
}
案例:
没有定义构造方法:
定义了构造方法:
2.构造方法的特点
▼1.构造方法名必须和类名一致
public People(String name,char sex,int age){//构造方法名必须和类名一致
this.name = name;
this.sex = sex;
this.age = age;
}
▼2.构造方法没有返回值,也不能写void
▼3.构造方法不能被程序员显示的直接调用
public static void main(String[] args) {
Peoplep = new People("小明",'男',17);
p.tell();
p.People("小明",'男',17);//报错
}
▼4.Java语言中,每个类至少有一个构造方法。(如果没有构造方法,则不能创建对象)
▼5.如果类的定义者没有显示的定义任何构造方法,则Java编译器会自动为该类提供一个默认为空的构造方法。(没有参数列表,没有方法体)
Eg:
public People(){
}
▼6.如果类的定义者显示定义了一个或多个构造方法,则系统不再提供默认为空的构造方法。
public class People {
public String name;
public char sex;
public int age;
public People(String name,char sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
}
public void tell(){
System.out.println("我叫:"+name+",性别:"+sex+",年龄:"+age);
}
public static void main(String[] args) {
Peoplep = new People("小明",'男',17);
p.tell();
Peoplep = new People();//报错,程序员自己定义了一个构造方法,则系统不再提供为空的。
}
}
3.构造方法的重载方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或者类型不同即可。在这种情况下,该方法就叫被重载了,这个过程称为方法的重载(overloading)
Java编译器能根据调用方法时所传递的参数个数和类型选择相应的方法。
public class People {
//属性
public String name;
public char sex;
public int age;
//构造方法重载
public People(){
}
public People(String name,char sex){
this.name = name;
this.sex = sex;
}
public People(String name,char sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
}
4.构造方法的调用在一个构造方法中调用另外一个构造方法,不是使用构造方法名,而是使用this(参数)的形式。
注意:
在一个构造方法中调用另一个构造方法,this(参数)必须位于第一行。
不能再够方法以为的任何地方调用构造方法
在一个构造方法中最多只能使用一个this调用一个构造方法。
public class Student {
public String no;//学号
public String name;//姓名
public char sex;//性别
public int age;//年龄
public String address;//籍贯
//构造方法
public Student(){
}
public Student(String no,String name,char sex,int age){
this.no = no;
this.name = name;
this.sex = sex;
this.age = age;
}
public Student(String no,String name,char sex,int age,String address){
this(no,name,sex,age);//调用前面的构造方法publicStudent(String no,String name,char sex,int age){ }
this.address = address;
}
//方法
public void tell(){
System.out.println("学号:"+no+",姓名:"+name+",性别:"+sex+",年龄:"+age+",籍贯:"+address);
}
public static void main(String[] args) {
Student s1 = new Student("KF00125","小鸣",'女',17,"河南新乡");
s1.tell();
Student s2 = new Student("KF00128","小芳",'男',16);
s2.tell();
}
}