自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 (11):谨慎的覆盖clone

当我们想要克隆一个对象时,也就是说我们想要两个一模一样的对象,但想要这两个对象各自开辟空间的时候,我们通常要实现cloneable接口。但是接口没给我们提供clone的实现,但Object类却给我们提供了一个受保护的clone实现。一般来讲我们直接在子类重写的clone方法调用super,clone()可以得到我们想要的结果。import java.util.Date;public cl

2017-03-31 15:25:02 375

原创 (10):始终要覆盖toString

虽然Object提供了toString的实现,但它返回的是类名+@+散列码,这不是我们想看到的,所以强烈建议重写toString方法,把它展示成我们想要的结果。

2017-03-31 14:59:27 324

原创 transient使用小结

今天看jdk源码时,在ArrayList中看到了这么一串代码private transient Object[] elementData;之前从未用过transient 关键字,网上了解了一下这个关键字的功能。我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Seri

2017-03-30 17:01:22 252

原创 (9):覆盖equals时总要覆盖hashCode

一个很常见的错误根源在于没有覆盖hashCode方法。在每个覆盖了equals方法的类中,也必须覆盖hashCode方法。如果不这样做,就会违反Object.hashCode的通用约定,从而导致该类无法结合所有基于散列的集合一起正常运作,这样的集合包括HashMap,HashSet和Hashtable。以下是约定:(1)在应用程序的执行期间,只要对象的equals方法的比较操作所用到的信息

2017-03-30 16:00:57 230

原创 (8):覆盖equals请遵循通用约定

再覆盖equals方法是,你应该遵循它的通用约定,下面是约定内容:自反性(reflexive):对于任何非null的引用值x,x.equals(x)必须返回true。 如果违背,当你把该类的实例添加到集合(collection)中,然后该集合的contains会告诉你,没有包含你刚刚添加的实例。 对称性(symmetric):对于任何非null的引用值x和y,当且仅当y.equals(

2017-03-30 15:09:57 237

原创 (7):避免使用终结方法

finalize()方法一般来说是不可预测的,也是很危险的,一般情况下是不必要的。终结方法的缺点在于不能保证被及时的执行,甚至不会执行。finalize的工作原理是这样的:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存.所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作.而程序员无法

2017-03-30 14:45:55 249

原创 (6):消除过期的对象引用

java有自己的垃圾回收功能,这大大减少了程序员的负担。但对于有些被引用的对象,即使我们之后再也不使用它,它也不会被回收,这就是所谓的内存泄漏。下面是一个简单的栈实现例子:public class Stack { private Object[] elements; private int size = 0; private static final i

2017-03-30 10:25:54 364

原创 (5):避免创造不必要对象

一般来说,最好是能重用已有的对象,而不是每次有需要的时候就去创建一个相同功能的对象。比较下面两个例子(1).String s1 = “string1”;(2).String s2 = new String(“string1”);(2)比(1)多创造出了许多不必要的对象。由于String被实现为不可变对象,JVM底层将其实现为常量池,既所有值等于"string1" 的St

2017-03-29 16:44:10 239

原创 (4):用私有构造器强化不可实例化能力

实际开发中,我们往往一些类写成静态的,列如一些工具类。它们是公用的,我们也完全不需要他们实例化。然而在缺少显示构造器的情况下,编译器会自动的提供一个共有的、无参数的构造器。因此我们只要让这个类包含私有的构造器,它就不能被实例化了。但这种方法也有副作用,它使一个类不能被子类化,所有构造器都必须显式或隐式的调用父类构造器,这种情况下,就无法调用父类构造器了。

2017-03-29 15:52:22 283

原创 (3):用私有构造器或者枚举类型强化Singleton属性

在java 1.5版本发行前实现单例一般有两种方法(1)静态成员public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { } public void leaveTheBuilding() {} // This code wou

2017-03-28 16:29:12 295

原创 (2):遇到多个构造器参数时考虑用构造器

涉及到构造器多个构造器参数时解决办法一般有三个(1)重叠构造器模式。在这种模式下,你提供第一个只有必要参数的构造器,第二个构造有一个可选参数,第三个有两个可选参数,一次类推,最后一个构造器包含所有可选参数。但这种模式缺陷很大。首先你被迫不得不去设置一些你不想设置的参数。其次必须搞清楚参数的顺序,很多情况下即使参数顺序设置出错,编译器也不会报错。(2)JavaBean模式。该模式下,调用一个

2017-03-28 15:09:52 308

原创 (1):使用静态工厂方法代替构造器

对于类而言,为了获取自身的一个实例,最常用的方法就是提供一个公有的构造方法。而还有一种方法就是提供一个静态工厂方法。他只是返回类的实例的静态方法。下面是一个基本类型Boolean包装类的简单事例public final class Boolean implements java.io.Serializable, Comparable { public static final Boo

2017-03-27 16:25:27 237

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除