think in java笔记_Thinking in java读书笔记 PDF 下载

主要内容:

第一章对象导论

1. 因为类描述了具有相同特征(数据元素、静态)和行为(功能、动态)的对象集合。public表示紧随其后的元素对任何人都是可用的,而private这个关键字表示除类型创建者和类型的内部方法之外的任何人都不能访问的元素。Private就像你与客户端程序之前的一堵砖墙,如果有人试图访问private成员,就会在编译时得到错误信息。篇protected关键字与private作用相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员。java中还有包访问权限。

2.在使用对象时,最关键的问题之一便是它们的生成和销毁方式。每个对象为了生存都需要资源,尤其是内存。在堆栈中创建存储空间和释放存储空间通常各需要一条汇编指令即可,分别对应将栈顶指针向下移动和将栈顶指针向上移动。创建堆存储空间的时间依赖于存储机制的设计。

第二章一切都是对象

2.1 用引用操纵对象(用地址指针操纵对象)

1. 操纵的标识符实际上是对象的一个“引用”(reference)。或者叫“地址”,句柄的东西。

2.你拥有一个引用,并不一定需要有一个对象与它关联。

如:String s;

如果向s发送一个消息,就会返回一个运行时错误。一种安全的做法就是:创建一个引用的同时便进行初始化(强烈建议)。如:String s = new String("");

2.2 必须由你创建所有对象。

2.2.1 存储到什么地方

1)寄存器。

2)栈。位于通用RAM(随机访问存储器):一级cache,二级cache.虽然某些JAVA数据存储在堆栈中——特别是对象引用,但是JAVA对象不存储其中。

3)堆(heap)。一种通用性的内存池(也存在于RAM中),用于存放所有的JAVA对象(对象本身)。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当你需要创建一个对象的时候,只需要new写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须要付出相应的代价-用堆进行存储分配比用栈进行存储存储需要更多的时间。

4)静态存储(static storage)。这里的“静态”是指“在固定的位置”。静态存储里存放程序运行时一直存在的数据。你可用关键字static来标识一个对象的特定元素是静态的,但JAVA对象本身从来不会存放在静态存储空间里。

5)常量存储(constant storage)。常量值(final)程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在嵌入式系统中,常量本身会和其他部分分割离开,所以在这种情况下,可以选择将其放在ROM中 (从硬盘加载源代码)

6)非RAM存储。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。在流对象中,对象转化成字节流。通常被发送给另外一台机器。在“持久化对象“中,对象被存放于磁盘上。

就速度来说,有如下关系:

寄存器 < 堆栈 < 堆 < 其他

2.2.2 特例:基本类型

基本类型不用new来创建变量,而是创建一个并非是引用的”自动“变量。这个变量直接存储”值“,并置于栈中,因此更加高效。这里仅指八种基本类型(长度固定)。

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

1、整数:包括int,short,byte,long ,初始值为0

2、浮点型:float,double ,初始值为0.0

3、字符:char ,初始值为空格,即'' ",如果输出,在Console上是看不到效果的。

4、布尔:boolean ,初始值为false。

基本型别大小最小值最大值

boolean----------------

char16-bitUnicode 0Unicode 2^16-1

byte8-bit-128+127

short16-bit-2^15+2^15-1

int32-bit-2^31+2^31-1

long64-bit-2^63+2^63-1

float32-bitIEEE754IEEE754

double64-bitIEEE754IEEE754

void

注意:表格里的^代表的是次方;

java采用unicode,2个字节来表示一个字符。

所有数值类型都有正负号。

byte(8bit)

基本类型具有包装类,使得可以在堆中创建一个非基本对象。用来表示基本类型。

char c ='x';//存放在栈

Character ch = new Character('x');

高精度数字

Java提供了两个高精度计算的类:BigInteger 和 BigDecimal。

BigInteger 支持任意精度的整数。

BigDecimal支持任何精度的定点数。

2.2.3  java中的数组

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

创建一个数组对象时,实际上是创建了一个引用数组,一旦Java看到null。就知道这个引用还没有指向某个对象。在使用任何引用前,必须为其指定一个对象;如果试图使用一个还是null的引用,在运行时将会报错。

2.3  永远不需要销毁对象

2.3.1 作用域:决定生命周期

作用域决定了在其内定义的变量名的可见性和生命周期。

{

int x = 12;

{

int x = 96;//报错。不同于java。

}

}

2.3.2 对象的作用域//存活于作用域之外

java对象不具备和基本类型一样的生命周期。当用new创建一个Java对象时,它可以存活于作用域之外。

Java有一个垃圾回收器,用来监视用new创建的所有对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值