hpe实训(异常①)

一.异常的概念:

在Java程序中可能程序执行意外失败的事件称为异常
程序运行—>异常—>程序中断运行

异常的出现的情况
*   ①.运行时磁盘空间不够
*   ②.内存耗尽无法进行实例化
*   ③.算术异常
*   ④.JVM崩溃

二.异常的体系结构

1.所有异常类的祖先是Throwable
2.异常可以分为Error和Exception
*	 	①.Error:错误 程序不进行处理
*	    ②.Exception:异常 在程序开发中,要对这些异常进行处理
*		  -- 编译时异常:在编译时出现的异常
* 	      -- 运行时异常:在运行时出现的异常

三.常见的异常

* 1.数组下标越界的异常 ArrayIndexOutOfBoundsException
* 2.算术异常 ArithmeticException
* 3.空指针异常 NullPiontException
* 4.类型转换异常 ClassCastException

四.处理异常

处理异常的方式:抓抛模型

1.抛:
* 当执行程序时,一旦出现异常,就会生成一个对应异常类型的对象,并将对象抛出。
        ①.抛的类型:自动抛和手动抛 
        ②.此异常的对象处理是交给方法的调用者
* Java程序在执行的过程中,如果出现异常,会自动生成一个异常类对象。将来交给方法的调用者。
2.抓:抓住程序中抛出的异常对象。
*  在Java程序运行时收到异常对象,会寻找能处理这种类型的代码,并把当前异常对象交给其来处理。
* 	 1.try-catch-finally
* 	   try{
* 		 // 可能会发生异常的代码
* 	   }catch(Exception e1){
*       // 处理方式一
*     }catch(Exception e2){
*       // 处理方式二
*     }finally{
*       // 一定要执行的代码
*     }
*    ①.try代码块里面存放的代码是有可能发生异常的代码,同时需要知道try代码块中声明的变量是局部变量,作用域是在代码块中
*    ②.catch语句是用来处理异常
*    	 getMessage():获取异常信息
*    	 printStrackTrace():打印异常信息(程序出错的位置信息及原因)
*    ③.catch代码块可以用多个,try中抛出的异常对象是从上往下去匹配catch中的异常对象,一旦满足就执行catch中的代码,执行完后就跳出所有的cathch
*    ④.如果catch中多个异常是并列关系,不需要考虑顺序问题。
*    ⑤.如果catch中有多个异常有继承关系,字类需要在父类异常对象上面。
*    ⑥.finally是可选的代码块,如果加了finally,不论是否出现异常,都会执行finally中的代码。

提示:

①.对于运行时异常来说,可以不用显示的处理异常
②.对于编译时异常来说,必须要显示的进行异常处理。

public class TestException2 {
	// 常见的异常
	// 1.数组下标越界的异常
	@Test
	public void test1(){
		try{
			int[] numbers = new int[5];
			System.out.println(numbers[5]);			
		} catch(ArrayIndexOutOfBoundsException e){
			e.printStackTrace();
		}
	}
	
	// 2.算术异常
	@Test
	public void test2(){
		try {
			int i = 5;
			System.out.println(i / 0);
		} catch (ArithmeticException e) {
			System.out.println(e.getMessage());
		}
	}
	
	// 3.类型转换异常  ClassCastException
	@Test
	public void test3(){
		Object date = new Date();
		try {
			String str = (String) date;
		} catch (ClassCastException e) {
			e.printStackTrace();
		}
		
	}
	
	
	// 4.空指针异常 NullPointerException
	@Test
	public void test4(){
		try {
			String[] names = null;
			System.out.println(names[0]);
		} catch (NullPointerException e) {
			e.printStackTrace();
		}
	}
	
	
	@Test
	public void test5(){
		// 一旦出现异常.异常后面的代码不会执行
		FileInputStream fs = null;
		try{
			int i = 10/0;
			fs = new FileInputStream(new File("hello.txt"));
			Thread.sleep(200);
		}catch(IOException e){
			e.printStackTrace();
		}catch(InterruptedException e){
			e.printStackTrace();
		}catch (ArithmeticException e) {
			System.out.println("分母不能为0");
		}finally {
			try {
				fs.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			System.out.println("我是一个帅哥");
		}
		
	}

如何自定义异常

  • 1.自定义的异常类需要继承于现有的异常类(RunntimeException|Exception)
  • 2.提供一个序列号,通过序列号可以唯一确定异常类的对象
  • 3.需要提供一个重载的构造器

异常处理方式一:try-catch-finally(自行处理)

异常处理方式二:

 *  1.在方法的声明处,显示的抛出异常对应的类型(委托处理)
 *  2.语法格式:public void method() throws ClassCastException,FileNotFoundException
*   3.处理剖析:
 *  	①.当此方法内出现异常时,会抛出一个异常类的对象,抛给方法的使用者。
 *  	②.异常对象是可以一直向上抛,直到Main函数,也可以通过try-catch进行异常处理。

总结:

 *  1.抓:异常的处理
 *    两种处理方式:①.try-catch
 *    			   ②.throws+异常类型....
 *  2.抛:一旦在程序执行中出现异常,会抛出一个异常类的对象
 *    两种方式:①.自动抛出
 *    		   ②.手动抛出throw +异常类的对象
发布了30 篇原创文章 · 获赞 0 · 访问量 1949

猜你喜欢

转载自blog.csdn.net/qq_38499019/article/details/104560315