基础------数据存储、对象引用、static关键字

今天起,就开始了对编程思想的学习了,希望以后能把生疏的、不懂的内容知识记录到这里,一来和大家分享讨论,二来自己的印象也深一些。

一、java存储数据

1、寄存器

是最快的存储区,位于处理器内部。

2、堆栈

对于存储在堆栈中的数据,java系统会清楚的知道这些数据的生命周期的,这样,就可以根据数据的作用区域来判断数据的生面周期,从而销毁没有用的数据。一般,对象引用尤其存储在堆栈中,同时,基本类型也是存储在堆栈中的。

3、堆

一般java对象被存储在堆中。与堆栈的最大区别之处,我觉得就是:java系统不能得知存储在堆中的数据的生命周期。因此,需要垃圾回收器来监视所有存于堆中的对象,并辨别哪些不会被引用的对象,之后释放这些对象的空间。

4、常量存储

常量值通常直接存放在程序代码的内部。

5、非RAM存储

数据完全存活于程序之外。两个基本的例子是流对象和持久化对象。

流对象:对象被转化成字节流,通常被发送给另一台机器。

持久化对象:已经存储到数据库或保存到本地硬盘中的对象。

6、关于堆和堆栈的区别举例

Code:
  1. Code:   
  2. public class Test {      
  3.      
  4. public void aa (){      
  5.      
  6. String s = new String();      
  7.      
  8. System.out.print(s);      
  9.   
  10. }   
  11.   
  12. public void bb (){   
  13.      
  14. System.out.println("s引用已经超出作用域");      
  15.      
  16. }      
  17.      
  18. }      

对于对象和对象引用来说,引用因为存储在堆栈中,因此有生命周期,但是,对象存储在堆中,没有生命周期。因此,在作用域消失的时候,引用生命周期结束,但是对象没有消失,对象只是不能再被访问了。要想销毁对象,要用到java中的垃圾回收器。

二、java中引用操作对象

初始化一个对象的时候,我们都是用:

Code:
  1. String s = new String();   

这句话的意思是:初始化一个String类型的实例,其中,s 是引用,相当于c++中的指针,指向申请的这个String对象。而开辟的一个s引用和一个String对象存储的位置是不同的。s 存储于上面提到的堆栈中,而开辟的对象存储于堆中。

如果我们用下面的方法来定义一个对象的引用,与上面有什么区别:

Code:
  1. String s ;  

这里的区别的就是,只是拥有一个String类型的对象的引用,并没有开辟String对象空间。

建议定义一个类的时候,初始化类的变量。

三、static 关键字

static关键字可以修饰成员变量,也可以修饰类的方法。

1、static修饰方法的时候,主要目的是为了让这个方法可以不用通过实例化对象就直接调用。

2、static修饰成员变量的时候,一方面与修饰方法的作用相同,此外,还应该注意的是:static关键字修饰的变量只有一份存储空间。例子如下:

Code:
  1. public class bb{   
  2. public static int x = 0;   
  3. public static void main(String args[]){   
  4. bb b1 = new bb();   
  5. bb b2 = new bb();   
  6. //将b1的x值赋值为1,那么b2的x值肯定也会变   
  7. b1.x = 1;   
  8. System.out.print(b2.x);   
  9. }   
  10. }  

以上输出 1 。

* 非static字段则每个对象对应一个存储空间

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值