中软Java学习8月10日笔记

时间:2021-05-23 15:38:58
Map<K,V> 接口的实现类:
   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 - 如果堆栈为空