异常

异常:

    Throwable 基类/超类               病
        1、Error(错误)        1、不可治疗
        2、Exception(异常)            2、可治疗的病
            1、运行时异常                      1、不一定去医院处理
            2、编译时异常                      2、一定要去医院处理

    异常体系
    --|Throwable    //所有异常或者错误类的超类
    -----|Error        //错误 一般时用于jvm或者是硬件引发的问题,所以我们一般不会通过代码去处理错误的。
    -----|Exception    //异常 是需要通过代码去处理的

    Throwable 常用的方法
        toStrng();    //返回当前对象的完整类名+getMessage的信息
        getMessage();    //返回的是创建Throwable传入的字符串信息
        printStackTrace();    //打印异常的栈信息。

    如何区分错误和异常呢:
        如果程序出现了不正常的信息,如果不正常的信息的类名是以Error结尾的,那么肯定是一个错误。
        如果是以Exception结尾的,那么肯定就是一个异常。

    异常的处理:

	方式一:捕获处理
		
		捕获处理的格式
		
			try{
				可能发生的异常代码
			}catch(捕获的异常类型 变量名){
				处理异常的代码...
			}
			
			Class Demo{
				public static void main(String[] args){
					div(4,0);
				}
				
				public static void div(int a,int b){
					int c = 0;
					try{
						c = a / b;	//jvm在这句好的时候发现了不正常的情况,那么会创建一个对应的异常对象。
					}catch(ArithmeticException e){
						//处理异常的代码
						System.out.println("toString" + e.toString());
					}
					
					System.out.println(c);
				}
			}
		
		捕获处理注意细节:
			1、如果 try 块中代码出了异常经过了处理之后,那么 try-catch 块外面的代码可以正常执行。
			2、如果 try 块中出了异常的代码,那么在 try 快中出现异常代码后面的代码是不会执行了。
			3、一个 try 块后面是可以跟有多个 catch 块的,也就是一个 try 块可以捕获多种异常的类型。
			4、一个 try 块可以捕获多种异常类型,但是捕获的异常类型必须从小到大进行捕获,否则编译报错。

	方式二:抛出处理(throw throws)
	throw new Exception();	//抛出一个异常
	抛出处理要注意的细节:
		1、如果一个方法的内部抛出了一个编译时异常对象,那么必须要在方法上声明抛出。 throws Exception
		2、如果调用了一个声明抛出编译时异常的方法,那么调用者必须要处理异常。
		3、如果一个方法内部抛出了一个异常对象,那么 throw 语句后面的代码都不会执行了。(一个方法遇到了 throw 关键字,该方法也会马上停止执行的。)
		4、在一种情况下,只能抛出一种类型异常对象。
		
	throw 与 throws 两个关键字:
		1、 throw 关键字是用于方法内部的, throws 是用于方法声明上的
		2、 throw 关键字是用于方法内部抛出一个异常对象的, throws 关键字是用于在方法上声明抛出异常类型的。
		3、 throw 关键字后面只能有一个异常对象, throws 后面一次可以声明抛出多种类型的异常。

 自定义异常类:

 

	自定义异常类的步骤:自定义一个类继承Exception即可
	class Demo{
		public static void main(String[] args){
			int ip = null;
			try{
				feiQ(ip);
			}catch(NoIpException e){
				e.printStackTrace();
				System.out.println("请插网线!!");
			}
		}

		public void feiQ(int ip) throws NoIpException{
			if(ip == null){
				throw new NoIpException("没有插网线");
			}
			System.out.println("连接成功");
		}
	}

	class NoIpException extends Exception{
		public NoIpException(String message){
			super(message);
		}
	}

    异常体系
    --|Throwable    //所有异常或者错误类的超类
    -----|Error        //错误 一般时用于jvm或者是硬件引发的问题,所以我们一般不会通过代码去处理错误的。
    -----|Exception    //异常 是需要通过代码去处理的
    
    -------|运行时异常:如果一个方法内部抛出了一个运行时异常,那么方法上可以声明异常也可以不声明异常,调用者可以处理也可以不处理
    -------|编译时异常(非于运行时异常、受检异常):如果一个方法内部抛出了一个编译时异常对象,那么方法上就必须要声明,而且调用者也必须要处理。
    
    运行时异常:RuntimeException以及RuntimeException一下的子类都是属于运行时异常。
    
    编译时异常:除了运行时异常就是编译异常。

    finally 块:

  finally 块的使用前提是必须要存在 try 块才能使用。
  finally 块的代码在任何情况系都会执行的,除了jvm退出的情况。 try{ }catch(){ }finally{ }

 

posted @ 2016-11-08 13:52  FromNowOns  阅读(142)  评论(0编辑  收藏  举报