开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情
类、对象、构造方法
1. 类和对象的内存处理方式
1.1 方法区(method area)
- 也称静态区,主要用于存放用户定义的各个类、静态变量等。
1.2 堆(heap)
- 堆中存放对象和非静态变量。
- 在使用new关键字产生对象后,对象会存放进堆中进行管理,对象名就是对象在堆中的地址。
- 对象把被它调用的成员变量直接存储到堆中。
- 对象把被它调用的成员方法地址存储到堆中,间接调用。
2. 对象作为方法的参数和返回值
对象作为方法参数
public void Number(Scanner sc){
int age=sc.nextInt();
System.out.print(age);
}
对象作为方法的返回值
public Student getStu(){
int age=sc.nextInt();
Student stu=new student();
stu.age=age;
return stu;
}
3. 成员变量和局部变量
3.1 基本特征
- 成员变量位于方法外,可供整个类使用;成员变量有默认值null,定义时可不赋值;
- 局部变量位于方法内,仅它所在的方法可使用。局部变量没有默认值,定义时必须赋值。
3.2 内存管理
- 由于成员变量在类中定义,而类实例化为对象后是进入堆中,故成员变量是在堆中进行管理。
- 局部变量在方法中定义,方法是在栈中进行管理,故局部变量也在栈中进行管理。
3.3 生命周期
- 局部变量在栈中,故最终随方法出栈以结束生命周期,周期较短。
- 成员变量在堆中,故最终以垃圾回收的方式结束周期,周期较长。
3.4 this关键字的使用
- 若某个类中,局部变量的名称和成员变量名称相同,则可使用this关键字对局部变量进行标识,以区分两个变量。
- 若有多个类,则this表示的是造成重名的那个类。
4. private型变量的访问
- 若类中有变量private int age,则在类以外无法直接访问这个变量。
- 若要在类外访问private型变量age,需在类中定义setAge()和getAge()两个方法,按格式要求,变量名age的首字母必须为大写(idea中使用alt+insert可快速创建)。
- setAge()和getAge()方法中可编写访问控制语句。