effectiveJava学习笔记
文章平均质量分 88
记录下自己的学习过程,编写出优雅的代码
Esmussssein
https://github.com/esmusssein777
展开
-
effectiveJava学习笔记:创建和销毁(一)
1、考虑使用静态方法代替构造器 构造器:理解构造器之前,首先我们需要知道Java中为什么要引入构造器,以及构造器的作用。假设我们每一次编写一个类都要执行一个initialize()方法,该方法是提醒你,在使用对象之前,应首先调用initialize()方法进行初始化,这就意味着每一用户都能去执行这个方法。Java中引入构造器,确保每一个对象都得到初始化,Java在有能力操作对象之前,...原创 2018-08-16 20:16:18 · 393 阅读 · 0 评论 -
effectiveJava学习笔记:创建和销毁(二)
1、消除过期的对象引用如果你从使用手动内存管理的语言(如C或c++)切换到像Java这样的带有垃圾收集机制的语言,那么作为程序员的工作就会变得容易多了,因为你的对象在使用完毕以后就自动回收了。当你第一次体验它的时候,它就像魔法一样。这很容易让人觉得你不需要考虑内存管理,但这并不完全正确。// Can you spot the "memory leak"?public class Sta...原创 2018-08-27 19:10:02 · 250 阅读 · 0 评论 -
详细解释final和static
我们首先谈一谈final用法。final关键字可以用来修饰类、方法和变量1.修饰类 使用final来修饰的类叫作final类。final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。下面是final类不能被继承的的实例final class PersonalLoan{ }class CheapPer...原创 2018-08-27 20:43:35 · 445 阅读 · 0 评论 -
详细解释Java内部类
为什么要使用内部类?在《Think in java》中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。 在我们程序设计中有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说...原创 2018-08-30 20:55:44 · 159 阅读 · 0 评论 -
effectiveJava学习笔记:覆盖equals时遵守的约定
hashCode 方法用于散列集合的查找,equals 方法用于判断两个对象是否相等。我们为什么需要重写hashCode()方法和equals()方法?有时在我们的业务系统中判断对象时有时候需要的不是一种严格意义上的相等,而是一种业务上的对象相等。在这种情况下,原生的equals方法就不能满足我们的需求了.我们所知道的JavaBean的超类(父类)是Object类,JavaBean中的eq...原创 2018-09-15 16:41:21 · 161 阅读 · 0 评论 -
effectiveJava学习笔记:类和接口(一)
一、使类和成员的可访问性最小化对于类对于类,只有public和package-private两种访问级别。package-private是缺省的,也就是默认的。1.对于顶层的类来说,只有包级私有和公有两种可能,区别是包级私有意味着只能在当前包中使用,不会成为导出api的一部分,而公有意味着导出api,你有责任去永远支持它。所以,为了使访问最小化,能包级私有就应该声明为包级私有。2....原创 2018-09-17 20:16:50 · 236 阅读 · 0 评论 -
effectiveJava学习笔记:类和接口(二)
一、复合优先于继承为什么复合优先于继承? 1.继承违反了封装原则,打破了封装性 2.继承会不必要的暴露API细节,称为隐患3.继承限定了类的性能,它会把它的缺陷传递给子类下面的代码通过继承来试图记录插入元素的数量。HashSet包含两个可以增加元素的方法,add和addAll。因此这两个方法都需要覆盖。package com.ligz.Chapter4.Item16;imp...原创 2018-09-20 09:30:27 · 429 阅读 · 0 评论 -
effectiveJava学习笔记:泛型(一)
先给大家列出需要的术语在新代码中(jdk1.5以后)不要使用原生态的类型。为什么会有泛型 list<E>如果没有泛型的话,我们从一个没有定义类型的集合里面取数据的时候就不知道是什么类型,强制转换会出现ClassCastException异常这时候原生态类型就需要升级->泛型,有了泛型的规约这种情况就会避免了简单说来,就是在运行前即可发现错误。原生态的L...原创 2018-10-17 16:23:44 · 215 阅读 · 0 评论 -
effectiveJava学习笔记:泛型(二)
优先考虑泛型 使用泛型比使用需要在客户端代码中进行装换的类型来的更加安全,也更加容易。在设计新类型的时候,要确保他们不需要这种装换就可以使用。这通常意味着要不类做出泛型的,只要时间允许,就把现有的类型都泛型化。这对于类型的新用户来说会变得更加轻松,更不会破坏现有的客户端。编写自己的泛型会比较困难一些,但是值得花些时间去学习如何编写。一般来说,将集合声明参数化,以及使用JDK所...原创 2018-10-18 11:40:09 · 337 阅读 · 0 评论 -
effectiveJava学习笔记:枚举
使用枚举代替int常量在枚举类型出现之前,一般都常常使用int常量或者String常量表示列举相关事物。如:public static final int APPLE_FUJI = 0;public static final int APPLE_PIPPIN = 1;public static final int APPLE_GRANNY_SMITH = 2;public sta...原创 2018-10-18 20:16:01 · 212 阅读 · 0 评论 -
effectiveJava学习笔记:注解
我们在谈注解前,顺便先谈一谈Java反射Java反射: 在运行状态中,对于任意一个类,都能知道这个类所有的属性和方法,对于任何一个对象,都能调用他的属性和方法。并且能改变属性。 反射机制允许程序在运行时取得任何一个已知的名称的class内部信息,包括修饰、属性和方法。并且在运行时改变属性或者是调用方法。那么我们便可以更灵活的编写代码,代码可以在运行时装配,无需在组...原创 2018-10-23 19:04:38 · 305 阅读 · 0 评论 -
effectiveJava学习笔记:方法(一)
检查参数的有效性1、一般在方法执行之前先检查参数的有效性,如果参数值无效,那么很快它就会失败,并且清楚的抛出合适的异常。如果这个方法没有检查参数的异常,那么可能在方法处理中出现令人费解的异常。更糟糕的有可能是,方法可以正常返回,但是却使得某个对象处于被破坏的状态.2、对于公有方法,可以在Javadoc中的@throw标签来说明违反异常时所抛出的异常类型3、非公有方法通常应该使用断言...原创 2018-10-29 18:18:31 · 167 阅读 · 0 评论 -
effectiveJava学习笔记:方法(二)
慎用重载在Java中,同一个类中的多个方法可以有相同的方法名称,但是有不同的参数列表,这就称为方法重载(method overloading)。参数列表又叫参数签名,包括参数的类型、参数的个数、参数的顺序,只要有一个不同就叫做参数列表不同。如下面的例子:public class Demo { //一个普通得方法,不带参数,无返回值 public void add(){ ...原创 2018-10-30 16:36:35 · 165 阅读 · 0 评论 -
effectiveJava学习笔记:通用程序设计(一)
将局部变量的作用域最小化其实大部分人还是在第一次使用变量的时候声明变量的,在开头就将所有变量声明的还没见过。要使局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方声明。但是,这里书中讲到了for循环优于while循环,值得我们注意。for循环将变量声明在循环内,不会在后面引起手残的错误。for (Element e : c) { doSomething...原创 2018-10-30 20:07:19 · 162 阅读 · 0 评论 -
effectiveJava学习笔记:通用程序设计(二)
当心字符串连接的性能由于String是final的,不可变,他内部每次拼接都会创建一个StringBuffer对象,这样你如果拼接n次,那么他创建了n次对象,性能低下,而StringBuilder只在外面创建了一个对象,其他直接append字符串即可。所以,我们在循环中拼接字符串的时候要尤其注意,这时候,我们一般会选择StringBuffer或者StringBuilder,我们需要了解...原创 2018-11-01 19:48:40 · 169 阅读 · 0 评论 -
effectiveJava学习笔记:异常(一)
下面是对异常的详细解释Java 中的异常和处理详解 只针对异常的情况才使用异常try { int i = 0; while(true){range[i++].climb();} } catch (ArrayIndexOutOfBoundsException e) { } 这段代码有什么作用?看起来根本不明显他没有真正被使用的原因是没有更好的进行优化。事实...原创 2018-11-04 21:01:41 · 247 阅读 · 0 评论 -
effectiveJava学习笔记:序列化
谨慎地实现Serializable序列化:将一个对象编码成一个字节流,通过保存或传输这些字节流数据来达到数据持久化的目的; 反序列化:将字节流转换成一个对象;1.序列化的含义和作用。序列化用来将对象编码成字节流,反序列化就使将字节流编码重新构建对象。 序列化实现了对象传输和对象持久化,所以它能够为远程通信提供对象表示法,为JavaBean组件提供持久化数据。2.序列化的危害1...原创 2018-11-04 21:01:21 · 369 阅读 · 0 评论