本文所写的是我学习《java编程思想第4版》一书时觉得需要写下些备注的地方,特此说明
1.static关键字:
在使用static关键字描述一个类的属性时
class StaticTest{
static int i=47;
}
需要注意的是:此时无论你创建几个StaticTest对象,
StaticTest.i也只有一份储存空间,即这些对象共享此属性。对象A对i做出的操作,在对象B中一样是生效的。
2.别名现象
1)类级别的(即如果类A=类B,对类A进行的操作,也会在类B中生效)
这是因为在赋值时,我们并没有为A重新创建新的对象,而是赋予了类A对类B的引用。
例:
class Ta{
int level;
}
public class Test1 {
public static void main(String[] args) {
Ta t1=new Ta();
Ta t2=new Ta();
t1.level=1;
t2.level=2;
System.out.println(t1.level+" "+t2.level); //输出结果为1 2
t1=t2;
t1.level=3;
System.out.println(t1.level+" "+t2.level); //输出结果为3 3
}
}
上面的代码中当我们将t2赋值给t1之后,我们改变了t1的属性,同时t2的属性也被改变了。其实此时t1、t2同时指向的是t2的对象,而t1则被“垃圾回收器”自动清理了
。
2)方法中(将对象传入方法之中,在方法中对传入对象的操作,会影响到原来的对象)
这是因为我们传递给方法的并不是对象,而是对对象的引用
例:
class Letter {
char c;
}
public class PassObject {
static void f(Letter y) {
y.c = 'z';
}
public static void main(String[] args) {
Letter x = new Letter();
x.c = 'a';
System.out.println(x.c); //输出结果为a
f(x);
System.out.println(x.c); //输出结果为z
}
}
上面的代码中我们在方法f中对传入的对象y进行了属性修改,但原本的对象x也被改变了。
3.