zoukankan      html  css  js  c++  java
  • 异常(一)

    1、异常概述:

    异常(不正常)的体系: 

    Throwable

        Error:通常出现重大问题,如运行的类不存在或者内存溢出等;不编写针对代码进行处理;

        Exception:在运行时出现的一起情况,可以通过try,catch,finally处理。

    Exception和Error的子类名几乎都是以父类名作为后缀(除了Error类的ThreadDeath)。

    详述

    先来看一个异常的例子:除法运算4除以0(正常情况下除数不可为0)

    package exceptionDemo;
    class Demo{
    	int div(int a,int b){
    		return a/b;
    	}
    }
    public class ExceptionDemo1 {
    	public static void main(String[] args){
    		Demo d=new Demo();
    		int x=d.div(4,0);
    		System.out.println("x="+x);
    		System.out.println("over");
    	}
    }
    

    结果:

    Exception in thread "main" java.lang.ArithmeticException: / by zero
    	at exceptionDemo.Demo.div(ExceptionDemo1.java:4)
    	at exceptionDemo.ExceptionDemo1.main(ExceptionDemo1.java:10)
    

    可以看到出现了ArithmeticException(运算异常),没有出现运算结果,也没有打印over,说明程序出现异常时就结束了。

    异常是程序在运行时(注意是运行而不是编译,div(4,0)编译没有问题)出现不正常情况。要知道,问题也是现实生活中一个具体的事物,可以通过java类的方式对其进行描述,并将其封装成对象。异常其实就是java对不正常情况进行描述后的对象体现

    对于问题又划分为两类:

    一种是严重的问题,java通过Error类进行描述,如运行的类不存(运行java haha,出现java.lang.NoClassDefFoundError)或者内存溢出(byte[] arr=new byte[1024*1024*600],需要占用1024*1024*600的内存,很容易超出虚拟机所管理的内存范围,从而出现java.lang.OutOfMemoryError),一般不编写针对性代码对其进行处理(已超出虚拟机的能力范围);

    一种是非严重的问题,java通过Exception类进行描述,可以使用针对性的处理方式进行处理。

    (想想一下疾病的可治愈:癌症;不可治愈:感冒发烧)

    无论是Error还是Exception又有一些共性内容,如不正常情况的信息、引发原因等,可以向上抽取为Throwable.(可抛的)

    详情查看JAVA API文档,(sun公司被甲骨文收购)文档地址https://docs.oracle.com/javase/8/docs/api/

    Throwable(JAVA语言中所有错误或异常的父类,有自身的构造函数和getCause(),getMessage(),toString()等方法)

    -----Error     

    -----Exception

    2、异常的处理

     java提供了下面特有的语句进行处理

    try{
    
    需要被检测的容易出现问题的代码;
    
    }
    
    catch(异常类 变量){
    
    处理异常的代码;(处理方式)
    
    }
    
    finally{
    
    一定会执行的语句;
    
    }
    

    a、

    先介绍前两部分try、catch ,以上面的代码为例

    	try{
    		int x=d.div(4,0);
    		System.out.println("x="+x);
    		}
    		catch(Exception e){
    			System.out.print("over");
    		}
    

    在进行div(4,0)运算时,会抛出一个new ArithmeticException()对象,try可以检测到这个对象(若没有try语句,检测不到异常对象,主函数也无法处理该异常,虚拟机会进行默认处理,调用了默认异常处理机制,导致程序停止),并将之交给catch(捕获),此时

    Exception e=new ArithmeticException(),然后是执行catch里的语句,即System.out.print("over")。

    注意:System.out.println("x="+x)并没有执行,因为在div(4,0)处发生异常,进行了程序的跳转。

    注意:已知Exception e=new ArithmeticException()(父类的引用接收子类对象),对捕获到的异常对象存在一些常见的操作方法:

            String getMessage()    作用:获取异常信息,应用:System.out.print(e.getMessage()),输出:/zero;

            String toString()    作用:打印异常对象的字符串表示形式 ,应用:System.out.print(e.toString)或System.out.print(e),输           出:java.lang.ArithmeticException: /zero(比getMessage()更全面,异常名字:异常信息);

            printStackTrace()    作用:打印堆栈中的跟踪信息,应用:因其无返回值,所以不要放在输出语句中输      出System.out.print(e.printStackTrace())

            

  • 相关阅读:
    天热了,心静了,四月过去了
    Boost编译一步步来
    战争又起
    waiting for the day
    游戏状态管理之C++实现
    匈牙利命名法之VB篇
    VB 实用函数集
    匈牙利命名法之简介
    Dxperience 安装总是不成功
    Developer Express DevExpress DXperience
  • 原文地址:https://www.cnblogs.com/kanhaiba/p/5073323.html
Copyright © 2011-2022 走看看