不算重零开始的java学习(四)

不算重零开始的java学习

第四篇


NO.1

从某个函数调用重载版的另一个函数

换句话说,当我们不想吧相同的代码放在每一个构造函数中,我们只需要一个构造函数能够实现代码,其他构造函数调用这个构造函数,这就需要使用到this。

this()只能在构造函数中引用,而且必须是第一行代码,同时每个函数都可以调用super()和this(),但不能同时调用

public Mini extends Car(){
    Color color;
    public Mini(){
        this(Color.red);//调用真正的构造函数
    }
    public Mini(Color c){
        super("Mini");//真正的构造函数
        color = c;//初始化
    }
    public Mini(int size){
        this(Color.red);
        super(size);//error;
    }
}
NO.2

对象的声明周期

之前有提到过对象的声明周期取决去对它的引用,如果引用没了,对象也自然狗带了

那么变量呢?

public class TestLifeOne{
    public void read(){
        int s = 42;
        sleep();
    }
    public void sleep(){
        s = 7;//error,s无法再sleep中使用
    }
}

显然,存在于read()的范围中,sleep()无法使用,当read()执行完毕被弹出后,s自然也就被清除了。

而 实例变量情况就有所不同

public class life{
    int size;
    public void setSize(int s){
        size = s;
    }
}

当setSize()方法执行完毕后,s被清除。size仍然存在并可继续被使用。

当一个办法调用另一个方法时,第一个方法中的局部变量又在哪?

public void doStuff(){
    boolean b = true;
    go(4);
}
public void go(int x){
    int z = x + 24;
    crazy();
}
public void crazy(){
    char c = 'a';
}

1、doSuff()运行在栈堆中,变量存活在scope里面
2、调用go(),x、z、b,但b不在范围中
3、调用crazy(),只用c在这个范围中
4、crazy()执行完毕,c被清除,范围中只有x、z

换句话说,只要goStuff还存在于栈堆中,b就会继续保持它的值,直到goStuff被推入栈顶才会被使用。

当最后一个引用变量消失,对象就会变得可回收。有三种方法可以释放对象的引用

void go(){
    Life z = new Life();//z会在方法结束时消失
}
Life z = new Life():
z = new Life();//第一个对象会在z被赋值在别处时挂掉
Life z = new Life();
z = null//第一个对象会在z被赋值为null时被清除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值