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

  • Post author:
  • Post category:其他


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



一、java存储数据


1、寄存器

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


2、堆栈

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


3、堆

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


4、常量存储

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


5、非RAM存储

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

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

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


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

Code:

  1. Code:

  2. public


    class

    Test {

  3. public


    void

    aa (){
  4. String s =

    new

    String();
  5. System.out.print(s);
  6. }

  7. public


    void

    bb (){
  8. System.out.println(

    “s引用已经超出作用域”

    );
  9. }
  10. }

对于对象和对象引用来说,引用因为存储在堆栈中,因此有生命周期,但是,对象存储在堆中,没有生命周期。因此,在作用域消失的时候,引用生命周期结束,但是对象没有消失,对象只是不能再被访问了。要想销毁对象,要用到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字段则每个对象对应一个存储空间



版权声明:本文为xingyunpi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。