Java编程思想读书笔记之一切皆对象

一切皆对象

Java程序运行时,数据保存到哪里

  • 寄存器
    这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。

  • 堆栈中
    驻留于常规 RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。


  • 一种常规用途的内存池(也在 RAM 区域),其中保存了 Java 对象。

  • 静态存储
    这儿的“静态”(Static)是指“位于固定位置”(尽管也在 RAM 里)。可用static关键字指出一个对象的特定元素是静态的。但 Java 对象本身永远都不会置入静态存储空间。

  • 常数存储
    常数值通常直接置于代码内部。

  • 非RAM存储
    若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。
    其中两个最主要的例子便是“流式对象”和“固定对象”。

特殊情况,主要类型

JAVA决定了每种类型的大小,这些数据类型的大小并不随着机器结构的变化而变化。这种大小的不可更改正是 Java 程序具有很强移植能力的原因之一。

主类型大小最小值最大值封装器类型
boolean1--Boolean
char16Unicode 0Unicode 2 的 16 次方-1Character
byte8-128127Byte
short16-2 的 15 次方+2 的 15 次方-1Byte
int32-2 的 31 次方+2 的 31 次方-1Integer
long64-2 的 63 次方+2 的 63 次方-1Long
float32IEEE754IEEE754Float
double64IEEE754IEEE754Double

作用域

对于在作用域里定义的名字,作用域同时决定了它的“可见性”以及“存在时间”。在 C,C++和 Java 里,作用域是由花括号的位置决定的。


{ 
  int x = 12; 
  /* only x available */ 
  { 
    int q = 96; 
    /* both x & q available */ 
  } 
  /* only x available */ 
  /* q “out of scope” */ 
}

注意尽管在 C 和 C++里是合法的,但在 Java 里不能象下面这样书写代码:


{ 
  int x = 12; 
  { 
    int x = 96; /* illegal */ 
  } 
} 

字段和方法

一旦将变量作为类成员使用,就要特别注意由Java分配的默认值。这样做可保证主类型的成员变量肯定得到了初始化(C++不具备这一功能),可有效遏止多种相关的编程错误。

然而,这种保证却并不适用于“局部”变量——那些变量并非一个类的字段。所以,假若在一个函数定义中写入下述代码:

int x;

那么 x 会得到一些随机值(这与C和C++是一样的),不会自动初始化成零。我们责任是在正式使用 x 前分配一个适当的值。如果忘记,就会得到一条编译期错误,告诉我们变量可能尚未初始化。

这种处理正是 Java优于 C++的表现之一。许多 C++编译器会对变量未初始化发出警告,但在 Java 里却是错误。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值