![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Effective Java
初中生
这个作者很懒,什么都没留下…
展开
-
学习effective java-14类和接口之在公有类中使用可访问的方法,而不是使用公有域
该知识点是自己从书籍中学习的笔记。对于下面的代码:public class Test14 { public int x; public int y;}这是很不好的表现,因为该类的x、y可以被任意访问和修改,直接就暴露了信息给客户,没有做到封装的效果。你应该使用setter和getter的方式来设置和访问其中的值,修改代码如下:public class Test1原创 2012-01-05 17:07:01 · 732 阅读 · 0 评论 -
学习effective java-23泛型之在新代码中不要使用原生类型
该知识点是自己从书籍中学习的笔记。从jdk1.5版本开始,java就引入了泛型。在没有泛型之前,从集合中取出的对象都必须经过转型,才能够达到使用。在jdk1.5之前,如果往集合中插入了不同类型的对象的话,那么在遍历的时候就可能引起运行时转型失败。泛型定义:A class or interface whose declaration has one or more type paramete原创 2012-01-11 17:05:18 · 585 阅读 · 0 评论 -
学习effective java-11对所有对象共同的方法之覆写clone方法时请慎重考虑
该知识点是自己从书籍中学习的笔记。 Cloneable接口最开始设计目的是打算作为最小的clone接口,如果对象实现了它的话,那么就说明该对象具有clone的权限。但是实际上该接口并没有达到此要求,因为该接口里面什么也没有。但是Object中有clone方法,并且是protected。 不能够因为一个对象实现了Cloneable接口,就可以通过反射的方式来调用clone方法。原创 2012-01-05 15:08:28 · 527 阅读 · 0 评论 -
学习effective java-10对所有对象共同的方法之覆写toString方法
该知识点是自己从书籍中学习的笔记。 在大多数情况下,Object提供的toString方法代表的内容并不能够满足用户的需要,因此需要覆写。Object的toString方法如下: public String toString() { return (new StringBuilder()).append(getClass().getName()).app原创 2011-12-31 14:19:29 · 372 阅读 · 0 评论 -
学习effective java-9对所有对象共同的方法之覆写equals方法时请同时覆写hashCode
该知识点是自己从书籍中学习的笔记 在很多情况下,如果覆写了equals方法,但是未覆写hashCode话,会导致错误发生。而这种错误发生debug是很困难的。如果未覆写hashCode的话,那么HashMap,HashSet,HashTable集合类将会有很大的问题。 对于hashCode有这样的规约: 1. 如果一个对象的equals作比较并且该对一直未被修改的话,那么该对象原创 2011-12-29 17:47:35 · 286 阅读 · 0 评论 -
学习effective java-5创建和销毁对象之避免创建不必要的对象
该知识点是自己从书籍中学习的笔记。 1.重复使用同一对象比每次创建与该对象功能一样的新对象好。重复使用对象效率更快、更优雅。如果一个对象是一直不变的话,最好是重复使用。 比如下面的使用就不太好: String s = new String(“Hello”);//不太好,每次都会创建新的String对象,而该对象是不需要的。 可以替换成:String s = “Hello”原创 2011-12-27 16:48:38 · 299 阅读 · 0 评论 -
学习effective java-3创建和销毁对象之利用私有构造方法或枚举类型来强化单例的属性
该知识点是自己从书籍中学习的笔记。单例: 是指类只能够被实例化一次。 单例通常是表示一个惟一的系统组件,如widows管理者或者文件系统。将一个类制作成单例对于测试用户会变的困难,因为替换掉一个单例的模拟实现类是不太可能的,除非该单例实现了一个作为它自己类型的接口。实现方法: 在jdk1.5之前,有两种方式来实现单例,这两种方法都是基于构造方法是私有的和原创 2011-12-27 14:52:49 · 631 阅读 · 0 评论 -
学习effective java-2创建和销毁对象之当类有多个构造参数时,请考虑使用一个builder来创建对象
该知识点是自己从书籍中学习的笔记。背景: 当类的构造方法有很多参数(超过3个)或者参数类型基本是一样时,这时使用静态工程方法或者构造方法来创建对象,并不合适,因为客户在使用该类创建对象时,必须清楚每个参数代表的意义,稍不注意就会将参数值写错或者参数不够。以下例子都是以Student类为基础,该类的必须成员属性:id(学生编号),name(姓名);可选成员属性:address原创 2011-12-27 12:37:10 · 523 阅读 · 0 评论 -
学习effective java-13类和接口之使类和成员的可访问性减少到最小
该知识点是自己从书籍中学习的笔记。 一个好的设计就在于它与其他模块的交互仅仅是通过api来交互的,从不关心其具体实现细节。就是说信息隐藏和封装性较好。 通过修饰符可以做到信息的封装,目前有四种修饰符: 私有(private)--仅仅本类可以访问。 保护(protected)--仅仅本类以及子类可以访问。原创 2012-01-05 16:39:21 · 352 阅读 · 0 评论 -
学习effective java-4创建和销毁对象之利用私用构造方法强化类的非实例化
该知识点是自己从书籍中学习的笔记。 有的时候,我们想写一个包含静态方法和静态成员的类,而该类不允许被实例化。 如果将类声明为抽象的话,使用该类的时候可以不被实例化,但是该类可以被继承,子类可以实例化该类,而且在很多情况下,用户会认为这是继承关系,而不是非实例化方式。因此这种方法不行。 在默认情况下,类的构造方法是default的,如果将其声明成private的话,那么该类原创 2011-12-27 15:31:36 · 520 阅读 · 0 评论 -
学习effective java-8对所有对象共同的方法之覆写equals方法时请遵从一般规约
该知识点是自己从书籍中学习的笔记背景 Ojbect的equals方法代表的是引用是否引用的同一对象的相等性测试。在以下情况下,Object的equals方法是不必覆写的:ü 类的每个实例都是独一无二的。比如说线程,线程代表的是活动实体而不是值。此时Object的equals方法足以是满足该要求的。ü 当用户并不关心逻辑是上的相等性的时候,可以不覆写equals方法。比如说一原创 2011-12-29 16:50:50 · 513 阅读 · 0 评论 -
学习effective java-22类和接口之优先考虑静态成员类
该知识点是自己从书籍中学习的笔记。嵌套类就是在类中定义的类,嵌套类仅仅是为它的外部类服务的。如果还需要给其他外部的类服务的话,那么就需要将该嵌套类提升一个层次。目前有四种嵌套套:静态成员类,非静态成员类,匿名类,局部类。除第一种类外,其他都可以成为内部类。静态成员类可以看作仅仅是外部类的一个静态成员,如果静态成员类被声明为private的,那么该类就只能够在外部类的内部中使用。静态成员类只原创 2012-01-11 15:37:50 · 740 阅读 · 0 评论 -
学习effective java-20类和接口之类层次优于标签类
该知识点是自己从书籍中学习的笔记。1.标签类是指类中定义了一个变量,使用该变量的值控制着该做什么动作。如下:public class Figure { enum Shape { RECTANGLE, CIRCLE }; final Shape shape; double height; double width; doub原创 2012-01-11 15:36:37 · 536 阅读 · 0 评论 -
学习effective java-12对所有对象共同的方法之考虑实现Comparable
该知识点是自己从书籍中学习的笔记。 先说明compareTo方法并不包含在Object中,它是Comparable接口中唯一的一个方法。该方法和Object的equals有很多相似之处。 实现Comparable可以帮助我们很快的查询到想要的值、提高运算效率等等好处。具体好处可以需要根据业务而定。 对于对象中的数据类型是引用类型进行比较的话,则需要引用调用c原创 2012-01-05 15:47:58 · 283 阅读 · 0 评论 -
学习effective java-7创建和销毁对象之避免使用终结器(finalizers)
该知识点是自己从书籍中学习的笔记背景终结器的理念是允许 Java 方法释放任何需要返回到操作系统的本机资源。使用Finalizers会带来一些不可预期的危险、古怪的结果、性能降低、移植性问题,所以通常情况下,作为一种规则,都不要使用Finalizers。当然Finalizers是有一点作用的。在c++,通常是使用析构函数来回收已经分配给对象的资源或者其他资源。在java中,是自动回收不原创 2011-12-28 19:56:29 · 612 阅读 · 0 评论 -
学习effective java-1创建和销毁对象之静态工厂方法
该知识点是自己从书籍中学习的笔记。静态工厂方法定义:类提供一个静态方法,来返回该类的实例。代替使用公有构造方法的方式来获取类的实例。例子:public static Boolean valueOf(boolean b) {return b ? Boolean.TRUE : Boolean.FALSE;}优点:1. 类的构造方法的名字必须要和类名字一样,但是静态工厂原创 2011-12-26 17:07:27 · 624 阅读 · 0 评论 -
学习effective java-16类和接口之复合优于继承
该知识点是自己从书籍中学习的笔记。与方法调用不同,继承打破了类的封装特性。使用继承估计会出现以下问题:1. 如果父类发生了变化,那么子类也需要检查是否需要更新。2. 开始时,子类有一个方法,而后父类增加了与子类一摸一样的方法,那么这个时候就相当于是子类重写了父类的方法,有可能并不是客户想要的结果。如果仅仅是返回类型不一致的话,还会造成编译错误。如果要编写一个类的话,最好是将其要原创 2012-01-06 16:33:48 · 1523 阅读 · 0 评论 -
学习effective java-18类和接口之接口优于抽象类
该知识点是自己从书籍中学习的笔记。 如果一个方法是抽象方法的话,那么该类一定是抽象类,并且该类的类名前必须加abstract。抽象类中的抽象方法也必须加abstract。 接口可以多继承,而抽象类不能够。将抽象类和接口混合使用,可以构建出骨架类。 接口和抽象各有各自的好处与缺点:当接口增加一个方法的时候,那么它的实现类也必须增加对该方法的实现,这会打破原有的类设计,原创 2012-01-06 17:32:59 · 360 阅读 · 0 评论 -
学习effective java-15类和接口之使可变性减少
该知识点是自己从书籍中学习的笔记。 不可变类是一个其类实例不能够被修改的简单类。Java平台提供了很多不可变类:String、装箱好的原始数据类型、BigInteger、BigDecimal。使用不可变类是更安全的。为了使一个类成为不可变类,需要以下几个条:a. 不提供任何修改该对象状态的方法。b. 确保该类不能够继承,在该类上加final即可。这样可以防原创 2012-01-06 16:33:17 · 429 阅读 · 0 评论 -
学习effective java-17类和接口之要么为继承而设计,并提供文档说明,要么就禁止继承
该知识点是自己从书籍中学习的笔记。第16条告诉了我们对一个不是继承而设计并且没有文档的类是很危险的。那么一个为了设计而使用继承并且有很好的文档则应该做以下事情:该类的文档必须精确地说明每个改写的方法作用以及影响。好的API文档:应该是描述该方法做了什么工作,而不是如何做的。一个为了继承而设计的类(超类)应该是:a.为了允许被继承,无论是直接还是间接,构造方法都不能够调用非final原创 2012-01-06 16:34:12 · 672 阅读 · 0 评论 -
学习effective java-19类和接口之接口只是用来定义类型
该知识点是自己从书籍中学习的笔记。 当一个类实现了一个接口的时候,这个接口被用作一个类型,通过该类型可以引用这个类的实例。常量接口,在接口中全是public static final的。如果一个类实现了这样的接口,那么就可以不通过类名+常量的模式来访问常量了。最好不要使用接口来导出常量,这种方式不好,比如说当接口增加某些常量或者删除某些常量的话,对于实现了该接口的类就需要做一些更改原创 2012-01-06 17:33:24 · 391 阅读 · 0 评论 -
学习effective java-21类和接口之使用功能对象表示策略
该知识点是自己从书籍中学习的笔记。函数指针是其他一些语言的专利,如c。c语言通过函数指针,可以对数组中的数据进行排序。函数指针就代表了排序规则。这就相当于就是策略设计模式。在java是没有函数指针的,但是可以通过对象引用方式来实现。这种设计模式叫做策略模式。为了实现策略模式,需要首先定义一个接口(该接口是策略接口),然后一个类实现了该接口(作为具体策略)。如果具体策略类仅仅是使用一次的原创 2012-01-11 15:37:18 · 360 阅读 · 0 评论 -
学习effective java-24泛型之消除非受检警告
该知识点是自己从书籍中学习的笔记。如果IDE提示编写的代码有unckecked warnings,你应该尽量去消除这些警告。这些警告有可能是说明有类型转换失败的可能。如果你确信这些警告都是安全的话,那么你可以使用“@SuppressWarnings("unchecked")”注解来消除警告。最好不将“@SuppressWarnings("unchecked")”注解放到整个类上,你可以放到方法原创 2012-01-11 17:27:12 · 573 阅读 · 0 评论 -
学习effective java-6创建和销毁对象之消除过时的对象引用
该知识点是自己从书籍中学习的笔记。定义 过时的引用是这样的一个引用,该引用永远不会被解除。按照这种定义的话,超出元素数组中的活动区域的引用都是过时的。一个内存泄露的例子:public class StackTest { public Object[] elements; public int size = 0; private static fina原创 2011-12-28 16:43:13 · 381 阅读 · 0 评论