Think in Java 第一次浏览 杂记_1~6章

参数化类型解决方案,叫做泛型。

异常处理机制并不是面向对象的特征,在面向对象编程出现前就已经存在。

Java解决客户端编程的方式,有一种是applet小程序,只在web浏览器中运行,作为网页的一部分被下载下来,但是这种解决方案有弊端,需要客户端浏览器内置java解释器。

寄存器是cpu的组成部分,用于存储数据,访问最快。

ram是随机访问存储器,位于内存,用于存储数据,访问速度其次。

堆栈和堆都位于ram中,但是使用内存的速度存在差异,一般来说堆栈的速度相对较高一些,但是Java语言提供了堆内存分配的解决方案。通过内存分配方式和GC两种机制来提高效率(没读完,目前知道的是这两种)。Java在堆中分配内存类似传送带,首先已使用的内存会尽量紧挨着,新分配内存时堆指针移到下一个紧挨着的位置,这意味着有专门的已使用内存和未使用内存会有专门的记录。虽然这带来了部分开销,但开销并不大。其次GC回收垃圾时,同样会对堆内存的使用进行处理,例如某些GC算法会将已使用内存重新排列为紧挨着的。

bigInteger支持任意精度的整数。

bigDecimal支持任意精度的浮点数。

方法名和参数列表组合构成一个方法的方法签名,唯一定位一个方法。这意味着编译器区分重载方法时,是通过方法签名来的,也就是说方法返回值并不能区分。也就解释了为什么重载时只是方法返回值不同为什么不能通过编译。

Java中对象也有别名现象。不同引用如果指向同一个对象,那么操作任意引用,对另一个引用都会产生影响。

Java中short类型和char类型都是两字节,但是所代表的最大值并不相同。由于char类型是无符号正数,所以最大可表示0xffff,而short类型是有符号整数,最大表示0x7fff。

Java的左移运算符,低位补0。Java的右移运算符,正数高位补0,负数高位补1。Java的无符号右移运算符,高位补0。

Java表达式中的最大数据类型代表了结果的数据类型,因为编译器会将表达式中其它小数据类型自动提升为最大数据类型。

Java中逗号作为操作符时,只在for循环的控制表达式中。

Java的构造器可以使用this关键字,并且可以使用this关键字调用其它重载的构造器,但是只能调用一个,不能多次调用多个构造器,且使用this关键字调用其它构造器时,必须放在构造器的第一行。其它方法不能调用构造器。

finalize方法,实在GC发生时会调用。这不代表着由于调用了finalize方法GC就能够执行。因此该方法并不是用来释放内存的,且并不适合任何由new创建的对象的内存释放。它只适合某些特殊方式创建的对象的内存释放,如Native Method 调用的其它编程语言产生的对象,这些对象GC并不会处理维护,因此可以在finalize方法中调用本地方法进行释放。

程序从运行到结束,GC并不是一定执行的,如果内存并没有被耗尽,GC可能不会执行。因为本身GC的执行也会带来一部分内存开销。这是得不偿失的。程序结束时会自动将资源归还,省去了GC的步骤。

Java中的不定参数,实际上是通过Object[]数组来实现的。在1.5以前不支持不定参数时,人们都是采用这种方式来达到这个功能。

关键字package 是为了解决构件捆绑到内聚的类库单元的问题。类库,指的是一个class文件的集合。编译单元,指的是源代码文件,也就是.java文件。构件,指的是编译单元中的公共接口,也就是public类,编译单元中可以有其它的类,这些类只是为了为public类提供支持的。 换句话说,package是为了使构件能够在类库中唯一定位到。(个人理解)

内聚和耦合,内聚指的是模块内部的各成分之间相关联的程度的度量,耦合指的是模块之间,各个模块之间相关联的程度的度量。

访问权限控制符的产生,实际上有两个主要原因。①不想让客户端程序员随意的修改类库中某些类的成员属性或传递的消息。②将接口和实现分离开来,由于客户端程序员最终使用的是接口,看不到接口的具体实现,因此如果类库中具体实现修改了实现的方式,也不会对客户端程序员产生影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值