P258-P265
《Head First Java》20201001读书笔记
对象的生命周期
对象的生命周期要看引用变量的生命周期。
public class TestLifeOne{
public void read(){
int a = 42;//s的范围只限于read()里面,到处无法使用
sleep();
}
public void sleep(){
s = 7;//非法使用
}
}
- 局部变量只会存活在声明该变量的方法中
public void read(){
int s = 42;
//'s'只能用在此方法中
//当方法结束时
//s会完全消失
变量s只能用在read()方法中。
换句话说,此变量的范围只会在所属方法的范围内。
其余的程序代码完全见不到s。
- 实例变量的寿命与对象相同。如果对象还活着,则实例变量也会是活的。
public class Life{
int size;
public void setSize(int s){
size = s;
//'s'会在方法结束时消失
//但size在类中到处都有
}
此时s变量(这次是方法的参数)的范围,同样也只限制在所属的setSize()这个方法中。
“life”与“scope”的差别
Life
只要变量的堆栈块还存在于堆栈上,局部变量就算活着。
也就是说,活到方法执行完毕为止。
Scope
局部变量的范围只限于声明它的方法之内。
当此方法调用别的方法时,该变量还活着,但不在目前的范围内。
执行其他方法完毕返回时,范围也就跟着回来。
public void doStuff(){
boolean b = true;
}
public void go(int x){
int z = x + 24;
crazy();
//更多代码
}
public void crazy(){
char c = 'a';
}
引用变量
引用变量的规则与primitive主数据类型相同。
引用变量只能在处于它的范围中才能被引用。
也就是说,除非引用变量是在它的范围中,不然就不能使用对象的遥控器。
当最后一个引用消失时,对象就会变成可回收。