Effective Java部分读书笔记】的更多相关文章

最近在研读<Effective Java>一书,读书不做点笔记,感觉很容易就忘掉,于是用本篇博客来记录阅读此书的笔记. 郑重声明: 由于是<Effective Java>一书的笔记,所以大部分内容基本来自此书,还有一小部分是自己的理解. 第1条 考虑用静态工厂方法代替构造器 一般来说,获取一个类的实例,大家想到的都是通过该类的公有构造函数来new 一个实例,而第一条推荐我们可以考虑使用静态工厂方法来创建实例,这里的工厂方法并不直接对应于设计模式中的工厂方法模式. 静态工厂方法与构造…
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并发.JVM.分布式之类的.在今年面试的时候深受打击,到处都是问分布式.集群的?难道现在工作两三年的都这么牛逼了?都在搞分布式.集群之类的? 2016书单如下: 1.深入理解Java虚拟机:JVM高级特性与最佳实践---(已看,预计今年看三遍) 2.Oracle查询优化改写技巧与案例---(已看) 3…
java 有很多修饰类的属性的关键字:常用的static,final 说说final和static吧,平时在编程的时候,这两个关键字很多时候都觉得可有可无,最多的时候就是他们俩同时出现----定义常量的时候,其他时候:1.感觉没有对程序正常运行有任何影响 2.不使用这两个关键字看起来也没什么毛病. 这就是程序员和工程师的区别吧,迈出这一步,写出精品代码: 1.定义一个类的属性的时候,认真考虑这个属性是可变的还是所有对象通用的.将所有对象通用的属性添加static关键字. 下面来看一个实例: 判断…
大概看了一遍这个小节,其实这种感觉体验最多的应该是C/C++程序,有多杀少个new就得有多个delete. 一直以为Java就不会存在这个问题,看来是我太年轻. 感觉<Effective Java>里面每句话都是浓缩的精华,第一次看就想要明白是什么,为什么,怎么办,还是再去看看资料,<Effective Java>只是作为一个引言提出这一点. 消除过期对象的引用,推荐先看看博客. 1.内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间…
1.单例类到现在为止算是比较熟悉的一种设计模式了,最开始写单例模式是在C#里面,想要自己实现一个单例类,代码如下: public class Instance { private static readonly Instance instance = new Instance(); public static Instance Instance { get { return instance; } } private Instance() { } } 嗯,这是一贯的写法. <Effective…
刚开始看见这个标题的时候,我想到了python可以选择初始化参数的语法,C++.C#能有默认参数. 为什么Java什么都没有~~ 好吧,我们是使用构造器来实现它. 1.当一个类的构造函数需要很多构造函数的时候,编程人员往往容易混淆弄错,而且很多情况并不需要这么多的构造函数. 因此: 1)是用默认构造函数构造这个对象,并在之后使用setter方法给这个对象赋值. 但是对于多线程中线程安全考虑来说,这样做排除了使类不可变的可能性,并且想要排除这种bug也是十分困难的 (注:由于代码量的原因,并没有深…
Chapter 11 Serialization Item 74: Implement Serializable judiciously 让一个类的实例可以被序列化不仅仅是在类的声明中加上"implements Serializable"那么简单. 当你的类implements Serializable并发布出去后,你对这个类的改动的灵活性将会大大降低,它的serialized form成为了它exported API的一部分,如果你不设计一个custom serialized for…
Chapter 10 Concurrency Item 66: Synchronize access to shared mutable data synchronized这个关键字不仅保证了同步,还保证了可见性(visibility). 对于变量的读写是原子性的,除非变量类型是long或double.有一个我见过无数遍的例子就是设一个共享的boolean变量,然后从一个线程中断另一个线程的while循环.因为JVM会做优化,但它做优化的前提是假设下面这些代码都是在单线程下运行的,比如可能把wh…
对象的创建与销毁 ITEM1 使用静态工厂方法代替构造函数 传统的新建一个对象的方法是通过构造函数: Foo foo =new Foo(); 一个类也可以提供一个静态方法产生一个对象: Boolean flag=Boolean.valueOf(b); 这两种方法都可以产生一个对象,但是什么时候应该使用哪种方法?两种方法分别有什么优点和缺点呢? 对于使用静态方法产生一个对象来说: 1.静态方法可以自定义方法名 静态方法更能够通过方法名描述所返回的对象 有时候一个类包含多个构造函数,并且每个构造函数…
No57 只针对异常的情况才使用异常 异常应该只用于异常的情况下,它们永远不应该用于正常的控制流. No58 对可恢复的情况使用受检异常,对编程错误使用运行时异常 Java程序设计语言提供了三种可抛出结构(throwable):受检的异常(checked exception).运行时异常(run-time exception)和错误(error). 如果期望调用者能够适当地恢复,对于这种情况就应该使用受检的异常. 用运行时异常来表明编程错误.例如:数组访问下标越界. 错误往往被JVM保留用于表示…