您的位置:首页 > 其它

第二章一切都是对象

2011-10-31 22:35 288 查看
第二章 anything is object

1:用引用(reference)操作对象。


操纵的标识符实际上是对象的一个reference。

你拥有一个引用,并不一定需要有一个对象与他关联。有点汗!!

for example:没有电视机,遥控器亦可独立存在。

你只需携带遥控器(引用)而不是电视机(对象)。

用遥控器(reference)而不是电视机(Object)

所以要注意只有引用,没有对象的情况。

java语言的一个特性:字符串可以用带引号的文本初始化。

你必须对对象使用一种更通用的初始化方法???

2:必须由你创建所有对象。

存储到什么地方

特例:基本类型(primitive type)


1)register :这是最快的存储区。因为它位于不同于其他存储区的地方---处理器内部。(数量及其有限,所以register由编译器根据需求进行分配。)不能直接控制。

(2)stack :位于通用RAM(random-access memory,)中,但通过它的堆栈指针可以从处理其那里获得直接支持。

堆栈指针若向下移动,则分切新的内存:

若向上移动,则释放那些内存。仅次于register。

创建程序时:java编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。所以某些java数据存储与堆栈中(特别是reference),但是java对象不存储于其中。

(3)heap :一种通用性的内存池(RAM),用于存放所有的java对象。堆和栈最大的区别是:编译器可以不知道堆heap里面分配多少存储区域,也不必知道堆里存活多长时间。因此具有极大的灵活性。

代价:付出比stack更多的时间。

(4)static storage:静态存储里存放程序运行时一直存在的数据。可以同static来标识一个对象的特定元素是静态的,但java对象本身从来不会存放在静态存储空间里。

(5)constant storage:常量值通常直接存放在程序代码内部,因为他们一直不变的,所以security,可以选择将其存放在ROM中。

(6)non-RAM storage:如果数据完全存活在程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。

a:streamed object 和 persistent object。

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

persistent object:在persistent object种,对象被存放与磁盘上,因此,即使程序终止,他们仍旧可以保存自己的状态。这种存储方式的技巧在于:吧对象转化成可以存放在其他媒介上的事物,在需要时,可以恢复成常规的,基于RAM的对象。

*************************************

特例:基本类型(primitive type)

因为new将对象存储在heap种,所以对于小的简单的变量,往往不是很有效。

也就是说,不同new来创建变量,而是创建一个并非是“引用”的"自动"变量。这个变量拥有他的"值",并置于堆栈中,因此更加高效。

java要确定每种基本类型所占存储空间的大小。他们的大小并不像其他大多数语言那样随机器硬件架构的变化而变化。这也是java程序具有可移植性的原因之一。

这就是所谓的自动装箱。

基本类型: 大小 最小值 最大值 包装器类型

boolean Boolean

char Character

byte Byte

short Short

int Integer

long Long

float Float

double Double

char c ='x';

Character C = new Character(c);

Character C = new CHaracter('x');

***************************************************

high-precision number:

java提供两个高精度计算的类:BigInteger和BigDecimal。大体上属于包装器类的范畴,但两者都没有对应的基本类型。

我们以速度换取精度。

*****************************************************

java 中的数组(Array)

java确保数组会初始化,而且不能在他的范围之外被访问。这种范围检查,是以每个数组上少量的内存开销及运行时的索引校验为代价的。

for example:

当创建一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会被初始化为一个特定值,该值拥有自己的关键字null。一旦java看做null,就知道这个引用还没有指向某个对象。在使用任何引用前,必须为其指定一个对象,如果你试图使用一个还是null的引用,在运行时就会报错。

java 中的数组(Array)

3:永远不需要销毁对象

作用域:(scoping)

对象作用域(scope of object)


对象作用域(scope of object)

{

String s = new String ("a string");

}

reference s 在引用域终点就消失了。然而s指向的String对象仍旧继续占据内存空间。

GC监视用new创建的所有对象,并辨别那些不会再被引用的对象。然后释放对象的内存空间。

所谓的内存溢出:就是由于忘记释放内存而产生的问题。

4:创建新的数据类型:类

域field和方法method


class TypeName{

/**/

}

TypeName t = new TypeName();

***************************

域field和方法method

一旦定义了一个类,就可以在类中设置两种类型的元素:field (data member)和member function。

field可以使任意类型的对象,可以通过其引用域其进行通讯;也可以是基本类型种的一种。

如果field是一个对象的reference,那么就必须用一种被称为构造器的特殊方法进行初始化,以便于与一个实际的对象相关联。但若是一种基本类型,则可以在类中的field被定义处进行初始化。

**********************************

基本成员默认值:

若类的某个成员是基本数据类型,即使没有进行初始化,java也会确保它获得一个默认值。

boolean : false

char '\u0000'=null

byte (byte)0

short (short)0

int 0

long 0L

float 0.0f

double 0.0d

上述初始化的方法并不适用于“局部”变量(即并非是某个类的属性)。

5:方法method,参数argument,返回值return value

参数列表(argument list)


Java中的方法只能作为类的一部分来创建。

一种独特的说法:向对象发送信息。

argument list参数列表

returnType methodName(/*Argument list*/){

/*Method body*/

}

*********************

字符串中每个字符都是16位或2个字节。

6:构建一个java程序。

名字可视性

(具有唯一标示性)

运用其他构件

import

static关键字

class data 和 class method方法

代表哪些数据和方法只是为了整个类,而不是类的某个特定对象而存在的。

负责看护与隶属用以类型的实例群。

名字可视性

运用其他构件

static关键字

7:你的第一个java程序

编译运行

8:注释和嵌入式文档

注释文档

语法

嵌入式Html

一些标签实例

文档实例


(1): /*

*

*/

(2) //

(2) javadoc className.java 抽取信息,生成文档。

语法

javadoc 命令只能始于"/**"注释,结束与"*/"

嵌入式Html

一些标签实例

文档实例

9:代码风格

10:总结

11:练习
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: