zoukankan      html  css  js  c++  java
  • Java-异常

    一、常见的异常操作
      在Java提供了大量的异常类,这些都来自于Java.lang.Throwable类。Throwable有两个直接子类,其中Error代表程序中产生的错误,Exception代表程序的产生的异常。
      1.Error
        该类成为错误类,是JVM错误,它表示Java运行时产生的系统内部错误,或者资源耗尽的情况。
        a.通过java运行一个不存在的类就会出现Error错误-即虚拟机无法找到-itcast这个类
        b.有时出现递归是,由于垃圾回收的原因,可能会出现内存耗尽的情况,即StackOverflowError,即栈空
      2.Exception
        该类成为异常类,它代表程序本身可以处理的错误,在开发Java程序中进行的异常处理。父类均为-Exception,在其众多子类中,有一个特殊的RuntimeException类,除此类外,Exception的其它所有子类,都用于表示编译时异常。
    二、异常捕获
      程序出现异常,就会停止运行。java中提供一种对异常的处理方式-异常捕捉,通常使用try...catch语句。

      具体格式如下:

    1 try{
    2 //程序代码块
    3 }catch(ExceptionType(Exception类即其子类)){
    4 //对ExceptionType的处理
    5 }

        其中try代码块中编写的可能发生异常的Java语句,catch代码块中编写针对异常进行处理的代码块

     1 public class example21 {
     2 
     3     public static int divide(int x,int y){
     4         int result=x/y;
     5         return result;
     6     }
     7     public static void main (String [] args){
     8         try{
     9             int result=divide(4,0);
    10         }catch(Exception e){
    11             System.out.println("捕捉的异常信息为"+e.getMessage());
    12         }
    13         System.out.println("程序继续向下运行......");
    14     }
    15 
    16 }    

      程序的运行结果是: 
        捕捉的异常信息为/ by zero
        程序继续向下运行......
      这里我们可以得到两个信息,一个是,try{}catch(){}捕获到了异常,
      且将参数e传递给catch代码块;
      且try中的代码块捕获到了异常后,以后的代码块是不会继续运行的
      try{}catch()之后的代码块可以继续运行。

      try代码块中,一旦捕获到了异常,其后面的程序不会继续执行
      如果要程序是否发生异常都要继续执行,可以在try...catch语句后面加入一个finally代码块


     1 public class example22 {
     2 
     3     public static int divide(int x,int y){
     4         int result=x/y;
     5         return result;
     6     }
     7     public static void main (String [] args){
     8         try{
     9             int result=divide(4,0);
    10         }catch(Exception e){
    11             System.out.println("捕捉的异常信息为"+e.getMessage());
    12             //return;
    13         }finally{
    14             System.out.println("进入finally语句块");
    15         }
    16         System.out.println("程序继续向下运行......");
    17     }
    18 
    19 }    

      程序运行结果
      捕捉的异常信息为/ by zero
      进入finally语句块
      从结果可知,并没有执行System.out.println("捕捉的异常信息为"+e.getMessage());这一语句
      且没有执行System.out.println("程序继续向下运行......");代码块?
      在catch中加入return代码块后,会结束之前的方法,可是finally会继续执行
      如果要返回结果,不要在try...catch语句块中返回,否则下面的程序会执行不了
      可以把return注释后,发现finally代码块会继续运行
      try...catch语句执行 System.exit(0)时,finally语句块不会运行。
      System.exit(0)表示,退出当前的虚拟机。

    三、throw关键词
      针对代码块无法判断是否会发生异常时,java中允许在方法的后面使用throws关键词对外申明
      该方法可能发生的异常
      throws关键词的抛出异常的语法格式为
        修饰符 返回值类型 方法名 ([参,参数2....])throws ExceptionType1,[,ExceptionType2...]
        我们发现 divide 会出现错误
        1.可以继续抛出错误--抛出不是处理
          继续使用throws抛出
          会执行代码System.out.println("进入代码...");
          而异常后面的代码不会执行
          抛出后不会执行以后的代码,程序会非正常停止

      2.可以用try...catch对错误进行处理
          使用代码块try...catch处理错误
          在try...catch代码块依旧可以运行

     1 public class example23 {
     2     //实现两个整数相除,并使用throws关键字声明抛出异常
     3     public static int divide(int x,int y)throws Exception{
     4         int result=x/y;
     5         return result;
     6     }
     7     public static void main (String [] args) {
     8              System.out.println("进入代码...");
     9             int result = 0;
    10             try {
    11                 result = divide(4,0);
    12             } catch (Exception e) {
    13                 // TODO Auto-generated catch block
    14                 e.printStackTrace();//打印捕获的异常信息
    15             }
    16             System.out.println(result);
    17             System.out.println("退出代码...");
    18     }
    19 
    20 }    

    四.Java的异常分类
      1.运行时异常--非检查异常
        RuntimeException类及其子类都是运行时异常。
        运行时异常的特点是Java编译器不会对其检查,
        即没有try..catch语句捕获或使用throws关键字声明抛出,程序也能正常编译通过
        常见的该类异常有: 越界--ArrayIndexOutBoundException
        空指针--NullPointterException

      2.编译时异常--检查异常
        除了RuntimeException类及其子类都是检查异常
        运行时异常的特点是Java编译器不会对其检查
        处理编译时期的异常有两种方式,
          a.使用try...catch语句对异常进行捕获;
          b.使用throws关键字声明抛出异常,调用者对其处理

    五.异常信息分析
      在非检查异常时,可以配合异常信息和输出来处理

  • 相关阅读:
    ASP.NET中JSON的序列化和反序列化
    Git 本地项目上传至托管平台(OsChina/GitHub)
    Android Gradle 完整指南(转)
    开发错误记录13:java.lang.UnsatisfiedLinkError: Couldn't load xxx.so: findLibrary returned null
    Android其它新控件 (转)
    一个Activity掌握Design新控件 (转)
    一个Activity掌握Android5.0新控件 (转)
    一个Activity掌握Android4.0新控件 (转)
    开发错误日记 12: Unsupported major.minor version 52.0
    Linux 下各个目录的作用及内容
  • 原文地址:https://www.cnblogs.com/tianliang94/p/10056195.html
Copyright © 2011-2022 走看看