异常
* A:异常的概述
 * 异常就是Java程序在运行过程中出现的错误。
* B:异常的分类
 * Error:服务器宕机,数据库崩溃等
 * Exception
C:异常的继承体系
 * Throwable
  * Error 
  * Exception
   * RuntimeException
JVM默认是如何处理异常的
 main函数收到这个问题时,有两种处理方式:
 * a:自己将该问题处理,然后继续运行
 * b:自己没有针对的处理方式,只有交给调用main的jvm来处理
 jvm有一个默认的异常处理机制,就将该异常进行处理.
 * 并将该异常的名称,异常的信息.异常出现的位置打印在了控制台上,同时将程序停止运行
异常处理的两种方式
 * a:try…catch…finally
  * try catch
  * try catch finally
  * try finally
 * b:throws

编译期异常和运行期异常的区别
 Java中的异常被分为两大类:编译时异常和运行时异常。
 所有的RuntimeException类及其子类的实例被称为运行时异常,其他的异常就是编译时异常
 编译时异常:Java程序必须显示处理,否则程序就会发生错误,无法通过编译
 运行时异常:无需显示处理,也可以和编译时异常一样处理
 
Throwable的几个常见方法
 * a:getMessage()
  * 获取异常信息,返回字符串。
 * b:toString()
  * 获取异常类名和异常信息,返回字符串。
 * c:printStackTrace()
  * 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
throws的方式处理异常
* A:throws的方式处理异常
 * 定义功能方法时,需要把出现的问题暴露出来让调用者去处理。
 * 那么就通过throws在方法上标识。
throw的概述
 * 在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。
throw的概述以及和throws的区别
 * a:throws
  * 用在方法声明后面,跟的是异常类名
  * 可以跟多个异常类名,用逗号隔开
  * 表示抛出异常,由该方法的调用者来处理
 * b:throw
  * 用在方法体内,跟的是异常对象名
  * 只能抛出一个异常对象名
  * 表示抛出异常,由方法体内的语句处理
finally关键字的特点及作用
* A:finally的特点
 * 被finally控制的语句体一定会执行
 * 特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))
* B:finally的作用
 * 用于释放资源,在IO流操作和数据库操作中会见到。
 
自定义异常
 * 继承自Exception
 * 继承自RuntimeException
异常注意事项
 * a:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)
 * b:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
 * c:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
如何使用异常处理
 * 原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throws
 * 区别:
  * 后续程序需要继续运行就try
  * 后续程序不需要继续运行就throws
 
 
/**
   * 编译时异常的抛出必须对其进行处理
   * 运行时异常的抛出可以处理也可以不处理
  * @throws Exception
  */
 public static void main(String[] args) throws Exception {
  Person p = new Person();
  p.setAge(-17);
  System.out.println(p.getAge());
 }
}
class Person {
 private String name;
 private int age;
 public Person() {
  super();
  
 }
 public Person(String name, int age) {
  super();
  this.name = name;
  this.age = age;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) throws AgeOutOfBoundsException {
  if(age >0 && age <= 150) {
   this.age = age;
  }else {
   //Exception e = new Exception("年龄非法");
   //throw e;
   throw new AgeOutOfBoundsException("年龄非法");
  }
 }
 
 
}

