您的位置:首页 > 编程语言 > Java开发

09 12 03Java SE学习笔记

2009-12-03 20:59 260 查看
变量的初始值及其作用域(scope):

一般作为成员变量都有其初始值,在这不做讨论了。

Java语言中的变量同其他语言一样也有作用域我们来看一个实例:

class Number
{
int x=12;
/*这里只有x这一个变量*/
{
int y=96;
/*在这里有x y两个变量*/
}
/*这里只有x这一个变量,y变量的声明无效*/
}
作为在作用域里定义的一个变量,它只有在那个作用域结束之前才

可使用.

<<----对面对对象的更深层的理解---->>
与其他面对对象语言相比Java语言是一种更纯粹的面向对象语言

在Java中任何东西都看作对象,但保留一个标识符来指向对象,这

个标识符就叫做"句柄"(handle)亦称作"引用"或"指针"[本人不提

倡用"指针"这个名词,这样容易产生混淆。因为Java中的指针不

提供给代码编写者使用,其指针和其他语言不太一样。但是应该知

道Java中是有指针的,把指针交给jdk来帮我们使用,这样不容易出

现像c++语言的错误]

Java中经常用一个句柄来操作一个对象.可将这一
情形想象成用遥控板(句柄)操纵电视机(对象)。只要握住这个

遥控板,就相当于掌握了与电视机连接的
通道。但一旦需要“换频道”或者“关小声音”,我们实际操纵的

是遥控板(句柄),再由遥控板自己操纵
电视机(对象)。如果要在房间里四处走走,并想保持对电视机的

控制,那么手上拿着的是遥控板,而非电
视机。
此外,即使没有电视机,遥控板亦可独立存在。也就是说,只是由

于拥有一个句柄,并不表示必须有一个对
象同它连接。

eg:Number n1;这里只是句柄,并不是对象。若此时用它来操作

其他事物会产生错误(编译期错误),因为此时该句柄没有和任何

东西连接(即没有"电视机")

new Number();创建对象,但对象没有附着在句柄上(这样以后操作

这个对象会有麻烦,造成创建一次无法二次使用)

n1=new Number();把对象赋给一个句柄.此时就可以用句柄来操作

对象了。

---new 的意思是:“把我变成这些对象的一种新类型”(所以我

们也称句柄为对象变量)

当然Java中并非所有类型都有编程人员自己来创建(但自行创建有

用的类是Java程序设计的关键),Java中也提供了一些现成类型

(如

String)[我们定义一个类就是创建了一种新的数据类型]

对象数据保存到什么地方:
(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 的支持。未来的版本甚至可能提
供更完整的方案。

我们说Java是纯面向对象的,那么在Java程序中有没有不是对象

的呢?
答案是肯定的,Java中提供了8中基本类型(都有其封装

类型),这些类型的大小不能随便更改,这也是Java程序由很强移

植能力的一个原因。

综上所述我们可以看到用Java语言设计来的程序是相当健壮的。

----本篇笔记中有的摘自《Thinking in Java》,因为我觉得里面

的经典实例或解说是不能用通俗语言来代替的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: