
Effective Java
文章平均质量分 68
OwenFang123
这个作者很懒,什么都没留下…
展开
-
创建和销毁对象 - 遇到多个构造器参数是要考虑用构建器
知识点:构建器 - Builder模式需要解决的问题:1.当对象需要多个参数时,怎么样的创建对象2.在创建对象的基础上要保证代码的可读性3.在创建对象的基础上除了保证代码的可读性,还要保证创建对象的不可变性(对象不可变性的好处后面会详细讲解)。1.当对象需要多个参数时,怎么样的创建对象我们常用的方式,采用多个构造器来创建需要不同参数的对象,这样会有几原创 2017-06-27 22:43:29 · 309 阅读 · 0 评论 -
类和接口 - 17,18,19节
知识点:1.要么为继承而设计,并提供文档说明,要么禁止继承。2.接口优于抽象类。3.接口只用于定义类型。1.要么为继承而设计,并提供文档说明,要么禁止继承。这节内容,我们简单的说一下,在设计一个类的时候,如果你想要这个类被继承,就要提供详细的文档说明,如果不想要这个类被继承就禁止继承。禁止继承的方式:a. 把类声明为finalb. 把构造器变成私原创 2017-07-09 18:36:41 · 173 阅读 · 0 评论 -
类和接口 - 20,21
知识点:1.类层次优于标签类。2.函数对象表示策略。1.类层次优于标签类。这节简单的总结一下,这一节的标签类并没有很好的利用Java面向对象的理念,把过多的东西放在一个类里面。利用类层次来优化标签类,代码可读性更强。算是一种重构代码的方式,当我们看到这种标签类的时候,就应该想到类层次优化。2.函数对象表示策略。这节我简单的总结一下,看下面代码,Com原创 2017-07-09 22:03:20 · 214 阅读 · 0 评论 -
类和接口 - 优先考虑静态成员类
知识点:1. 四种嵌套类。2. 什么情况下该用哪种嵌套类。1. 四种嵌套类嵌套类,定义在另一个类的内部的类。四中嵌套类如下:a.静态成员类b.非静态成员类c.局部类d.匿名类a.静态成员类看下面代码,Inner就是静态成员类,定义在类内部,用static修饰,静态成员类内部可以访问外层类的静态成员。class Stat原创 2017-07-09 22:18:11 · 332 阅读 · 0 评论 -
泛型 - 泛型基础
知识点:1.泛型的出现2.泛型基础(泛型方法,泛型类,泛型接口,无限制通配符类型,擦除)3.Set, Set, Set的区别在学习泛型这一章之前,我们应该先了解一下泛型基础。可以帮助大家理解这一章节的内容。1.泛型的出现泛型指的是参数化类型。什么叫参数化类型,我们来简单的看一下,看下面代码,两个方法,第一个方法只有a是形参,第二个方法类型和a都是形参。T可以原创 2017-07-17 22:50:37 · 252 阅读 · 0 评论 -
Effictive Java - 泛型
知识点:1.请不要在新代码中使用原生态类型。2.消除非受检警告。3.列表优先于数组。4.优先考虑泛型,优先考虑泛型方法。1.请不要在新代码中使用原生态类型。Java.1.5版本以后就增加了泛型。为什么不要使用原生态类型:a.泛型提供了安全性和表述性方面的优势,看下面代码,从代码我们就可以知道这个是String的List,并且如果你向里面保存其它的类型,编译直原创 2017-07-23 13:51:11 · 352 阅读 · 0 评论 -
枚举 - 枚举基础
在学习枚举和注解章节之前,我们先来看一下枚举和注解的基础知识。1.枚举类的方法。2.枚举的简单使用。 public static > T valueOf(Class enumType, String name) { T result = enumType.enumC原创 2017-07-25 00:00:32 · 531 阅读 · 0 评论 -
注解 - 注解基础
在学习Effictive Java注解几节的内容之前,我们先看一下Java注解的基础知识。1. Java的内置注解。2. 定义注解和元注解。3. 怎么使用注解。4. 自定义注解实现依赖注入。1. Java的内置注解。a.@Override这个我们非常熟悉,子类覆盖父类的方法是需要在子类方法上添加这个注解。如果你的方法拼写错误,编译器就会报错。原创 2017-08-03 00:01:45 · 467 阅读 · 0 评论 -
Effective Java - 枚举
1. 用enum代替int常量。2. 用实例域代替序数。3. 用EnumSet代替位域。4. 用EnumMap代替序数索引。1. 用enum代替int常量。与int常量相比,枚举简单易读,也更加的安全,功能更加强大。在我们日常的编码过程中要有用枚举来替代常量的意识。2. 用实例域代替序数。枚举是有顺序的,我们可以通过ordinal()来得到序号,原创 2017-07-25 22:40:35 · 226 阅读 · 0 评论 -
类和接口 - 13,14,15,16节
知识点:1.使类和成员的可访问性最小化。2.在公有类中使用访问方法。3.使可变性最小化。4.复合优先于继承。1.使类和成员的可访问性最小化。原创 2017-07-09 13:43:53 · 212 阅读 · 0 评论 -
对于所有对象都通用的方法 - 考虑实现Comparable接口
知识点:1.什么情况下要实现Comparable接口。2.Java类库中实现了Comparable的类。1.什么情况下要实现Comparable接口。首先compareTo没有在Object中申明,他是Comparable接口的一个方法。如果你的类有内在的排序关系,你就可以考虑实现这个接口。好处就是,你的这个类就可以与需要依赖于这个接口的集合实现一起使用。比如Trees原创 2017-07-08 21:01:00 · 300 阅读 · 0 评论 -
创建和销毁对象 - 考虑用静态工厂方法代替构造器
知识点:1.静态工厂方法2.静态工厂方法代替构造器的优势3.静态工厂方法代替构造器的劣势1.静态工厂方法 一个静态方法,这个方法不做别人事,只用来创建对象。 文中提到了工厂方法模式,对这个不了解的可以参考我的博客【设计模式——工厂模式】 2.静态工厂方法代替构造器的优势a.静态工厂方法,可以按照自己的用途进行命名,提高代码的可读性。相对于原创 2017-06-26 21:56:07 · 339 阅读 · 0 评论 -
创建和销毁对象 - 用私有构造器或者枚举类型强化Singleton属性
知识点:1.公有成员变量访问单例2.公有的静态方法访问单例3.枚举实现单例1.公有成员变量访问单例先看下面代码,私有构造器保证单例,类加载的时候实例化,访问通过访问公有的成员变量直接访问。public static class Singleton{ public static final Singleton instance = new Single原创 2017-06-27 22:59:29 · 277 阅读 · 0 评论 -
创建和销毁对象 - 通过私有构造器强化不可实例化的能力
这节内容比较简单,这里只做一个简单的说明。我们在写类的时候,如果只是一个工具类,类中的方法也都是静态方法,不想要别人可以实例化类,可以在该类中加一个私有的构造方法。但要注意以下几点:1.一定要加一个私有构造方法,不然编译器会自动生成一个无参公有的构造方法。2.私有构造方法,里面要写上调用会抛异常的代码,如果没写,别人可以通过反射生成你的实例。题外话:这条在你写开源包的时候很原创 2017-07-01 11:12:07 · 272 阅读 · 0 评论 -
创建和销毁对象 - 避免创建不必要的对象
我们知道无用的对象只会影响程序的效率,都知道要避免创建不必要的对象,怎么避免才是关键。这节给了以下情况下我们要注意避免,当然不仅限书中提到了,我们应该在平时的编码过程中有意识的注意到这一点:1. 重用不可变对象a. 看下面代码, "stringette" 本身就是一个String对象,有重复创建了一个s 对象。(关于Java String的详细讲解,我会在后面的文章中介绍)Stri原创 2017-07-01 12:11:39 · 358 阅读 · 0 评论 -
创建和销毁对象 - 避免使用终结方法
这一节我简单的介绍一下,不花过多时间在上面,原因是先阶段来说,用的是在太少,碰见的概率几乎为0.除非是作为安全网,或者为了终止非关键的本地资源,否则不要使用终止方法。题外话:后面我自己觉得不重要的章节,我只做简单的总结,不会花太多时间在这些章节上面。原创 2017-07-01 22:50:03 · 289 阅读 · 0 评论 -
对于所有对象都通用的方法 - 覆盖equals时请遵守通用约定
知识点:1.哪些情况下不需要覆盖equals方法。2.什么情况下需要覆盖equals方法。3.覆盖equals方法需要遵守的约定。4.写equals方法的诀窍。5.写equals方法的告诫。6.Java类库中的equals方法。原创 2017-07-03 23:21:03 · 372 阅读 · 0 评论 -
对于所有对象都通用的方法 - 覆盖equals时总要覆盖hashCode
知识点:1.hashCode的规范2.为什么要覆盖hashCode3.hashCode的写法4.Java类库中的hashCode方法1.hashCode的规范a.应用程序执行的时候,如果equals方法的比较操作所用到的信息没有被修改,那么对于这个对象的多次调用,hashCode的值应该是不变的。b.如果对象的equals相等,hashCode也必须相等原创 2017-07-06 22:36:12 · 477 阅读 · 0 评论 -
对所用对象的通用方法 - toString(), clone()
知识点:1.建议所有子类都覆盖toString()方法。2.Object, Integer, String的toString()方法。3.怎么实现clone方法。4.深clone和浅clone。5.拷贝构造器代替clone。1.建议所有子类都覆盖toString()方法。覆盖toString()方法的好处就是,我们可以从toString()方法中很方便知道对象的原创 2017-07-08 18:46:16 · 363 阅读 · 0 评论 -
Effictive Java - 注解
知识点:1.注解优先于命名模式。2.坚持使用Override注解。3.用标记接口定义类型。学习这几节之前,可以先学习一下前面的注解基础。我们来简单的看一下下面几点内容。1.注解优先于命名模式。JUnit最早的版本,测试的方法需要统一用test作为开头。这就是一种典型的命名模式。测试只会执行test作为开头的方法。这种方式并不是很好,有了注解以后我们应该用原创 2017-08-06 20:01:09 · 306 阅读 · 0 评论