编程思想——第二章

来源:互联网 发布:淘宝食品备案流程图 编辑:程序博客网 时间:2024/05/17 03:42

一切皆对象


句柄操作对象:

操纵的标识符实际是指向一个对象的“句柄”(Handle),也称作一个“引用”,甚至一个“指针”。 

如果创建句柄的时候没有初始化,运行期的时候会报错--找不到对象;一般在创建句柄的时候就初始化


所有的对象必须创建:

new关键字


数据(变量)保存的位置:

特别注意内存的分配

    1.寄存器

访问数据最快的区域,位于处理器内部,数量有限,有编译器分配,程序中找不到,或者不能访问

    2.堆栈

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

堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。

创建程序时,Java 编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便向上和向下移动指针。

    3.

常规用途的内存池(也在RAM存储区)保存一般是java对象

和堆栈不同,“内存堆”或“堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。

创建一个对象时,只需用 new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。

付出一定的代价:在堆里分配存储空间时会花掉更长的时间!--------因该是值java gc

    4.静态存储

static关键字,也存在与RAM中,程序运行期间随时等候调用。

java对象永远不会置入静态存储区。

    5.常数存储

常数值通常直接置于程序代码内部。有的常数需要严格地保护,所以可考虑将它们置入只读存储器(ROM)。

    6.非RAM存储    

数据完全对立与程序外的,程序不运行也可以存在。主要有:流式对象 和 固定对象

对于流式对象,对象会变成字节流,通常会发给另一台机器。        固定对象,对象保存在磁盘中。


主要类型:

八个。设置主要原因:进行程序设计时要频繁用到它们;用 new 创建对象(特别是小的、简单的变量)并不是非常有效,因为 new 将对象置于“堆”里。

而是创建一个并非句柄的“自动”变量。这个变量容纳了具体的值,并置于堆栈中,能够更高效地存取。

主类型         大小         最小值                 最大值                         封装器类型

boolean     1 位              -                         -                                 Boolean

char           16 位     Unicode 0         Unicode 2 的 16 次方-1     Character

byte         8 位             -128                     +127                             Byte(注释①)

short         16 位      -2 的 15 次方     +2 的 15 次方-1                 Short(注释①)

int             32 位     -2 的 31 次方     +2 的 31 次方-1                     Integer

long         64 位     -2 的 63 次方         +2 的 63 次方-1                 Long

float         32 位         IEEE754                 IEEE754                             Float

double     64 位         IEEE754                 IEEE754                             Double

Void         -                     -                             -                             Void(注释①


用于进行高精度的计算:BigInteger 和 BigDecimal。

BigInteger 支持任意精度的整数。也就是说,我们可精确表示任意大小的整数值,同时在运算过程中不会丢失任何信息。

BigDecimal 支持任意精度的定点数字。例如,可用它进行精确的币值计算。


数组:

java可以保存数组初始化,以及索引外不被访问;在增加在运行期间对索引的校验开销;

创建对象数组时,实际创建的是一个句柄数组。而且每个句柄都会自动初始化成一个特殊值,并带有自己的关键字:null(空)。


对象的销毁:

存在时间

作用域(sccope)作用域同时决定了它的“可见性”以及“存在时间”。作用域是由花括号{}的位置决定的。

作用域定义变量在作用域结束前都可以使用

对象的作用域:Java 对象不具备与主类型一样的存在时间。用 new 关键字创建一个 Java对象的时候,它会超出作用域的范围之外。应为保存是堆中,有gc回收

但是创建的对象的句柄超过作用域,不能被使用。

运行期间传递和复制对象句柄

垃圾收集器:对象沾满内存。可防止在 C++里很常见的一个编程问题:由于程序员忘记释放内存造成的“内存溢出”。


数据类型:类

(type)关键字class

java编程其实是:定义类、制作那些类的对象以及将消息发给那些对象

包含:数据成员(变量)和成员函数(方法)[“自变量”和“返回值”]

主成员的默认值:

Boolean         false

Char               '\u0000'(null)

byte                 (byte)0

short             (short)0

int                     0

long                 0L

float                 0.0f

double             0.0d

自动初始化默认值的针对成员变量,对局部变量不适合

函数结构:返回类型 方法名( /* 自变量列表*/ ) {/* 方法主体 */}


方法的返回值,参数(传递的消息)


构建java程序:

命名问题,需要预防名字冲突。增加包名

import关键字

但请记住,Java 的所有代码都必须写入一个类中)。


