
Effective java
文章平均质量分 76
chjttony
java软件工程师。
展开
-
《Effective java》读书笔记2——内存泄漏
JVM提供了垃圾回收器,java程序员再也不用想C/C++程序员一样整天为对象的清理工作而焦头烂额,但是并非说Java中不存在内存泄漏的情况,下面展示一个典型的内存溢出例子。使用数组作为底层数据结构实现一个Stack栈数据结构的容器,代码如下:public class Stack{ private Object[] elements; private int size = 0;原创 2012-04-21 18:58:38 · 2573 阅读 · 0 评论 -
《Effective java》读书笔记9——线程并发
synchronized同步关键字:synchronized同步关键字可以保证在同一时刻,只有一个线程可以执行某一个方法,或者某一个代码块。线程同步不仅可以阻止一个线程看到对象处于不一致的状态之中,还可以保证进入同步方法或者同步代码块的每个线程都看到由同一个锁保护的之前所有的修改效果。Java语言规范保证读或者写一个变量是原子性操作(虽然long和double的读写操作没有被规定为原子原创 2013-01-22 14:34:26 · 3559 阅读 · 4 评论 -
《Effective java》读书笔记8——线程安全级别和延迟初始化
Java中线程安全级别:1.不可变的(immutable):不可变的类的实例是不能被修改的,每个实例中包含的所有信息都必须在创建该实例的时候就提供,并在对象的整个生命周期内固定不变。不可变类不需要外部的同步,常见例子有String,long和BigInteger。为了使类成为不可变,需要遵循下面五条规则:(1).不提供任何会修改对象状态的方法(如setter方法等)。(2)原创 2013-01-18 13:12:22 · 3087 阅读 · 0 评论 -
《Effective java》读书笔记10——序列化
对象序列化是一个提供将对象编码成字节流,并从字节流编码中重新构建对象的框架,包括以下两个过程:序列化:将对象编码成字节流。反序列化:从字节流编码中重新构建对象。一旦对象被序列化后,对象的字节流编码就可以从一台正在运行的java虚拟机被传递到另一台java虚拟机上,或者被存储到硬盘上,以便以后发序列化时使用。序列化技术为远程通信提供了标准的线路级对象表示法,也为JavaBean提供了标准原创 2013-01-30 15:36:57 · 3155 阅读 · 0 评论 -
《Effective java》读书笔记7——异常
Java中异常的类体系结构如下:Throwable类是java语言中所有错误和异常的超类,它拥有两个子类:(1).Error:用于指示合理的应用程序不应该试图捕获的严重问题,例如java虚拟的错误程序无法处理,只能由java虚拟机自己处理。(2).Exception:用于指示合理的应用程序应该捕获的条件。Exception又分为:(1).Checked Except原创 2013-01-11 17:37:01 · 4012 阅读 · 2 评论 -
《Effective java》读书笔记6——方法重载
很多人分不清java的方法重载(Overload)和方法覆盖(Override),方法重载是方法名相同,而方法的参数不同(参数个数或者类型,注意不能通过参数名称和方法返回值来进行方法重载),编译器在编译的时候就已经确定了合适的目标方法,也称为早绑定或者静态分派;方法覆盖是子类拥有和父类相同签名的方法(包括参数和返回值),方法覆盖在编译时无法确定要调用的目标方法,只有在运行时由对象本事来确定合适的调原创 2013-01-06 13:30:27 · 2269 阅读 · 1 评论 -
《Effective java》读书笔记4——泛型
数组与泛型集合的区别:(1).数组是协变的,即如果Sub为Super的子类型,那么数组类型Sub[]就是Super[]的子类型;泛型是不可变的,即对于任何两个不同类型Type1和Type2,List既不是List的子类型,也不是List的超类型。Object[] objectArray = new Long[1];objectArray[0] = “I don't fit in”;原创 2012-12-31 15:13:36 · 3557 阅读 · 0 评论 -
《Effective java》读书笔记3——覆盖equals方法的通用约定
满足下列四个条件之一的就不需要覆盖equals方法:(1).类的每个实例本质上都是唯一的,如枚举等。(2).不关心类是否提供了“逻辑相等”的测试功能。(3).超类已经覆盖了equals方法,从超类集成过来的行为对于子类也是合适的。(4).类是私有的或者包访问权限的,可以确定它的equals方法永远不会被调用。当类具有自己特有的“逻辑相等”概念(不同于对象等同的概念),而且超类还原创 2012-12-25 13:52:08 · 3139 阅读 · 0 评论 -
《Effective java》读书笔记1——避免创建不必要的对象
Java中Sting很特别,有如下两种初始化方式:(1).String s1 = “This isstring1”;(2).String s2 = new String(“Thisis string2”);第一种字符串初始化方式,当有多于一个字符串的内容相同情况,字符串内容会放在字符串缓冲池中,即字符串内容在内存中只有一份。第二种字符串初始化方式,不论有没有字符串值相同,每次都会在原创 2012-04-21 18:56:16 · 2876 阅读 · 1 评论 -
《Effective java》读书笔记5——枚举
Java的枚举比C++/C#更加强大,它本身就是一个线程安全的单态模式,java的枚举可以添加字段和方法,也可以添加main方法。(1).枚举对象相同的行为方法:计算九大行星表面物体重量的枚举代码:public enum Planet{MERCURY(3.302e+23, 2.439e6),VENUS(4.869e+24, 6.052e6),EARTH(5.975e+24,原创 2013-01-04 17:18:32 · 2207 阅读 · 0 评论