第十章 异常和断言

异常处理
        try-catch 捕获异常原理:
                    在Java中,当有代码执行发生异常时,在Java底层会产生异常的实例对象,catch会将要捕获的异常类型和程序中已经发生的异常类型进行匹配,如果类型相同,则进入catch语句进行异常的处理,否则,异常发生,程序中断。
        
 
   
  1. try{ //try表示对可能出现问题的代码进行包围(监视)
  2. }
  3. catch(Exception e){ //表示捕获并处理对应类型的异常
  4. //处理异常可以通过其他业务逻辑实现处理
  5. }
  6. finally{ //finally 表示程序是否发生异常,最终必然执行的代码段
  7. }

一旦程序发生异常后,将导致程序无法继续执行。所以通过try-catch对异常进行捕获处理。


Java的异常结构
Throwable 是Java中所有异常和错误的超类。
Throwable 中有两个分支:Error 和  Exception
        Error:表示程序无法控制的错误,该类错误无法进行try-catch捕获,属于程序运行中的致命问题。
        Exception:表示通过try-catch捕获解决的问题,称为异常。
        Exception 异常又分为RuntimeException 和 非 RuntimeException
                RuntimeException 表示当程序在运行过程中产生的异常,该类异常有着不稳定性。
                非 RuntimeException 表示程序中的显著异常,必须要解掉异常,程序才能编译和运行。

异常处理流程:
       先对程序进行测试,测试无误后再将可能出现的代码进行try-catch捕获,以防万一。


多重try-catch
    注意点:先捕获的catch语句将会导致后面的catch语句无法执行。




  throw  
    throw 产生异常后,将导致程序流无法继续执行。
    throw 用于引发异常,使程序的非法情况让程序员更加重视,并且也可以在异常产生后对其进行try-catch的处理。
    throw 主要用于系统底层的架构,实现项目中的一整套错误信息的提示。
  
       自定义引发的异常不能直接进行try-catch处理,这样会导致throw的无意义,如果引发的异常是非RuntimeException,则必须使用throws 将异常对外抛出。(throws写在方法后面)
 
    
  1. /**
  2. *自定义的LowNumberException异常
  3. **/
  4. public class LowNumberException extends ActivationException{
  5. /**
  6. * 构造方法,传入错误信息
  7. * @param message
  8. */
  9. public LowNumberException(String message){
  10. super(message);
  11. }
  12. }

 
    
  1. /**
  2. * 该方法要求参数不能小于10
  3. * @param num
  4. */
  5. public void method(int num) throws LowNumberException{
  6. if(num < 10){
  7. throw new LowNumberException(num+"异常,应大于等于10!");
  8. }
  9. System.out.println("执行了method方法,使用参数进行了运算");
  10. }

调用抛出了非Runtime异常的方法必须要进行处理。
如果底层方法中的异常在内部调用时始终对外抛出(throws),那么在main方法中则必须要进行try-catch处理。


在子类和父类中,子类重写父类的方法时,不能抛出父类异常类型以外的的异常。

一个类允许抛出多个异常
 
    
  1. /**
  2. * 一个类允许抛出多个异常
  3. *
  4. */
  5. public void selfMethod() throws LowNumberException, IOException,ClassNotFoundException {
  6. }



程序架构一般都使用三层架构的方式来实现:
    数据层        用于数据库的连接,底层数据的处理。
    业务层        用于项目需求中业务逻辑的实现。
    表现层        用于界面的表现
   throw 一般在数据层或者业务层所要调用的工具类、组件类抛出异常,通常由数据层或者业务层对这些工具类进行调用,当方法异常时可以更好的清楚异常的原因,并进行try- catch的处理。    



日志文件
properties 称为属性文件,属于配置文件的一种。还有一种是 xml 文件。
properties文件的数据存储方式是按照键值对的方式进行存储。即 key = value

日志记录分为多个级别:debug 、info 、 warn 、error

        创建日志对象(两种方式)
 
    
  1. //方法一:传入当前类的class模板
  2. private Logger log = Logger.getLogger(Demo5.class);
  3. //方法二:传入类的完整类路径
  4. private Logger log = Logger.getLogger("com.niit.Demo5");



断言
        断言是对一个程序逻辑的某种假设进行测试的方法。
        默认情况JVM是禁止断言,通过修改JVM参数 : -enableassertions
断言的表达式
        assert    表达式:执行的代码
表达式的结果必须是boolean类型,如果为false时执行后面的测试代码。
 
    
  1. public class Demo6 {
  2. /**
  3. * 方法要求参数的姓名必须以T开头
  4. * @param name
  5. */
  6. public void method(String name){
  7. char ch = name.charAt(0);
  8. //常规的测试方式,使用条件判断
  9. // if(ch == 'T' || ch == 't'){
  10. // System.out.println("姓名是:"+name);
  11. // }
  12. // else{
  13. // System.out.println("非法的姓名");
  14. // }
  15. //使用断言测试姓名是否是首字母为t
  16. assert ch == 'T' || ch == 't':"非法的姓名";
  17. System.out.println("姓名是:"+name);
  18. }
  19. /**
  20. * @param args
  21. */
  22. public static void main(String[] args) {
  23. // TODO Auto-generated method stub
  24. Demo6 demo = new Demo6();
  25. demo.method("aom");
  26. }
  27. }





你可能感兴趣的:(JavaSE)