03_2_JAVA中的面向对象与内存解析
1. 成员变量
成员变量可以是Java语言中任何一种数据类型(包括基本数据类型和引用数据类型)
在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的初始值。
如下列表:
成员变量类型 |
取值 |
byte |
0 |
short |
0 |
int |
0 |
long |
0L |
char |
‘\u0000’ |
float |
0.0F |
double |
0.0D |
boolean |
false |
所有引用类型 |
null |
成员变量的作用范围为整个类体。
2. 引用
Java语言中除基本类型之外的变量类型都称之为引用类型。
Java中的对象是通过引用个对其操作的。
3. 如何在内存中区分类和对象
类是静态的概念,代码区
对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存。
4. 对象的创建和使用
必须使用new关键字创建对象。
使用对象(引用).成员变量或来引用对象的成员变量。
使用对象(引用).方法(参数列表)来调用对象的方法。
同一类的每个对象有不同的成员变量存储空间。
同一类的每个对象共享该类的方法。
5. 构造方法(构造函数)
使用new + 构造方法创建一个新的对象。
构造函数是定义在Java类中的一个用来初始化对象的函数。
构造函数与类同名且没有返回值。
例如:
public class Person {
int id;
int age;
Person(int n, int i) {
id = n;
age = i;
}
}
当没有指定构造函数时,编译器为类自动添加形如
类名() {} 的构造函数。
6. 约定俗成的命名规则
类名的首字母大写
变量名和方法名的首字母小写
运用驼峰标识
7. 调用过程演示
Test test = new Test();
int date = 9;
BirthDate d1 = new BirthDate(7,7,1970);
BirthDate d2 = new BirthDate(1,1,2000);
test.change1(date);
test.change2(d1);
test.change3(d2);
......
public void change1(int i) {
i = 1234;
}
public void change2(BirthDate b) {
b = new BirthDate(22, 2, 2004);
}
public void change3(BirthDate b) {
b.setDay(22);
}
图1
图2 date将9传给形参i ,i = 9
图3 i 被设置为 1234
图4 方法change1调用完毕之后,i值消失
图5 调用change2 将d1的值 传给 b
图6 b 跟 d1 指向同一对象
图7 b 并赋予新值 重新指向另一对象
图8 方法change2调用完毕之后, b消失,以及对象也消失 (堆里面的对象,有可能不是马上消失,而是在垃圾回收的时候,消失。)
图9 调用change3 b被传递为d2的值,而和d2指向同一对象
图10 day被改成22了
图11 change3调用完毕 b消失