Properties , HashMap , Hashtable
Hashmap ----- 许使用 null 值和 null 键
Hashset ------ 最多允许使用一个null
Hashtable ----- 任何非 null 对象都可以用作键或值
Hashmap与Hashtable对比
Hashtable 是线程同步的
Hashmap 是线程不同步的 ------- 推荐使用
ArrayList(不同步)与Vector(同步)
StringBuilder 的实例用于多个线程是不安全的
StringBuffer 线程安全
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------异常------------------------------------------------------
int num1 = in.nextInt();
请输入被除数:ee
Exception in thread "main" java.util.InputMismatchException
请输入被除数:30
请输入除数:0
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.icss.ui.Test.main(Test.java:14)
//当代码中出现异常,我们又没有写try {} catch{},异常会向上一级调用者抛出
//如果上一级调用者仍然没有捕获该异常,就继续向上抛出,直到捕获该异常或程序异常结束
try {
//此处写可能出现异常的代码
//在某行代码出现异常后,程序不再向下执行,而是直接跳到catch中
} catch (Exception e) {
//在此处捕获异常
}
//unreachable exception
// Exception 是 InputMismatchException的父类,如果出现InputMismatchException异常,会先被Exception捕获,则(InputMismatchException代码块就没有意义了
try {
int num1 = in.nextInt(); //可能异常
}catch(ArithmeticException e){
}catch(Exception e){
}catch (InputMismatchException e) {
}
//代码规范: 单点返回 ( 一个方法中只能允许一个return )
//程序中必须要执行的代码,应该放到finally中
//finally中最常使用的场景是“非托管资源的释放”----如数据库的connection、文件的IO、网络IO
try {
in = new Scanner(System.in);
} catch (Exception e) {
System.out.println("被除数输入错误(要求整数),请重新输入");
}finally{
System.out.println("感谢使用本程序!");
}
java.lang 类 Throwable
Throwable 类是 Java 语言中所有错误或异常的超类
java.lang 类 Error
Error 是 Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题
//不应该用try{} catch{}去捕获error错误,因为即使捕获了也无法恢复
java.lang 类 Exception
指出了合理的应用程序想要捕获的条件
//开发人员应该合理的捕获这种异常,并进行合理的处理
Checked Exception (编译时可以检查到这种错误,所以需要强制进行处理)
SQLExcepion , ClassNotFoundException
UnChecked Exception ( RuntimeException ---- 程序运行期间可能出现的错误,编译检查时无法发现的异常 )
//RuntimeException和它的子类都属于UnChecked Exception
RuntimeException、ArithmeticException 、InputMismatchException、NullPointerException
//登录过程中可能出现的情况
1. 用户名、密码正确,登录成功
2. 用户名、密码错误,提示登录失败
3 数据库出现了宕机
4. 网络异常
5. 非法字符 '' ------ SQL语句执行异常
6. 用户名或密码为空
________________________
软件三层架构:UI , BIZ, DAO
UI : 有界面信息 () BIZ和DAO层不能出现界面窗口信息 )
输入信息----------用户名、密码
输出信息----------登录成功、登录失败、失败原因
UI进行首次校验输入的信息合法性 ------------------------如用户名不能为空、用户名介于5~20之间、是否有非法字符
BIZ: 业务规则处理、业务流程判断
校验输入的信息合法性
如把用户输入的密码转换成MD5
非法IP监控
用户黑名单处理
权限校验,不同权限的登录用户,访问不同的业务方法
DAO: 数据持久化
数据写入数据库、从数据库中读取数据
数据写入文件、从文件中读取数据
只能在DAO层引用,java.sql
Biz层调用DAO层的方法,异常的处理方式:
1. 在BIZ中捕获、并处理异常 try{} catch{}
2. 不在BIZ中处理异常,直接由BIZ抛出给UI层
3. 在BIZ中捕获、并处理异常,然后二次抛出异常给UI层
//不应该在逻辑层和DAO层处理异常,所有异常的处理应该交给UI层
final :
finally : 在try{} catch {} finally{} 中,在finally部分进行非托管资源的释放
finalize : 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
//语法没有错误,如果出现异常抛给上一级的调用者,此处强调了资源的释放;异常不处理;
try {
System.out.println("ddd");
throw new Exception("ddd");
}finally{
}
ERROR与Exception的区别:
内存溢出 就是严重的无法恢复的错误,所以它是Error
使用异常,进行入参的合法性校验:
public void setSex(String sex) throws SexCheckException {
if(sex.equals("male") || sex.equals("female")){
this.sex = sex;
}else{
throw new SexCheckException("性别只能输入male或female");
}
}
java.util 接口 Queue<E>
E peek() 获取但不移除此队列的头;如果此队列为空,则返回 null
java.util 类 Stack<E>
E peek() 查看堆栈顶部的对象,但不从堆栈中移除它
抛出: EmptyStackException - 如果堆栈为空