1 设计模式
23种
1.1 单例模式
一个类对外只提供一个对象。
a 构造器私有化,不让外界new对象
b 在本类内实例化一个对象,让外界可以获取到
a 饿汉式(不管要不要,类加载时已经准备好)
方式一:
private static final Single SINGLE = new Single();
private Single(){}
public static Single getSingle(){
return SINGLE;
}
方式二:
public static final Single SINGLE = new Single();
private Single(){}
方式三:
public static final Single SINGLE;
{
SINGLE = new Single();
}
b 懒汉式(只有要的时候才给)
方式四:
private static Single SINGLE;
private Single(){}
public Single getSingle(){
if(SINGLE == null)
SINGLE = new Single()
return SINGLE;
}
2 枚举
一个类对外提供固定个数的对象!
2.1 JDK1.5之前
a 必须将构造器私有化
b 需要设置若干个公有的静态常量
类中的对象向,一定要设置为常量,不能被修改
类中如有属性,属性不能提供set方法
2.2 JDK1.5之后
a 引入了关键字enum,通过该关键字创建的类就是枚举类
b 直接写对象名即可,对象与对象之间隔开,用分号结束
c 默认采用无参构造器
d 对象默认就是公有的静态常量
e 对象必须在首行
f 如果显示创造了有参构造器,需要在声明对象时进行传值
枚举类存在默认的父类Enum
方法:
name() 获得对象名称
toString() 返回对象名称,自定义枚举类型可以再次重写
original() 返回当前对象位置
values() 返回该枚举类所有的常量对象
valueof(String name) 根据字符串名称,返回对象
实现接口:
语法:implements 实现接口
特点:枚举类提供的对象个数是确定的,类加载时对象就已经产生,抽象方法的实现,可以将范围缩小到某个对象。
语法:常量对象{对父级做扩展}
类似于匿名内部类,当枚举类所有的常量方法都对抽象方法进行了实现,则可以删除公有的实现方法。
3 注解
注释:不参与编译和运行,是对代码的描述
注解:参与编译和运行,具有功能
3.1 注解的形式
@注解名【(参数)】
3.2 之前遇到的注解
文档注释内注解(了解):
@author 作者
@version 版本
@param 参数
@return 返回值
注释外(掌握):
@Override 添加在方法上方
功能:检测当前方法是否满足重写
源码:
@Target(ElementType.METHOD)
记录注解可以用在什么地方
@Deprecated 过时
@Overload 重载
@SuppressWarnings 抑制警告 警告黄线(无所谓) 错误红线(不允许出现)
4 单元测试 junit
main方法也是可以测试,弊端是一个类中只能有一个main
单元测试:一个类中可以创建多个程序入口
前提:
a 必须使用在公有的类及方法上
b 需要导包(将第三方产品源码导入到本项目内)
在注解后万能提示,选择junit4,导入
@Test 要求项目中没有自定义的Test类
@Before 每个Test运行之前
@After 每个Test运行之后
@BeforeClass 在所有Test之前运行一次,方法必须是静态的
@AfterClass 在所有Test之后运行一次,方法必须是静态的
缺点:
a 默认不能手动输入
b 学IO流的时候,关于相对路径有自己的特点
c 不能启动线程
5 包装类
主要是对基本数据类型的包装
基本数据类型效率高!但是后期知识有一部分是针对面向对象的
比如:
泛型不能指定基本数据类型
集合中不允许存储基本数据类型(只能存储对象)
个数八个:
byte, Byte
short, Short
int, Integer
long, Long
float, Float
double, Double
上述六个和数值有关的父类是Number
char, Character
boolean Boolean
这两个类父类是Object
5.2 使用
装箱:
基本数据类型 —> 包装数据类型
手动装箱:
byte a = 12;
Byte b = new Byte(a);
自动装箱:
Byte c = 12;
手动拆箱:
Byte d = new Byte(“13”);
byte e = d.byteValue();
自动拆箱
byte f = d;
5.3 包装类常用方法
如何将字符串转为基本数据类型
String s= “45” 转为int
int i = Integer.parseInt(s);
其余类型类似
包装类型.parseXXX();
最值(范围)
Integer.MAX_VALUE, Integer.MIN_VALUE
5.4 自动装箱原理
包装类对比相等:
如果在默认值范围内,则自动装箱,则相等
一旦有自己new的就不相等
如果不在范围内也是不相等的
如果有基本数据类型对比,则自动拆箱为基本数据类型,就相等