《effectivejava》学习笔记
文章平均质量分 81
effectivejava学习笔记
取名很烂
这个作者很懒,什么都没留下…
展开
-
《Effective Java》第14条:在公有类中使用访问方法而非公有域
这一条应该在Spring开发中定义Bean中有明显的表现,以面向对象的原则,将field设为private,又向外提供getter与setter方法.这么做的目的是为了保持内部表示法的灵活性.阅读这一条内容,感觉这已经是一个默认的一个规则,所有的field尽量的保持隐藏,而访问这些field则通过方法进行操作...原创 2019-04-16 15:45:32 · 129 阅读 · 0 评论 -
《Effective Java》第13条:使类和成员的可访问性最小化
封装:封装的概念:封装,又名信息隐藏,设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰的隔离开来;然后模块之间只通过它们的API进行通信,一个模块不需要知道其他模块的内部工作情况.为什么需要封装封装可以有效的解除组成系统的各个模块之间的耦合关系, 使得这些模块可以独立开发,测试,优化,使用,理解和修改. 因为模块间的耦合程度低,这样程序员就可以并行开发,从而加快项目...原创 2019-04-16 14:47:06 · 127 阅读 · 0 评论 -
《Effective Java》第12条:考虑实现Comparable接口
实现Comparable接口的好处 当类实现了Comparable接口后,它就可以跟许多泛型算法(generic algorithm)以及依赖于该接口的集合实现(Collection implementation)进行协作.例如排序collections.sort(list,Comparable)Comparable的约定在下面的说明中sgn表示数学中signum函数,它根据...原创 2019-04-02 13:46:06 · 148 阅读 · 0 评论 -
《Effective Java》第11条: 谨慎地覆盖clone
一. 什么情况下能够用到clone() 当我们需要一个与原对象一模一样的副本时,并且对副本进行改动而不会影响到原对象时,需要使用到clone().二.深拷贝与浅拷贝 浅拷贝:浅拷贝只是单纯的对于对象的拷贝,对象属性对于其它对象的引用并没有进行拷贝(也就是说浅拷贝创建的对象和原来对象指向不同的地址空间,但是对象属性里面对其它对象的引用【引用属性】指向的还是同一...原创 2018-09-17 16:15:51 · 286 阅读 · 0 评论 -
《Effective Java》第10条:始终要覆盖toString方法
1. toString方法应该返回对象中包含的所有值得关注的信息2. 在实现toString时需要做一个决定:是否在文档中指定返回值得格式. 指定格式的好处是,它可以被用做一种标准的,明确的,适合人阅读的对象表示法,如果指定格式,最好再提供一个相匹配的静态工厂或构造器,以便程序员可以方便在对象和它的字符串表示法之间转换. 指定格式的坏处是:如果这个类被广泛使用了,那么一旦...原创 2018-08-28 13:03:54 · 182 阅读 · 0 评论 -
《Effective Java》第9条: 覆盖equals时总要覆盖hashCode
一. Object.hashCode通用约定 1. 在应用程序执行期间,只要对象的equals方法的比较操作所用到的信息没有被修改,那么对这同一个对象调用多次,hashCode方法都必须始终如一地返回同一个整数. 在同一个应用程序的多次执行过程中,每次执行所返回的整数可以不一致 2. 如果两个对象根据equals(Object)方法比较是想等的,那么调用两个对象总任...原创 2018-08-27 13:17:39 · 237 阅读 · 0 评论 -
《Effective Java》第8条覆盖equals时请遵守通用约定
一. 什么情况下需要覆盖equals方法 1.类的每个实例本质上是唯一的equals,对于代表活动的实体,而非值的类. 在我的理解中,Spring开发过程中Service,DAO等就可以不覆盖equals方法,而那些bean则是必须覆盖的. 2.不关心类是否提供了"逻辑想等(logical equality)"的测试功能,不需要提供覆盖,例如Java的java.uti...原创 2018-08-24 13:09:50 · 204 阅读 · 0 评论 -
《Effective Java》第7条避免使用终结方法
终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下,是不必要的.使用终结方法会导致行为不稳定,降低性能以及可移植性问题.终结方法有可取之处,但根据经验应该避免使用终结方法. 一. 终结方法的缺点 1. 终结方法并不保证会被及时的执行.从一个对象到变得不可到达开始到终结方法被执行的时间是任意长的. 2. 及时地...原创 2018-08-21 13:44:24 · 211 阅读 · 0 评论 -
《Effective Java》第6条:消除过期的对象引用
Java通常是通过垃圾回收功能管理内存的,但是还是会有一些情况会造成内存泄露一:当类自己管理内存时,应仔细内存泄露问题 当类自己管理内存时,例如stack类时,pop的元素需要及时的清空引用.其实在数据结构的练习中,stack抛出OutOfMemoryError也是一个比较常见的问题,解决方法就是将元素赋值为null,用来清空对象引用 当然在Java中清空对...原创 2018-08-17 13:26:17 · 154 阅读 · 0 评论 -
《Effective Java》第5条: 避免创造不必要的对象
一:String对象举例//这是一个极其错误的做法,浪费系统资源String s = new String("stringette"); 以上的做法属于极端的反例,在上述代码被频繁调用时,每次执行都会调用new String("stringette"),创建一个新的实例,浪费资源String s = "stringette"; 这是一个改进的例子,多次执行这一句代...原创 2018-08-16 13:31:09 · 117 阅读 · 0 评论 -
《Effective Java》第4条:通过私有构造器强化不可实例化的能力
有一种可能,敲代码的时候需要一只包含静态方法和静态域的类,例如:工具类. 在这种情况下,通常的做法是显示的写一个私有构造方法,这样在任何情况下都不能够实例化. 《Effective Java》还提供了一种不合适的做法(书中明确指出问题):企图通过将类做成抽象类来强制该类不可被实例化.但是该类可以被子类化,子类可以被实例化,甚至会误导用户这是专门为继承而写的类....原创 2018-08-15 13:15:19 · 162 阅读 · 0 评论 -
《Effective Java》第3条:用私有构造器或枚举类型强化Singleton属性
Singleton指仅仅被实例一次的类,它可以控制实例个数节省系统资源,当要求系统中类对象只允许一个实例对象,那么Singleton是一个好的选择. 《Effective Java》提供了3种Singleton的实现方式一:私有构造器 公有的静态成员是个final域. 私有构造器仅被调用一次,用来实例化公有静态成员. 由于只有私有构造器而...原创 2018-08-14 18:24:44 · 143 阅读 · 0 评论 -
《Effective Java》第2条:遇到多个构造参数时要考虑构建器
在一个类中有多个参数时,有哪些比较合适的方法来进行构造实例.《Effective Java》举了以下3个例子一:重叠构造器(几乎没用过的方式) 这个方法是将多个field进行排列,根据排列的结果写出个构造方法,不得不说这种方式我们需要写好多重复代码,而且通过这种方法代码的可读性将是灾难,因为颠倒参数顺序的构造方法都将是不同的方法,同时当参数多时,会有一长串的参数填写,还要注意其...原创 2018-08-14 13:38:05 · 238 阅读 · 0 评论 -
《Effective Java》第1条:考虑用静态工厂方法代替构造器
一:静态工厂方法获取实例相对于构造器的优势 1. 静态工厂方法有名称:当我们需要多个签名构造器时,在Java中只能够通过调整参数的位置,这样对用户不够友好,而使用静态工厂方法可以避开这个限制,通过不同名称明确的突出多个实例方法的区别。 2. 使用静态方法不用在每次调用的时候都创建一个实例,这将大大减少性能的损耗。因为多次频繁的创建相同的对象的代价很高。 在...原创 2018-08-13 13:27:47 · 511 阅读 · 0 评论