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

不算重零开始的java学习

第二篇


相比于方法如何实现,我对底层似乎更有兴趣。

NO.1

栈与堆

在java中,内存中会存在两个区域:对象的生存空间堆(heap)以及方法调用及变量的生存空间(stack)。当java虚拟机运行时,它会从底层操作系统中取得一块内存,并依此来执行java程序。

堆(又称为垃圾回收的堆)
方法调用和实例变量所有对象


实例变量是被声明在类中,因此实例变量存在于所属的对象中。

public class Duck{
    int size;//每个Duck对象都会有一个独立的size
}

局部变量以及方法的参数都被声明在方法中,声明周期只限于方法被放在栈的这段时间。

public void foo(int x){
    int i = i + 3;
    boolean b = true;   //参数X和参数I,b都是局部变量
}

当调用一个方法时,改方法会被放在栈顶。

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

1、某段程序代码调用了doStuff()是的doStuff()被放在最上方的栈块
2、doStuff()调用go(),go()就被放在栈顶
3、go()又调用crazy(),是的crazy()放在栈顶
4、当crazy()执行完成后,它的栈对块就被释放掉。执行就回到了go()

1234
doStuff()go()crazy()go()
 doStuff()go()doStuff()
  doStuff() 
NO.2

构造函数

谈到构造函数,我想起在学习javascript时,当new出某个函数时,会导致函数中this的绑定。在刚开始接触javascript时,我对这其中的原理百思不得其解。为什么javascript中这种函数会被称为构造函数,书中都是这样形容,后来我才明白这是来自于java的一个词,实际上javascript中只是执行了new而已,并不算是构造函数。用构造函数这个词只是为了方便理解。

先让我们回到之前的那段代码:

Duck myDuck = new Duck();

new Duck()这段代码创建了一个Duck的对象,我们并不是在调用Duck()的方法,而是调用Duck的构造函数

public class Duck{
    public Duck(){
      //do sth
    }
}
public class UseDuck{
    Duck d = new Duck();
}

构造函数时可以重载的

public class Duck2{
    int size;
    public Duck2(){
        int size = 26;
    }
    public Duck2(int ducksize){
        size = ducksize;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值