首页 > 代码库 > java之异常处理(Exception)
java之异常处理(Exception)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
知识点:异常:java.lang.Throwable(Error/Exception(RuntimeException/其他检查异常类))
java中的异常处理
java.lang.Throwable所有异常类和错误类的父类
--java.lang.Error类:程序运行过程中出现的致命的,严重的错误,无法通过异常处理使程序正常执行。
--java.lang.Exception类:是所有异常类的父类
java中的异常可以分为两类:
1.运行时异常:不捕获也可以通过编译。
ArithmeticException:算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException:数组下标越界
NullPointerException:(空指针异常)尝试访问 null 对象成员
ClassCastException:类型转换异常,主要在强制转换时发生
NumberFormatException:数字转换异常
....
2.检查异常:必须捕获否则无法通过编译
ClassNotFoundException:类找不到(类无法加载)异常
IOException:IO异常
....
传统的解决方案:利用if进行判断来堵漏洞(麻烦)
异常:程序在执行过程中遇到特殊的事件,导致程序中断执行。
java中的异常处理: try,catch,finally,throws,throw
* 1.try...catch
* try{
* //可能出现异常的代码
* }catch(异常类型 e){
* //处理异常的代码
* }
执行过程:当try中代码出现异常时,将会抛出一个异常对象,
* 该异常对象会和catch中异常类型进行匹配,如果匹配成功将执行catch中的代码,否则程序中断执行。
异常对象中常用的方法
* printStackTrace():打印异常堆栈跟踪信息(类,消息和异常跟踪信息)
* toString():异常信息(类和消息)
* getMessage():异常消息(异常消息)
try...catch...catch结构:
语法:
* try{
* //可能出现异常的代码
* }catch(异常类型1 e){
* //处理异常类型1的代码;
* }catch(异常类型2 e){
* //处理异常类型2的代码;
* }...
执行过程与多重的if...else if条件分支类似,如果try中的代码发生的异常,将抛出一个异常对象,
* 该异常对象会catch中的异常类型挨个进行匹配,如果匹配成功将执行catch块中的处理代码。
注意:异常类型的范围应该是有小到大,否则会导致其下的catch中的代码不会执行。
try...catch...catch...finally....
Eg:
1 package cn.zzsxt.exception3; 2 3 import java.util.InputMismatchException; 4 import java.util.Scanner; 5 6 public class TestPractice { 7 public static void main(String[] args) { 8 /* 9 按照控制台提示输入1~3之间任一个数字,程序将输出相应的课程名称 10 根据键盘输入进行判断。如果输入正确,输出对应课程名称。如果输入错误,给出错误提示 11 不管输入是否正确,均输出“欢迎提出建议”语句 12 */ 13 System.out.println("请输入课程代号(1~3中任意的数):"); 14 Scanner input = new Scanner(System.in); 15 try{ 16 String str = input.next(); 17 int num = Integer.parseInt(str);//把str转换成int类型的数值 18 if(num==1) { 19 System.out.println("C#编程"); 20 }else if(num==2) { 21 System.out.println("Java编程"); 22 }else if(num==3) { 23 System.out.println("SQL编程"); 24 }else { 25 System.out.println("请输入1~3之间的数字!"); 26 } 27 }catch(InputMismatchException e) { 28 System.out.println("输入的数据类型不匹配!"); 29 }finally { 30 System.out.println("欢迎提出建议!"); 31 } 32 } 33 }
throws和throw关键字:
* throws:在声明方法时声明该方法存在的异常。
* throw:在方法内部抛出异常。
throws和throw的区别:
* 1.位置不同: throws在方法声明名用于声明该方法存在的异常,throw在方法内部用于抛出异常。
* 2.类型不同: throws后边跟的是异常类型,throw后边的异常对象
* 3.作用不同: throws的作用是告知方法的调用者该方法存在某种异常类型需要处理,
throw的作用:用于抛出某种具体的异常对象。
throws的作用:声明方法可能抛出的异常类型。
注意:经常throws和throw结合使用。
1 package cn.zzsxt.exception4; 2 3 import java.util.Scanner; 4 /** 5 * throws和throw关键字. 6 * throws:在声明方法时声明该方法存在的异常。 7 * throw:在方法内部抛出异常。 8 * throws和throw的区别: 9 * 1.位置不同: throws在方法声明名用于声明该方法存在的异常,throw在方法内部用于抛出异常。 10 * 2.类型不同: throws后边跟的是异常类型,throw后边的异常对象 11 * 3.作用不同: throws的作用是告知方法的调用者该方法存在某种异常类型需要处理, 12 * throw的作用在用于抛出某种具体的异常对象。 13 * 经常throws和throw结合使用。 14 */ 15 public class TestThrows { 16 public static int divide() throws ArithmeticException { 17 System.out.println("输入被除数:"); 18 Scanner input = new Scanner(System.in); 19 /* try{ 20 int num1 = input.nextInt(); 21 System.out.println("输入除数:"); 22 int num2 = input.nextInt(); 23 int num3 = num1/num2; 24 return num3; 25 }catch(ArithmeticException e) { 26 throw new ArithmeticException();//抛出异常 27 }*/ 28 29 int num1 = input.nextInt(); 30 System.out.println("输入除数:"); 31 int num2 = input.nextInt(); 32 int num3 = num1/num2; 33 return num3; 34 } 35 36 public static void main(String[] args) { 37 try{ 38 int num = divide(); 39 System.out.println("num="+num); 40 }catch(ArithmeticException e) { 41 System.err.println("除数不能为零!"); 42 } 43 } 44 }
检查异常必须进行处理,否则无法通过编译。
常见的检查异常:
*ClassNotFoundException:类找不到异常。
*SQLException:操作SQL语句出现的异常信息
*IOException:操作IO流出现的异常信息
*....
Eg:
1 package cn.zzsxt.exception4; 2 /** 3 *检查异常必须进行处理,否则无法通过编译。 4 *常见的检查异常: 5 *ClassNotFoundException:类找不到异常。 6 *SQLException:操作SQL语句出现的异常信息 7 *IOException:操作IO流出现的异常信息 8 *.... 9 *捕获检查异常的快捷键:1.选中出现检查异常的代码 10 * 2.alt+shift+z 11 * 12 .-‘ _..`. 13 / .‘_.‘.‘ 14 | .‘ (.)`. 15 ;‘ ,_ `. 16 .--.__________.‘ ; `.;-‘ 17 | ./ / 18 | | / 19 `..‘`-._ _____, ..‘ 20 / | | | |\ 21 / /| | | | \ 22 / / | | | | \ 23 /_/ |_| |_| \_24 |__\ |__\ |__\ |__25 */ 26 27 public class TestChecked { 28 public static void main(String[] args) { 29 try { 30 Class.forName("java.lang.String"); 31 } catch (ClassNotFoundException e) { 32 e.printStackTrace(); 33 } 34 35 try { 36 int num = 4/0; 37 } catch (Exception e) { 38 e.printStackTrace(); 39 } 40 } 41 }
自定义异常:如果JDK中异常类型无法满足程序需要。
步骤:
* 1.编写自定义异常类:继承Exception或RuntimeException
* 2.编写构造方法,继承父类的实现(把自定义的异常消息传给父类)
* 3.实例化自定义异常对象
* 4.使用throw抛出
Eg:
1 package cn.zzsxt.exception5; 2 /** 3 * 自定义异常:如果JDK中异常类型无法满足程序需要。 4 * 步骤: 5 * 1.编写自定义异常类:继承Exception或RuntimeException 6 * 2.编写构造方法,继承父类的实现 7 * 3.实例化自定义异常对象 8 * 4.使用throw抛出 9 */ 10 public class SexException extends Exception{ 11 public SexException(String message) { 12 super(message); 13 } 14 }
1 package cn.zzsxt.exception5; 2 /** 3 * 自定义异常:如果JDK中异常类型无法满足程序需要。 4 * 步骤: 5 * 1.编写自定义异常类:继承Exception或RuntimeException 6 * 2.编写构造方法,继承父类的实现 7 * 3.实例化自定义异常对象 8 * 4.使用throw抛出 9 */ 10 public class AgeException extends RuntimeException{ 11 public AgeException(String message) { 12 super(message);//调用父类RuntimeException的构造方法,把自己定义的异常消息传给父类 13 } 14 }
1 package cn.zzsxt.exception5; 2 3 public class Student { 4 private String name; 5 private int age; 6 private String sex; 7 8 public Student() { 9 super(); 10 // TODO Auto-generated constructor stub 11 } 12 13 public Student(String name, int age, String sex) { 14 super(); 15 this.name = name; 16 this.age = age; 17 this.sex = sex; 18 } 19 20 public String getName() { 21 return name; 22 } 23 24 public void setName(String name) { 25 this.name = name; 26 } 27 28 public int getAge() { 29 return age; 30 } 31 32 public void setAge(int age) throws AgeException{ 33 if(age>=1&&age<=100) { 34 this.age = age; 35 }else { 36 throw new AgeException("年龄必须在1~100之间的数!"); 37 } 38 } 39 40 public String getSex() { 41 return sex; 42 } 43 44 public void setSex(String sex) throws SexException{ 45 if(sex.equals("男")||sex.equals("女")){ 46 this.sex = sex; 47 }else { 48 throw new SexException("性别必须是男或者是女!"); 49 } 50 51 } 52 53 @Override 54 public String toString() { 55 return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]"; 56 } 57 58 59 }
1 package cn.zzsxt.exception5; 2 3 public class TestMyException { 4 public static void main(String[] args) { 5 Student stu = new Student(); 6 stu.setName("zhangsan"); 7 try { 8 stu.setAge(200); 9 stu.setSex("男"); 10 } catch (SexException e) { 11 System.err.println(e.getMessage()); 12 } catch (AgeException e) { 13 System.err.println(e.getMessage()); 14 } finally{ 15 System.out.println("学生信息:"+stu); 16 } 17 } 18 }
=====================================================================================================
java之异常处理(Exception)