生活中的异常:
 
 不能够完整而顺利的完成一些工作

根据不同的异常进行相应的处理,而不会就此终端我们的生活

引出:

 异常处理:

  方式:
     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;
}
} }
public class TestPerson {
public static void main(String[] args) {
PersonThrow per=new PersonThrow();
per.setAge(-90);
System.out.println(per.getAge()); try {
per.setSex("fd");
System.out.println(per.getSex());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

异常的分类

常见的异常处理类型

解析:检查时异常:编译时系统提示必须使用异常处理机制环绕(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/

如需转载,请注明出处!!!

最新文章

  1. Ajaxtoolkit Combobox位置显示不对解决
  2. GetRelevantAnimTimeRemainingFraction节点Bug
  3. OGNL表达式
  4. 【MPI学习5】MPI并行程序设计模式:组通信MPI程序设计
  5. CSS clearfix
  6. 夺命雷公狗---Thinkphp----15之遍历出来的栏目页的完成
  7. Demo学习: Basic jQuery
  8. Ubuntu14.04 安装QQ国际版wine-qqintl
  9. 使用Travis CI自动部署Hexo博客
  10. linkin大话面向对象--多态
  11. iOS中 最新支付宝支付(AliPay) 韩俊强的博客
  12. QPS的优化
  13. 如何更改Audition的界面颜色
  14. Redis的工作流程
  15. linux拷贝文件夹cp
  16. RabbitMQ for CentOS安装教程
  17. ITouch在xcode下提示‘No such file or directory, at ‘/SourceCache/DVTi...&#39;
  18. MySQL 遇到错误集锦
  19. mybatis 反向生成步骤
  20. 通俗易懂讲解happens-before原则

热门文章

  1. c++程序设计中的函数重载
  2. 如何更优雅地写Django REST framework
  3. 多页面应用_vue
  4. Struts2笔记3--获取ServletAPI和OGNL与值栈
  5. Android Build.VERSION.SDK_INT兼容介绍
  6. java连接redis无法连接,报异常RedisConnectionException
  7. 一步一步搭建 oracle 11gR2 rac+dg之grid安装(四)【转】
  8. centos7 安装java和tomcat9
  9. 安卓ios各版本及分辨率占比
  10. UFLDL 教程学习笔记(二)