程序运行时数据保存到什么地方?
(1) 寄存器。这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存
器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的
程序里找到寄存器存在的任何踪迹。
(2) 堆栈。驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆
栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存
方式,仅次于寄存器。创建程序时,Java 编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存
在时间”。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活
性,所以尽管有些Java 数据要保存在堆栈里——特别是对象句柄,但Java 对象并不放到其中。
(3) 堆。一种常规用途的内存池(也在RAM 区域),其中保存了Java 对象。和堆栈不同,“内存堆”或
“堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要
在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new 命
令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然
会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!
(4) 静态存储。这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM 里)。程序运行期间,静
态存储的数据将随时等候调用。可用static 关键字指出一个对象的特定元素是静态的。但Java 对象本身永
远都不会置入静态存储空间。
(5) 常数存储。常数值通常直接置于程序代码内部。这样做是安全的,因为它们永远都不会改变。有的常数
需要严格地保护,所以可考虑将它们置入只读存储器(ROM)。
(6) 非RAM 存储。若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。
其中两个最主要的例子便是“流式对象”和“固定对象”。对于流式对象,对象会变成字节流,通常会发给
另一台机器。而对于固定对象,对象保存在磁盘中。即使程序中止运行,它们仍可保持自己的状态不变。对
于这些类型的数据存储,一个特别有用的技巧就是它们能存在于其他媒体中。一旦需要,甚至能将它们恢复
成普通的、基于RAM 的对象。Java 1.1 提供了对Lightweight persistence 的支持。未来的版本甚至可能提
供更完整的方案。
类中主成员的默认值
Boolean false
Char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
一旦将变量作为类成员使用,就要特别注意由Java 分配的默认值。这样做可保证主类型的成员变量肯定得到了初始化,可有效遏止多种相关的编程错误。
分享到:
相关推荐
MyFileOutput.java 将键盘读入的文字保存到文件 MyPipedIO.java 管道流示例 MySequenceIn.java 顺序输入流示例 ObjectFileTest.java 序列化对象示例 ReadAndWrite.java 读入和写出数据 ReadAndWriteFile.java ...
import语句用于引入Java程序中需要使用的类或包,这些类或包是由Java编译器解析并在运行时加载的。 16. **在运行字节码文件中,使用 java 命令,一定要给出字节码文件的扩展名.class** 错误。在运行Java程序时,...
在Java中,变量扮演着至关重要的角色,用于保存程序运行时的值。 首先,我们需要了解Java中的数据类型。Java分为两种主要的数据类型:基本数据类型和引用数据类型。基本数据类型包括整型(byte, short, int, long)...
非RAM存储通常指硬盘等持久化存储,用于保存程序运行时的某些数据。 理解变量在栈和堆内存中的管理对于优化代码和避免内存问题至关重要。例如,频繁创建和销毁对象可能导致堆内存压力增大,而过大的栈内存可能导致...
常量则是在程序运行过程中不能修改的值,Java中可以通过`final`关键字来声明常量,常量名通常使用全大写字母和下划线分隔。 表达式是组合变量、常量和运算符的组合,用于计算或赋值。例如,`int result = a + b;`...
1. **声明变量**:在Java中,声明变量时需要指定其数据类型和变量名。例如,`int age;` 这句话声明了一个名为`age`的整型变量。变量名应遵循驼峰命名法,即单词首字母大写,例如`firstName`,且不能与关键字冲突,...
题目中给出了一个类A及其成员变量和方法的定义,询问了哪些调用是错误的,这涉及到对Java成员访问规则的理解。 以上知识点涵盖了Java多线程、序列化、面向对象设计、变量存储、类型转换、运算符优先级、方法存储、...
- **执行过程**: JVM 负责解释并执行字节码,处理程序运行中的各种资源分配与释放。 #### 3. JVM 内存模型 - **堆内存 (Heap)**: 主要用于存储对象实例,是所有线程共享的内存区域。 - **栈内存**: 每个线程私有,...
9.6利用反射获取运行时类信息293 9.6.1使用isInstance()方法判断所属类294 9.6.2获取成员方法信息295 9.6.3获取构造方法信息296 9.6.4获取类的成员属性297 9.6.5根据方法的名称来执行方法299 9.6.6创建新的...
《JAVA程序设计》期末考试涉及的知识点非常广泛,涵盖了Java语言的基础语法、类与对象、异常处理、内存管理、继承与接口、图形处理、程序控制流等多个方面。以下是这些知识点的详细解释: 1. **Java源代码与字节码...
运行时异常(RuntimeException)是程序运行时可能发生的问题,如除以零、空指针等,Java编译器不需要强制处理这些异常。而一般异常(Exception)包括非运行时异常,编译器要求必须捕获或声明抛出。 8. **Servlet...
Java中的异常处理机制用于捕捉和处理程序运行时可能发生的错误。分为受检异常(checked exceptions)和非受检异常(unchecked exceptions)。受检异常必须在方法声明中显式抛出或捕获,而非受检异常(如运行时异常)...
要创建一个既能作为 Applet 运行又能作为独立应用程序运行的 Java 类,只需确保该类同时包含 `main()` 方法和必要的 Applet 生命周期方法(如 `init()`, `start()`, `paint()` 等)。这样,当类作为 Applet 使用时,...
1. **运行时异常与一般异常**:运行时异常是在程序运行过程中出现的异常情况,通常是编程错误导致的,例如`NullPointerException`。非运行时异常是非正常状态,需要在程序中显式处理或声明抛出。 2. **Servlet的...
- **Exception**则表示程序运行时的异常情况,可以通过捕获异常进行处理。Java中的异常分为**checked exception**(编译时检查异常)和**runtime exception**(运行时异常),前者必须显式处理或声明抛出,后者则...
Java程序由类(Class)组成,每个类包含了一系列的方法(Method)和数据成员(Field)。一个标准的Java应用程序通常包含以下几个关键部分: 1. **源代码文件**:Java源代码通常保存为`.java`文件。例如,在Eclipse ...
- **发生时机**:运行时异常发生在程序运行过程中,而一般异常可以在程序执行的任何阶段发生。 #### 六、Servlet的生命周期与Servlet与CGI的区别 - **Servlet生命周期**: - 初始化:通过调用`init()`方法。 - ...