//运行期异常
 * @throws RuntimeException
  */
 public static void main(String[] args) {
  Person p = new Person();
  p.setAge(-17);//运行期异常不需要处理  运行时才会报错
  System.out.println(p.getAge());
 }
}
class Person {
 private String name;
 private int age;
 public Person() {
  super();
  
 }
 public Person(String name, int age) {
  super();
  this.name = name;
  this.age = age;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {//运行期异常可以不用提示   不用throws
  if(age >0 && age <= 150) {
   this.age = age;
  }else {
   throw new RuntimeException ("年龄非法");
  }
 }
 
 
}
 
 
 
多个异常的处理
public class Test2 {
 /**
  * 键盘录入一个int类型的整数,对其求二进制表现形式
  * 如果录入的整数过大,给予提示,录入的整数过大请重新录入一个整数BigInteger
  * 如果录入的是小数,给予提示,录入的是小数,请重新录入一个整数
  * 如果录入的是其他字符,给予提示,录入的是非法字符,请重新录入一个整数
  *
  * 分析:
  * 1,创建键盘录入对象
  * 2,将键盘录入的结果存储在String类型的字符串中,存储int类型中如果有不符合条件的直接报错,无法进行后续判断
  * 3,键盘录入的结果转换成int类型的数据,是正确的还是错误的
  * 4,正确的直接转换
  * 5,错误的要进行对应判断
  */
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  System.out.println("请输入一个整数:");
  
  
  while(true) {
   String line = sc.nextLine();     //将键盘录入的结果存储在line中
   try {
    int num = Integer.parseInt(line);    //将字符串转换为整数
    System.out.println(Integer.toBinaryString(num));//将整数转换为二进制
    break;           //跳出循环
   }catch(Exception e) {
    try {
     new BigInteger(line);
     System.out.println("录入错误,您录入的是一个过大整数,请重新输入一个整数:");
    }catch (Exception e2) {       //alt + shif + z (try catch快捷键)
     try {
      new BigDecimal(line);
      System.out.println("录入错误,您录入的是一个小数,请重新输入一个整数:");
     } catch (Exception e1) {
      System.out.println("录入错误,您录入的是非法字符,请重新输入一个整数:");
     }
    }
    
   }
  }
  
  
 }
}
 

java基础-java异常处理的更多相关文章

  1. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  2. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  3. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.

  4. Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)

    Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...

  5. Java基础-Java中的并法库之线程池技术

    Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.

  6. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  7. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  8. Java基础-Java数据类型

    Java基础-Java数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型的作用 数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围 ...

  9. 【Java基础】异常处理

    异常处理 异常概述 在 Java 语言中,将程序执行中发生的不正常情况称为"异常",但是开发过程中的语法错误和逻辑错误不是异常. 在执行过程中所发生的异常事件可分为两类: Erro ...

  10. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

随机推荐

  1. [csi]浅聊ceph-csi组件

    描述   ceph-csi扩展各种存储类型的卷的管理能力,实现第三方存储ceph的各种操作能力与k8s存储系统的结合.调用第三方存储ceph的接口或命令,从而提供ceph数据卷的创建/删除.挂载/解除 ...

  2. props配置

    配置项props 功能:让组件接收外部传过来的数据[相当于微信转账:有一个转账人转钱给接收者,接收者需要确认接收] (1)传递数据: <Demo name="xxx"> ...

  3. python3输出由1、2、3、4这四个数字组成的每位数都不相同的所有三位数

    for i in range(1,5): for j in range(1,5): for k in range(1,5): if(i!=j and i!=k and j!=k): print(i*1 ...

  4. PMP之挣值管理(PV、EV、AC、SV、CV、SPI、CPI)的记忆方法

    挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV. PV:计划值,在即定时间点前计划完成活动 ...

  5. Redis的Unable to connect to Redis和java.io.IOException: 远程主机强迫关闭了一个现有的连接问题的解决

      学习项目xhr系统用到springboot + vue(https://github.com/lenve/vhr),文档中要求使用到RabbitMQ,但是从我搭建开发环境来看,是否配置Rabbit ...

  6. 前端好用API之Fullscreen

    前情 在前端开发需求中,特别网页有视频需求时,需要做视频全屏功能,或者在某些可视化大屏项目也要做全屏. Fullscreen介绍 让你可以简单地控制浏览器,使得一个元素与其子元素,如果存在的话,可以占 ...

  7. 亚马逊云储存器S3 BCUKET安全性学习笔记

    亚马逊云储存器S3 BCUKET安全性学习笔记 Bugs_Bunny CTF – Walk walk CTF 昨天玩了会这个比赛,碰到这题是知识盲点,来记录一下. 先从题目看起吧. http://ww ...

  8. python 命令行参数学习(一)

    用了这么久,还没怎么学习python的命令行参数,是在惭愧. 参考文章地址:http://www.cnblogs.com/jianboqi/archive/2013/01/10/2854726.htm ...

  9. STM32控制永磁同步电机 | FOC电机控制算法概述

    1. FOC基本概念 参考:https://www.sohu.com/a/432103720_120929980 FOC(field-oriented control)为磁场导向控制,又称为矢量控制( ...

  10. 初识$router和$route

    初识\(router和\)route 一.前言 ​ vue框架中单页面富应用可以说是其最大的优点功能之一了,应用起来简单直观,说起单页面富应用那就必须得联想到\(router**,但是在项目开发过程中 ...