- 博客(16)
- 资源 (1)
- 收藏
- 关注
原创 2.7 不要使用finalize()
不使用的理由:1.不能确定finalize()什么时候被执行2.不能保证finalize()一定会被执行3.使用finalize()严重影响性能4.如果执行finalize()抛出异常,异常被忽略(不会有任何提示),此方法立刻终止执行,导致对象状态不一致 在以下情况可以谨慎使用:1.如InputStream,如果编程者忘记调用close(),可以在finalize()...
2013-07-31 16:13:49 109
原创 2.6 移除过时的对象引用
如下代码(以下代码来自Effective Java一书):public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = n...
2013-07-31 15:51:03 103
原创 2.6 移除过时的对象引用
blic Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size == 0) throw new EmptyStackException(); return elements[--
2013-07-31 15:51:03 54
原创 2.5 避免创建不必要的对象
1.避免使用new String("hello")创建不必要的字符串对象(在Java里,字符串实现为常量,以上方式将创建不必要的字符串对象)。以下测试: private String temp; @BeforeClass public void init(){ //初始化创建hello字符串对象,避免影响后面测试 this.temp="hello"; } ...
2013-07-31 14:44:51 93
原创 2.5 避免创建不必要的对象
mp; @BeforeClass public void init(){ //初始化创建hello字符串对象,避免影响后面测试 this.temp="hello"; } @Test public void testStringOne(){ for(int i=0;i<10000;i++){ String s="hello"; System.out.println(s); } }
2013-07-31 14:44:51 49
原创 2.4 禁止创建工具类实例
使用以下方式不仅可以禁止创建工具类的实例,还可以禁止继承工具类注:工具类指仅包含静态方法的类,如java.util.Collectionspublic class MyUtil { private MyUtil(){ throw new IllegalAccessError(); }} 使用final可禁止类被继承,使用abstract可禁止创建类的实例(仍可...
2013-07-31 13:42:13 142
原创 2.4 禁止创建工具类实例
te MyUtil(){ throw new IllegalAccessError(); }} 使用final可禁止类被继承,使用abstract可禁止创建类的实例(仍可创建匿名对象)。但是不能同时使用final、abstract声明类。
2013-07-31 13:42:13 60
原创 2.3 使用单例
以下单例模式利用JVM的类加载机制保证单例对象的线程安全和初始化(在第一次类被加载时,会初始化INSTANCE属性,进而创建单例对象)public class SingletonOne { //在类加载后立即初始化 public static final SingletonOne INSTANCE=new SingletonOne(); private SingletonO...
2013-07-31 11:41:36 49
原创 2.3 使用单例
etonOne { //在类加载后立即初始化 public static final SingletonOne INSTANCE=new SingletonOne(); private SingletonOne(){}} 为了符合一般约定,也可以提供getInstance()方法返回单例对象public class SingletonTwo { private static final SingletonTwo INSTANCE=new SingletonTwo();
2013-07-31 11:41:36 40
原创 2.2 使用builder替代多参数构造函数
如果构造函数参数超过4个,可以考虑使用builder创建对象。 如下,MultiConstructorShoe提供了多个构造函数,以避免使用包含最多参数的构造函数: package com.bingo.practice.effective.two.two;public class MultiConstructorShoe { //鞋的名称 private Str...
2013-07-30 15:29:43 186
原创 2.2 使用builder替代多参数构造函数
package com.bingo.practice.effective.two.two;public class MultiConstructorShoe { //鞋的名称 private String name; //鞋的大小 private int size; //鞋的颜色 private int color; //鞋的类型,如男鞋、女鞋,童鞋 private int sex; public MultiConstructorShoe(String n
2013-07-30 15:29:43 120
原创 2.1 使用静态工厂方法替代构造函数
使用静态工厂方法(static factory method)优点: 1.与构造函数相比,静态工厂方法具有更有意义的名称public Boolean(String string) {}//getBoolean()比new Boolean()名称上更有意义public static boolean getBoolean(String string) {} 2.静态...
2013-07-30 12:30:02 263
原创 2.1 使用静态工厂方法替代构造函数
olean()名称上更有意义public static boolean getBoolean(String string) {} 2.静态工厂方法可以返回一个已创建的对象,而构造函数每次都会创建一个新对象。利用此方式可实现flyweight设计模式。//每次调用返回的是已存在的对象 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 3.静
2013-07-30 12:30:02 73
原创 String, StringBuffer, StringBuilder的区别
先来看以下问题,以下代码创建了几个对象? String s1=new String("abc"); 网上比较流行的说法是创建了两个对象:字符串对象abc和引用对象s1。这种说法十分模糊,什么是引用对象?s1究竟是引用还是对象? 正确的说法应该是s1是引用了一个字符串对象的变量,通过s1可以操作其所引用的字符串对象。因此从某种意义上,可以把s1直接视为对象(可以把s...
2013-07-29 15:45:27 67
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人