第六章 构造方法、变量的作用域和生命周期(1.6)
七、构造方法
类中有一种特殊的方法,其方法名与类名相同,没有返回值类型,这种方法叫构造方法,也叫构造函数或构造器。
实例:
public class Student {
// 声明成员变量
String name; // 姓名
int age; // 年龄
String studentNo; // 学号
// 声明方法
// 没有参数的构造方法
public Student (){
System.out.println("Student类无参数的构造方法被调用");
}
// 有一个参数的构造方法
public Student (String name) {
this.name = name;
System.out.println("Student类含有参数name的构造方法被调用");
}
// 有三个参数的构造方法
public Student (String name, int age, String studentNo) {
this.name = name;
this.age = age;
this.studentNo = studentNo;
System.out.println("Student类含有参数name、age、studentNo的构造方法被调用");
}
// 自我介绍
void introduce(){
System.out.printf("大家好,我是%s,我今年%d岁,我的学号是:%s", name, age, studentNo);
}
}
解释说明:
- 构造方法主要用来在创建对象时为对象的成员变量赋初始值。
- 构造方法不允许使用对象调用,只有在用
new
运算符实例化对象时才会被自动调用。 - 如果类中不显示声明构造方法,系统会为类默认提供无参数的构造方法。如果自定义了构造方法,系统默认的构造方法就不存在了。
- 一个类可以声明多个构造方法,即构造方法的重载,满足方法重载的要求即可。
上例中使用了this
关键字,在Java
中,this
可以引用当前类的对象。
八、变量的作用域和生命周期
8.1、变量的作用域
变量的作用域就是指一个变量定义后,在程序的什么地方能够使用。
在Java
中,一对大括号 {}
包含的区域,也被称之为一个代码块(语句块)。使用大括号{}
的地方有:
- 类声明、
- 方法声明、
- 方法中的循环体、
- 分支条件后的语句等,
一个变量的作用域只被限制在该变量声明所在的代码块中(也就是离该变量的声明语句最近的大括号内)。
方法中声明的变量,称为局部变量,方法的形式参数也是方法的局部变量。局部变量只能在当前方法中使用;在判断代码块中声明的变量只能在当前判断代码块中使用,当前判断代码块之外不能正常使用;对循环代码块也是一样。
声明在类中,但在方法之外的变量称为成员变量。被static
关键字修饰的成员变量在整个类声明里的成员方法中都可以使用;没有被static
关键字修饰的成员变量在整个类声明里没有被static
关键字修饰的成员方法中都可以使用。有时在一个方法中,会遇到局部变量和成员变量同名的情况,此时,直接使用变量名其实是在使用局部变量,如果要使用成员变量,需要this.
成员变量名。
8.2、变量的生命周期
变量的生命周期是指变量什么时候分配内存,什么时候从内存中回收。
对于局部变量,会在方法或语句块执行的时候创建(在栈
中分配内存),当它们执行完成后,变量随之被销毁
。另外,局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
对于没有被static
关键字修饰的成员变量,会在对象创建的时候创建,在对象被销毁的时候销毁(在堆中分配内存)。另外,成员变量在创建时具有默认值,数值型变量的默认值是0
(整型是0
,浮点型是0.0
),字符型变量的默认值是’\u0000
’,布尔型变量的默认值是false
,引用类型变量的默认值是null
。