构造方法
什么是构造方法
在创建对象的时候,对象成员可以由构造函数方法进行初始化。
构造方法负责初始化类中的实例变量。
构造方法是一种特殊的方法,这种方法必须满足以下语法规则:构造方法必须与类名相同;不包含返回值类型描述部分。
构造方法不能有static和final关键字修饰。
为什么使用构造方法
在调用类的属性时,经常遇见有许多的属性的类,比如:
public class Teacher {
int age; // 年龄
String name; // 姓名
String position; // 职位
String education; // 学历
}
在调用的时候比较麻烦
public class Test {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.name = "李雯";
teacher.age = 36;
teacher.education = "博士";
System.out.println(teacher.introduction());
}
}
Teacher类中有太多的属性,每次给属性赋值时非常麻烦:编码量大,无法重用给属性赋值的代码,这时候我们就要用到了构造方法。
如何使用构造方法
使用new关键字调用构造方法,即构造方法在创建对象(也称对象实例化)时被调用。
public class TeacherTest {
public static void main(String[ ] args) {
Teacher teacher = new Teacher(); //创建Teacher对象
}
}
由于Teacher类没有显式构造方法,这时Teacher类就会有一个默认的无参构造方法。
显示构造方法:在创建类时,如果没有创建显示构造方法,类中则有一个默认无参构造方法。而且可以在类中声明多个构造方法,每个方法在参数类型或数目有所不同。
如果定义好了显示构造方法,则默认无参构造方法则不存在,除非定义显示无参构造方法。
类中可以有多个构造方法,构造方法之间可以通过this实现调用,但必须将调用构造函数代码写在有效代码的第一行:
public class TeacherTest {
public TecherTest(){
this.name=name;
}
public TecherTest(){
this(name);
this.age=age;
}
}
普通方法不能使用this调用类的方法。
public class TeacherTest {
public TecherTest(){
this.name=name;
}
public void Test(){
this(name);//出错
}
}
this代表对当前对象的一个引用。
public class Student {
String name; //学生姓名
public void doHomework() {
System.out.println(this.name + “正在写作业……");
}
}
this在实例方法中通常被省略,除非实例方法中包含与成员变量同名的局部变量时,访问成员变量需要使用this。
this关键字调用属性、方法和本类中的构造方法。
public class Student {
int age;
String name;
public Student(int age) {
this.age = age;
}
public Student(String name) {
this.name = name;
}
public Student(int age, String name) {
this(age);
new Student(name);
}
public static void main(String[] args) {
new Student(12, "王五");
}
}
此程序调用第三个构造方法,根据参数列表调用。
对象初始化过程
用new创建并初始化对象步骤:
1、给对象的实例变量(非“常量”)分配内存空间,默认初始化成员变量;
2、成员变量声明时的初始化
3、初始化块初始化(又称为构造代码块或非静态代码块);
4、构造方法初始化
对象初始化过程:
给对象的实例变量分配空间,默认初始化成员变量
成员变量声明时的初始化
初始化块初始化
参构造方法初始化
类变量和实例变量:
类变量也叫静态变量,也就是在变量前加了static 的变量。
实例变量,就是说没有static修饰的成员变量,这些变量的使用需要先在内存中new出来才能使用。
区别:
类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象。