文章列表
Java语言也需要考虑内存管理
//Can u spot the "memory leak"?
public class Stack {
private Ojbect[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
public Stack(int initialCapacity) {
elements = new Object[DEFAULT_INITIAL_CAPACITY ...
环境:CentOS 7 + MariaDB 10 + Mysql_testDB_employees
选择employees的所有列,条件是first_name=Duangkaew或last_name=Botman且emp_no < 10011,并将hire_date列按照降序排列
MariaDB [employees]> SELECT * FROM employees WHERE (first_name = 'Duangkaew' OR last_name = 'Botman') AND emp_no < 20000 ORDER BY hire ...
EJ.05 避免创建不必要的对象
- 博客分类:
- EJ
重用对象而不是每次都创建一个相同功能的对象
极端的反面例子,每次执行都会创建一个新的String实例:
String s = new String("stringette"); // DON'T DO THIS!
建议:
String s = "stringette";
不可变类通常可以使用静态工厂方法来避免创建不必要的对象
遗留任务:
Boolean.valueOf(String)总是优先于构造器Boolean(String),确认valueOf的实现;
Boolean b = true,确认语 ...
EJ.04 通过私有构造器强化不可实例化的能力
- 博客分类:
- EJ
只包含静态方法和静态域的工具类,实例没有任何意义。
缺少显式构造器时,编译器会自动提供一个公有的、无参的缺省构造器。
将构造器私有化,则无法被实例化,也不能子类化:
// Noninstantiable utility class
public class UtilityClass {
// Suppress default constructor for noninstantiability
private UtilityClass() {
throw new AssertionError();
}
... ...
Singleton,指仅被实例化一次的类。
方法一:公有静态final域,私有构造方法,可以通过反射进行攻击。
// Singleton with public final field
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public void leaveTheBuilding() { ... }
}
方法二:静态工厂方法,较灵活,易被修改,反序列化时会创建新实例,需注 ...
重叠构造器(telescoping constructor)模式 —— 代码复杂,阅读困难
示例代码:
// Telescoping constructor pattern - does not scale well!
public class NutritionFacts {
private final int servingSize; // (ml) required
private final int servings; // (per container) required
private final int calories; // optional ...
EJ.01 考虑用静态工厂方法代替构造器
- 博客分类:
- EJ
优点:
它们有名称;
不必在每次调用它们的时候都创建一个新的对象;
它们可以返回原返回类型的任何子类型的对象;
在创建参数化类型实例的时候,它们使代码变得更加简洁;
缺点:
类如果不含公有的或者受保护的构造器,就不能被子类化;
它们与其他的静态方法实际上没有任何区别。
深入理解静态工厂方法(见附件)
11.3.1 单例(Singleton)类