生活中的异常: 不能够完整而顺利的完成一些工作
根据不同的异常进行相应的处理,而不会就此终端我们的生活
引出:
异常处理:
方式: 1.选择结构(逻辑判断)避免
demo:if逻辑处理异常
import java.util.Scanner;
public class TestIF {
/**
* 程序中的异常
* @param 房上的猫
*/
public static void main(String[] args) {
//处理异常的方式1:if ..逻辑判断
Scanner input=new Scanner(System.in);
System.out.print("请输入第一个整数:");
if(input.hasNextInt()==true){
int num1=input.nextInt();//1)输入不是整数类型 2)除法 输入 0
System.out.print("请输入第二个整数:");
int num2=input.nextInt();
if(num2==0){
System.err.println("除数不能为0,程序退出");
System.exit(1);// 退出程序
}
else
{
int jg=num1/num2;//输入num2可能输入 0
System.out.println(jg);
}
}else
{
System.err.println("输入的不是整数,程序退出");
System.exit(1);
}
}
}
弊端: 1)代码臃肿 2)程序员要花很大精力“堵漏洞” 3)程序员很难堵住所有漏洞 2.使用异常机制
异常处理机制,是专门应对异常出现后,如何解决该异常的一种手段 异常是指程序在运行过程中所发生的不正常的时间,它会中断正在运行的程序 Java编程语言使用异常处理机制为程序提供了错误处理机制 异常处理关键字 捕获异常: try(试一试):执行可能产生异常的代码 catch(抓住,捕获):捕获异常 finally(最终):无论是否发生异常,代码总能执行 声明异常: throws(抛出):声明方法可能要抛出的各种异常 抛出异常: throw(抛出):手动抛出异常
throws声明异常,抛给调用者,调用必须进行try...catch 位置:方法名后面进行 声明异常,多个异常使用逗号隔开 //声明异常,多个异常用逗号隔开 只要有throws,强制要求方法调度方法必须 手段1:try catch 2.继续向上抛 public static void a() throws 异常类型{ //可能出现异常的代码 } throw:手动抛出异常 throw new Exception("异常");
注:在真实开发中,如果我们定制了工具类,工具类中有特别复杂的方法,需要各种断定,这个时候,工具类的方法一定有一个机制,就是异常上抛的机制,作用:为了工具的使用房,可以感知到这个异常
demo 01:
import java.util.InputMismatchException;
import java.util.Scanner;
public class TestExceptionThrows1 {
/**
* throws声明异常,抛给调用者处理,调用者必须进行try..catch
* 位置: 方法名后面进行 声明异常,多个异常使用逗号隔开
*/
public static void divid() throws InputMismatchException,ArithmeticException,Exception{
Scanner input=new Scanner(System.in);
System.out.print("请输入第一个整数:");
int num1=input.nextInt();//1)输入不是整数类型 2)除法 输入 0
System.out.print("请输入第二个整数:");
int num2=input.nextInt();
int jg=num1/num2;//输入num2可能输入 0
System.out.println(jg);
}
public static void main(String[] args) {
//调用处必须处理
try {
divid();
} catch (InputMismatchException e) {
System.err.println("输入不匹配");
e.printStackTrace();
} catch (ArithmeticException e) {
System.err.println("除数不能为0");
e.printStackTrace();
} catch (Exception e) {
System.err.println(e.getMessage());
e.printStackTrace();
}
}
}
demo 02:
import java.util.InputMismatchException;
import java.util.Scanner;
public class TestExceptionThrows2 {
/**
* throws声明异常,抛给调用者处理,调用者必须进行try..catch
* 位置: 方法名后面进行 声明异常,多个异常使用逗号隔开
*/
public static void divid() throws InputMismatchException,ArithmeticException,Exception{
Scanner input=new Scanner(System.in);
System.out.print("请输入第一个整数:");
int num1=input.nextInt();//1)输入不是整数类型 2)除法 输入 0
System.out.print("请输入第二个整数:");
int num2=input.nextInt();
int jg=num1/num2;//输入num2可能输入 0
System.out.println(jg);
}
public static void main(String[] args) throws InputMismatchException,ArithmeticException,Exception{
//调用处不处理,抛给了java虚拟机继续处理
divid();
}
}
demo 03:
public class PersonThrow {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>=0 && age<=100){
this.age = age;
}else{
try {
//手动抛出异常
throw new Exception("输入的年龄必须是0~100之间的数");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public String getSex() {
return sex;
}
public void setSex(String sex) throws Exception {
if(!sex.equals("男") && !sex.equals("女")){
throw new Exception("输入必须是男或女");
}else
{
this.sex = sex;
}
}
}
异常的分类
常见的异常处理类型
解析:检查时异常:编译时系统提示必须使用异常处理机制环绕(chenked异常)
运行时异常:运行时抛出异常
使用try-catch-finally处理异常
异常是一种特殊的对象,类型为 java.lang.Exception或其子类
语法: 格式1 :
try{
//可能发生异常的语句
} catch(Exception){
//捕获异常
}finally{
//无论是否有异常,都进入执行
}
执行顺序: try块 发生异常 产生异常对象 异常类型匹配 进入 catch块 程序继续执行
printStactTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程 ex.getMessage(); 返回异常信息描述的字符串 ex.printStactTrace(); 异常堆栈信息 显示具体异常类型 显示产生异常的具体位置
当异常类型不匹配时,程序之间中断
打印自定义处理信息: System.err.println(“自定义信息”);
多路异常捕获:
多个catch块并列,但异常类型不同(捕获可能出现多种异常的代码块)
注:子异常一定在顶级一次之前
demo:try..catch处理异常
import java.util.InputMismatchException;
import java.util.Scanner;
public class TestExceptionTry {
/**
*
*/
public static void main(String[] args) {
try {
Scanner input=new Scanner(System.in);
System.out.print("请输入第一个整数:");
int num1=input.nextInt();//1)输入不是整数类型 2)除法 输入 0
System.out.print("请输入第二个整数:");
int num2=input.nextInt();
int jg=num1/num2;//输入num2可能输入 0
System.out.println(jg);
}catch(ArithmeticException ae){
System.err.println("除数不能为0"+ae.getMessage());
ae.printStackTrace();
}catch(InputMismatchException ae){
System.err.println("输入的不是整数");
System.exit(1);
}
catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
(C) 房上的猫 。 保留所有权利。 https://www.cnblogs.com/lsy131479/
如需转载,请注明出处!!!