写单例模式的步骤:(饿汉式)
① 必须在该类中,自己先创建出一个对象。
② 私有化自身的构造器,防止外界通过构造器创建新的对象。
③ 向外暴露一个公共的静态方法用于获取自身的对象。
class ArrayUtil{
// ① 必须在该类中,自己先创建出一个对象。
private static ArrayUtil instance = new ArrayUtil();
// ② 私有化自身的构造器,防止外界通过构造器创建新的对象。
private ArrayUtil(){}
// ③ 向外暴露一个公共的静态方法用于获取自身的对象。
public static ArrayUtil get Instance(){
return instance;
}
}
1
2
3
4
5
6
7
8
9
10
工具类的设计:
工具类:存放了某一类事物的工具方法的类。、
工具类存放的包:工具包(util,utils,tool,tools)存放工具类。
工具类起名:XxxUtil、XxxUtils等,表示一类事物。
工具类的设计:工具在开发中其实只需要存在一份即可。
① 如果工具方法没有使用static修饰,说明工具方法要使用工具类的对象来调用。此时把工具类设计成单例的。
② 如果工具方法全部使用static修饰,说明工具方法只需要使用工具类名调用即可。此时必须把工具类的构造器私有化(防止创建工具类对象调用静态方法)。
一般的首选第二种,在JDK中提供的工具方法都是第二种。如:java,util,Array类等。
三、基本类型包装类
(一) 装箱和拆箱
基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean
八大基本类型的包装类都是使用了final修饰,都是最终类,都不能被继承。
// 在同一个类中,二者可以共存
public void ooxx(int val){}
public void ooxx(Integer val){}
1
2
3
5.方法中的基本数据类型变量存储在栈中,包装类型存储在堆中。
开发中建议使用包装类型,局部变量建议使用基本数据类型。
四、抽象类
使用abstract修饰且没有方法体的方法,称为抽象方法:
特点:
① 使用抽象abstract修饰方法没有方法体,留给子类去实现/覆盖。
② 抽象方法修饰符不能使用private、final和static修饰,因为抽象类必须有子类。
③ 抽象方法必须定义在抽象类或者接口中。
一般习惯:把abstract写在方法修饰符的最前面,这样一看就知道是抽象方法。
使用abstract关键字修饰的类:
特点:
① 不能创建实例,即不能使用new出一个抽象类,即使创建出抽象类对象,调用抽象方法,根本没有方法体。
② 可以不包含抽象方法,若包含,该类必须为抽象类,抽象类可以包含普通方法(留给子类调用的),抽象类是有构造器的,子类构造器必须先调用父类构造器。
③ 若子类没有实现/覆盖父类的所有抽象方法,那么子类也得作为抽象类(抽象派生类)。
④ 构造方法不能都定义成私有的,否则不能有子类(创建子类对象前,先调用父类构造方法)。
⑤ 抽象类不能使用final修饰。因为必须有子类,抽象方法才能得以实现。
⑥ 是不完整的类,需作为父类(必须要有子类),功能才得以实现。
// 操作的模板类
abstract class AbstractOperateTimeTemplate{
// 模板方法:总体算法的骨架,子类不能修改
final public long getTotalTime(){
// 开始时间
long begin = System.currentTimeMillis();
// 具体操作(留给子类去完成)
this.doWork();
// 结束时间
long end = System.currentTimeMillis();
// 时间差
long time = end - begin;
return time;
}
// 具体操作
protected abstract void doWork();
}
// 子类完成
class StringOperate extends AbstractOperateTemplate{
protected void doWork(){
String str = "";
for (int i = 0;i < 10000;i++){
str += i;
}
}
}