【Java编程思想】第2章 --- 一切都是对象(1)【Vigor】

用引用操纵对象:

  • 每种编程语言都有自己操纵内存中元素的方式,我们可能经常听过这么一句话“Java中一切皆对象” ,所以,我们会认为是对象操纵这内存中的元素,而实际Java中操纵的标识符是对象的一个“引用”。

  • 这么说可能有些抽象,我们可以想象这么一个情况,我们拥有一个电视机(对象),而要来操控这个电视机,我们需要一个遥控器(引用)。而只要我们手握这个遥控器,就可以保持与电视机的连接,无论我们走到房间哪里,我们几乎都能操控到电视机(这可以想象到当我们在类中创建了一个对象的时候,我们可以利用创建的这个对象的引用在类范围内随意使用这个对象中的方法)。

  • 而即使没有电视机(对象),遥控器(引用)也是可以存在的。所以,你拥有一个引用,其实并不一定需要一个对象与它关联。这就好像我们在创建一个变量的时候,我们并不一定对其进行初始化:

    String s;

  • 但是,这里仅仅只是创建了对象的引用,并没有实际的对象,他并没有与任何事物关联。如果这个时候对字符串 s 进行操作,就会返回一个运行时错误

			String s;
			s += "Vigor";
			System.out.println(s);
Error:(6, 9) java: 可能尚未初始化变量s
  • 所以,一种安全的做法是:创建一个引用的同时便进行初始化。

而当创建了一个引用,而希望它能与一个新对象进行关联时,我们通常用 new 操作符来实现。

五大存储数据区域

1. 寄存器:

  • 寄存器是最快的存储区,因为它位于处理器内部。但是寄存器的数量及其有限,所以我们需要根据需求进行分配,且一般我们不能直接控制。(而C和C++允许你向编译器建议寄存器的分配方式)。

2.堆栈:

  • 堆栈位于通用RAM中,是通过堆栈指针的上下移动分配的空间:堆栈指针向上移动则分配新内存,堆栈指针向下移动则释放内存。他是一种仅次于寄存器存储效率的方式。但其关键在于创建程序时,Java系统必须知道存储在堆栈中所有项的确切生命周期,这也限制了程序的灵活性,所以,一般堆栈中会存储对象的引用,但不讲对象存储其中。

3.堆:

  • 堆用于存放所有的 Java 对象,堆不同于堆栈的好处在于:编译器不需要知道存储的数据的生命周期,大大增强了分配存储的灵活性。而当我们用关键字 new 创建对象时,Java会自动在堆里进行内存分配。但是在我们进行分配存储空间和清理内存时,堆所耗费的时间则是比堆栈更多的

4.常量存储:

  • 常量值因为永远不会被改变,所以通常还会被存放于代码内部,且选择被放在ROM(只读存储器)中,毋庸置疑,这样做是安全的。

5.非RAM存储

  • 有些数据是存活于程序之外的,例如流对象和持久化对象。在流对象中,当数据发送到另一台机器时,通常会将对象转换成字节流,而在持久化对象中,对象会被存放于磁盘上。这种存储方式,当需要将数据传输到其他媒介事物时,会将对象转化成其他形式,而在需要的时候,则可恢复成常规的,基于RAM的对象。

猜你喜欢

转载自blog.csdn.net/Vigor377/article/details/114457083
今日推荐