
EffectiveJava
文章平均质量分 73
Newbie丶Chen
洒家的笔记本- -,努力将文章写得通俗易懂~~,以后复习也容易
展开
-
第五条建议:避免重复创建相同数据的对象(相同的对象)。
一、这是什么意思就是说,我们没必要多次创建数据值不改变的对象。二、举例需求:判断孩子是否在1900-2000年出生的。示例:①、首先了解一下Date、Calender、TimeZone、SimpleFormat类三、日期类的简单使用①、Date类作用:Java的日期类,不过已经过时,被Calender所取代。但是两个大致的方法是差不多的。1、创建构造方法原创 2016-08-15 15:51:58 · 1073 阅读 · 0 评论 -
第二十五条:列表优先于数组
一、数组与列表容器的比较①、协变与不可变类型:数组:是协变类型的。协变的意思就是Number是Integer的父类,那么Number[] data = new Integer[]; 是成立的。列表:是不可变类型。就是说无法List list = new List();无法发生协变才是正确的方式。原因: public static void main(String[]args){原创 2016-09-04 16:52:31 · 646 阅读 · 0 评论 -
第二十六条:优先考虑泛型
一、利用Object写的堆栈实例public class CommonStack { private static final int DEFAULT_SIZE = 16; //用来存储的数组 private Object[] objects = new Object[DEFAULT_SIZE]; //当前存储的位置 private int count = 0; public原创 2016-09-04 18:41:56 · 357 阅读 · 0 评论 -
第一条建议:利用静态工厂方法,不用构造器
一、什么是静态工厂方法返回该类实例的静态方法,与普通的工厂方法是不一样。不同之处在于:工厂方法:用来构造类的多个实例。静态工厂方法:返回类的实例化对象。举例:public class Garage { //创建静态工厂方法的形式。 public static Garage getInstance(){ return new Garage(); }}当然这原创 2016-08-13 18:11:03 · 487 阅读 · 0 评论 -
第二十八条:利用有限通配符提升API的灵活性
一、实例(一)我们有一个Stack类public Stack{ //有如下方法 public void put(E data); public E pop();}我们想增加能够将容器中的所有数据存储到栈中的方法:putAll(Iterator iterator)Stack类的完整实现:public class GenericsStack { priva原创 2016-09-05 11:29:42 · 444 阅读 · 0 评论 -
第二十七条:优先使用泛型方法
一、泛型方法的优点(一)优点:泛型方法能够推断出输入参数中的参数类型例:public E getType(E type){ return type;}//当使用该方法的时候,虚拟机能够推断出输入的参数的类型是什么,并返回该类型。举例:合并两个Set列表,用原生类型方法与泛型方法比较//原生类型方法public Set union(Set set1,Set set2){原创 2016-09-05 10:27:09 · 499 阅读 · 0 评论 -
第二十九条:优先考虑类型安全的异构容器
需求:容器中能够拥有多个类型参数。就是我能够在容器中添加Integer、String等参数,并能返回具体的类型。用途:比如说数据库中的字段都是不同类型,怎么将一条数据加入到容器中。如果有一个容器能够装多种类型的类就好了。普通容器无法实现:但是由于容器都被泛型参数化过了,导致只能够拥有固定的类型参数。这个需求,我把泛型设置为不就可以了吗,这容器不就能够装填好多东西了吗?但是虽然将泛型原创 2016-09-05 15:01:57 · 472 阅读 · 0 评论 -
第二条建议:遇到多个构造器参数时需要考虑构建器
一、多个构造器的缺点我们有时候可能会遇到编写大量构造器的方法public class Person { private final String name; private final String sex; private final int age; private final int weight; public Person(String name){ this(原创 2016-08-13 20:09:26 · 321 阅读 · 0 评论 -
第三条建议:用私有构造器和枚举强化Singleton属性
一、第一种实现Singleton的方式示例:public class MyThreadPool { //第二步:创建公有的唯一的自己的实例 public static final MyThreadPool POOL = new MyThreadPool(); private static ExecutorService executor; private static fina原创 2016-08-14 18:20:13 · 380 阅读 · 0 评论 -
第二十三条:不要在新代码中使用原生类型
一、泛型的术语类型参数:public class Request{} 其中的E就是类型参数。参数化类型:List 这叫做参数化类型。原生类型:List 没有泛型的类,叫做原生。补:在JAVA中是不推荐使用原生类型的,但是为什么不将原生类型去掉?因为泛型引入是在JAVA产生的20年后,为了向上兼容以前的代码,所以就保持了原生类型。二、泛型的优点①、能够在编译期间原创 2016-09-03 16:14:56 · 322 阅读 · 0 评论 -
第二十四条:消除非受检的警告
原因:有时候由于某种原因,需要将代码设置为非受监测的类型,所以需要消除警告,保证代码安全性。消除警告的条件?①、能够在逻辑上保证代码的安全性。②、消除警告不要在整个类中使用,要在出现问题的代码片段上使用。(缩小范围)举例:(复制) @SuppressWarnings("unchecked") public T[] copyArray(T[] a){ int arraySi原创 2016-09-03 20:10:18 · 392 阅读 · 0 评论 -
第二十二条:优先考虑静态成员类
一、嵌套类的种类1、静态成员类(在类内部的类)public class MyClass{ \\... public static class MyMember{ \\... }}2、成员类(静态与非静态的区别在于static)public class MyClass{ \\... public class MyMember{ \\...原创 2016-09-03 15:29:51 · 756 阅读 · 0 评论 -
第六条:消除过期的引用变量
为什么要消除过期的引用变量:因为JAVA是用垃圾收集机制回收内存的。当只有在变量未被任何类使用的情况下才会被回收。但是当我们编写程序的时候,往往会无意识的保持对象。导致垃圾回收机制无法回收,引发内存泄漏。一、未消除引用变量的例子用数组创建栈。public class Stack { private static final int SIZE = 16; private原创 2016-08-15 17:19:27 · 483 阅读 · 0 评论 -
第十四条建议:使类和成员变量的可访问性降到最低
一、什么叫做可访问性可访问性指的是:你的类的成员变量,在什么情况下能被其他类访问。我们都知道:java的修饰符:public 、protected、default、private。作用就不介绍了,可访问性依次降低。二、如何降低可访问性规则①、尽可能不让每个类或者成员变量被外界访问。(只要能弄成private,就不要弄成private以上的修饰符)也就是说:最好把每个成员变量弄成原创 2016-08-17 14:15:20 · 696 阅读 · 0 评论 -
第十五条:可变性最小化
一、将类设置为final优点:防止子类篡改父类的成员变量。使用类型:确保该类无需被继承,例如各种工具类就无需被继承,他们的类就可以被设置为final示例:public final class ImageLoader{ }二、将成员变量设置为final优点:同样是防止其他类篡改该变量。使用类型:确保该成员变量,初始化之后不会被改变的时候调用。例:原创 2016-08-17 16:18:40 · 282 阅读 · 0 评论 -
第十六条:复合优先于继承
一、什么是复合复合也可为称为装饰者模式,那么如何使用装饰者模式呢。首先:创建被装饰接口其次:创建被装饰类然后:创建装饰类那么我们就以装饰水果篮子为例。装饰类就是:Apple、Orange等水果 被装饰类就是:Basket首先创建被装饰接口(Basket):public interface Basket { //该方法展示篮子里面有什么 void s原创 2016-08-17 17:17:01 · 516 阅读 · 0 评论 -
第十八条:接口优于抽象类
一、接口与抽象类的区别接口:只允许定义方法,不允许实现方法。抽象类:允许定义方法,并允许实现某些方法。二、抽象类的缺点概述:由于抽象类是继承制,说明如果使用了抽象类会改变类的层级。(层级指的是类的继承关系)但是接口,就可以在任何层级上使用。这就导致了抽象类很多方法不如接口。①、接口容易被更新,而抽象类却不容易被更新。比如说:JAVA平台多了Comparable接口,原创 2016-08-18 17:35:28 · 706 阅读 · 0 评论 -
第十九条:接口只用来定义方法
一、接口的不良实现有些程序将创建方法以外的事情,放在接口中,比如说:在接口中定义常量。public interface FinalNumber { final int NUM_ONE = 1; final int NUM_TWO = 2; final int NUM_THREE = 3;}常量接口是对接口的不良使用。原因:实现了该接口的类,命名空间容易被污染。类实现原创 2016-08-19 15:34:12 · 560 阅读 · 0 评论 -
第二十条:类层次由于标签类
一、什么叫做标签类标签类指的是:类中由某个或某组常量(这就是标签),控制着这个类的行为。示例:public class Figure { //枚举类型 enum Shape{SQUARE,CIRCLE}; private double radium; private double width; private double height; private Shape t原创 2016-08-19 16:09:42 · 419 阅读 · 0 评论 -
第二十一条:函数对象表示策略
一、什么是函数对象①、类中只有唯一的一个方法,没有成员变量。②、该方法输入参数是其他类。③、内部逻辑是调用其他类的方法,完成某些任务。示例:比较两个String对象的长度。public class StrLenCompare{ public int compare(String first,String second){ return first.lengt原创 2016-08-19 16:39:41 · 343 阅读 · 0 评论 -
第四条建议:通过私有构造器强化不可实例化的能力
这个就是添加一个私有的构造方法,在之前的试验中都验证过了。原创 2016-08-14 19:37:29 · 386 阅读 · 0 评论