1.概念
又称构造器,是一个特殊的方法,它是方法名与类名相同且没有返回值类型的方法。
作用:用来给成员变量初始化
2.定义
定义语法:
修饰词 类名(有参传参){}
无参构造器:如果在定义类时,没有添加构造方法,
系统会默认提供一个公有的无参的构造方法
有参构造器:因为构造器是用来给成员变量初始化的,
为了方便,所以形式参数的名称都与成员变量一致。
因此,在赋值时,this.不能省略。
ps:如果定义了构造器,系统不再提供默认的无参构造器
3.构造方法的使用
构造器的调用:
new 构造方法(有参传参)
只能是new关键字来调用
对象的实例化:是由new完成的(对象此时就存在了,但是成员变量都是默认值)
对象的成员变量初始化:是由new调用的构造器进行的(成员变量是第一次被赋值)
举个栗子:
一个未出生的婴儿,这个婴儿已经存在,但是没有名字,出生日期等。
这就是实例化
当婴儿出生后他有了名字,出生日期,性别等。
这就是给对象的成员变量初始化
/**
* 定义一个学生类型:Student
* 成员变量:
* String stuId;
* String name;
* String grade;
* int age;
* double score;
* 构造方法:作用是用来给成员变量初始化
*/
public class Student {
String stuId;
String name;
String grade;
int age;
double score;
public Student(String stuId,String name,String grade,int age,
double score) {
this.stuId = stuId;
this.name = name;
this.grade = grade;
this.age = age;
this.score = score;
}
public String toString() {
return stuId+","+name+","+grade+","+age+","+score;
}
public static void main(String[] args) {
Student s = new Student("07081111","张三","三年二班",23,400);
System.out.println(s);
s.age = 20;
System.out.println(s);
}
}
4.构造器的重载
一个类可以有多个构造器
5.this关键字
在普通方法或构造器中,操作的成员变量如果与局部变量名称相同时,
为了避免出现歧义,应该在成员变量前使用this.进行区分
当没有歧义时,this.可以省略不写
在构造器中:还可以使用this关键字调用本类中的其他构造方法
语法格式: this(有参传参)
ps:只能在构造器中的首行首句上使用
public class Dog {
String name;
int age;
char gender;
String color;
/**无参构造器:可以在内部逻辑中给成员变量赋值固定值*/
public Dog() {
this("小花",3,'雄',"黑色");
}
public Dog(String name,int age,char gender,String color) {
this.name = name;
this.age = age;
this.gender = gender;
this.color = color;
}
public Dog(String name,int age,char gender) {
this(name,age,gender,"灰色");
}
public Dog(String name,int age) {
this(name,age,'雄',"红色");
}
}
6.成员变量与局部变量
成员变量
定义位置:在方法外,类体中
默认值:有默认值,构造器中可以不对成员变量初始化
内存位置:在堆中
生命周期:从对象实例化开始出现,到对象消失
局部变量
定义位置:在方法内(包含小括号内的形参)
默认值: 没有默认值,必须初始化再使用
内存位置:在栈帧中
生命周期:从声明时开始,到方法结束后,栈帧消失时。