异常

异常

  1. Error:从技术上讲,Error及其子类对象不是异常,它们代表了程序运行时Java系统内部的错误,与程序设计者无关,并且Error是不可查的。
  2. Exception:通常是由于某个资源不可用,或者正确执行程序所需的条件不满足所造成的,是程序本身可以处理的异常。

异常处理的方式

  1. try-catch-finally语句:它的做法是将可能出错的代码放到try语句块中去尝试是否能顺利执行,异常代码放在catch语句块里,捕获并处理异常。而finally里面的语句则是不管是否有异常都会执行的。try语句抛出异常时才会执行catch语句。

    package com.sw.t2;
    
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Test {
        public static void main(String[] args) {
            FileWriter fw = null;
            String str = "123456";
            try {
                //try语句里面的两语句可能出现抛出异常,所有把它们放在try语句里;
                //查API可知道FileWriter(File file)方法是这样的
                		//public FileWriter(File file)
               						//throws IOException
                //像这种明显的抛出异常的方法是一定要对异常进行处理的
                fw = new FileWriter("hello.txt");
                fw.write(str,0,str.length());
            } catch (IOException e) {
                e.printStackTrace();
            }finally {//不管有无抛出异常都会执行
                if (fw != null) {
                    try {
                        fw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    

    异常的处理在程序的运行中是很重要的。如果不处理的话可能会导致整个程序都停止

    package com.sw.t2;
    
    public class Test {
        public static void main(String[] args) {
            int a = 10;
            int b = 0;
            int res = 0;
            res = a/b;//因为b=0一个数来除0,会抛出异常
            	//Exception in thread "main" java.lang.ArithmeticException: / by zero
            	//如果不进行处理的话后面的代码就不会运行了。
            System.out.println("123");
        }
    }
    
    package com.sw.t2;
    
    public class Test {
        public static void main(String[] args) {
            int a = 10;
            int b = 0;
            int res = 0;
            try {//使用try-catch-finally语句来处理异常通过处理后,后面的代码还能继续运行。
                res = a/b;
            }catch (Exception e){
                e.printStackTrace();
                //System.out.println("123");
            }
            System.out.println("123");//这个语句也可以放到finally语句中
            						//或者catch里面也都是能被执行的
        }
    }
    //运行结果
    /*java.lang.ArithmeticException: / by zero
    	at com.sw.t2.Test.main(Test.java:9)
    123*/
    
    
  2. 抛出异常:如果当前方法不知道如何处理捕获的异常,可以用throws将此异常再次抛出,交给当前方法的上一层调用者,如果上一层调用者还不知道怎么处理,也可以继续上抛,直到被某方法处理或者交给JVM,最后终止程序。

    1. throws语句:用在声明方法时表示,该方法可能抛出异常,调用者必须进行处理,捕捉或者继续上抛。在上抛的时候需要注意子类方法可以:

      1. 抛出与父类方法相同的异常

      2. 抛出父类方法抛出的异常的子类

      3. 不抛出异常

    2. throw语句:用户自定义的异常必须自行抛出,自行抛出异常就要使用throw语句,它抛出的不是异常类,而是异常对象。一旦执行throw语句,它后面的代码都不会被执行

      package com.sw.t2;
      //自定义一个名为MyException的异常
      public class MyException extends Exception{
          public MyException() {}
          public MyException(String msg) {
              super(msg);
          }
      }
      
      
      package com.sw.t2_1;
      
      import com.sw.t2.MyException;
      
      public class Test {
          public void run() throws MyException {//写一个方法它可能会
              									//抛出MyException这一异常
              throw new MyException("123");//使用throw语句自行抛出异常
          }
          public static void main(String[] args) {
              Test t = new Test();
              try {
                  t.run();
              } catch (MyException e) {
                  e.printStackTrace();
              }
          }
      }
      
      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值