static关键字

只有执行了 new 后,才会正式生成数据存储空间,并可使用相应的方法。

对于只是用存储区保存特定数据,不需要创建对象 可以是用static

特别是在定义程序运行入口方法 main()的时候。和其他任何方法一样,static 方法也能创建自己类型的命名对象

static修饰的方法和变量调用方式:1可以通过new创建的对象2直接通过类名调用


每个程序文件的开头,都必须放置一个 import 语句

默认导入java.lang.*包

运算符过载:即类似与int,float...可以通过+与string拼接


java注释:

多行注释:“/*”起头  ,“*/”结束                      

单行注释:“//”起头           

文档注释:  “/**”注释中   “*/”             

 提取注释的工具叫作 javadoc;不仅提取由这些标记指示的信息,也将毗邻注释的类名或方法名提取出来。

输出的是一个 HTML 文件

“文档标记”(Doc tags)是一些以“@”开头的命令,置于注释行的起始处(但前导的“*”会被忽略)。

注意 javadoc 只能为 public(公共)和 protected(受保护)成员处理注释文档。“private”(私有)和“友好”(详见 5 章)成员的注释会被忽略,

嵌入html:

/**

* <pre>

* System.out.println(new Date());

* </pre>

*/

 @see 引用其他类

所有三种类型的注释文档都可包含@see 标记,它允许我们引用其他类里的文档。对于这个标记,javadoc 会生成相应的 HTML,将其直接链接到其他文档。

格式如下:

@see 类名

@see 完整类名

@see 完整类名#方法名

注意 javadoc 不会检查我们指定的超链接,不会验证它们是否有效。

类文档标记

随同嵌入 HTML 和@see 引用,类文档还可以包括用于版本信息以及作者姓名的标记。类文档亦可用于“接口”目的

    1. @version

    格式如下:

    @version 版本信息其中,“版本信息”代表任何适合作为版本说明的资料。若在 javadoc 命令行使用了“-version”标记,就会从生成的 HTML 文档里提取出版本信息。

    2. @author

    格式如下:

    @author 作者信息

    其中,“作者信息”包括您的姓名电子函件地址或者其他任何适宜的资料。若在 javadoc 命令行使用了“-author”标记,就会专门从生成的 HTML 文档里提取出作者信息。

变量文档标记:

变量文档只能包括嵌入的 HTML 以及@see 引用。

方法文档标记

除嵌入 HTML 和@see 引用之外,方法还允许使用针对参数、返回值以及违例的文档标记。

    1. @param

    格式如下:

    @param 参数名 说明

其中,“参数名”是指参数列表内的标识符,而“说明”代表一些可延续到后续行内的说明文字。一旦遇到一个新文档标记,就认为前一个说明结束。可使用任意数量的说明,每个参数一个。  

    2. @return

    格式如下:

    @return 说明

其中,“说明”是指返回值的含义。它可延续到后面的行内。

    3. @exception

有关“违例”(Exception)的详细情况。简言之,它们是一些特殊的对象,若某个方法失败,就可将它们“扔出”对象。调用一个方法时,尽管只有一个违例对象出现,但一些特殊的方法也许能产生任意数量的、不同类型的违例。所有这些违例都需要说明。所以,违例标记的格式如下:

    @exception 完整类名 说明

其中,“完整类名”明确指定了一个违例类的名字,它是在其他某个地方定义好的。而“说明”(同样可以延续到下面的行)告诉我们为什么这种特殊类型的违例会在方法调用中出现。  

    4. @deprecated

    这是 Java 1.1 的新特性。该标记用于指出一些旧功能已由改进过的新功能取代。该标记的作用是建议用户不必再使用一种特定的功能,因为未来改版时可能摒弃这一功能。若将一个方法标记为@deprecated,则使用该方法时会收到编译器的警告。