异常
* 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. 渗透测试之BurpSuite工具的使用介绍(三)

    若希望从更早前了解BurpSuite的介绍,请访问第二篇(渗透测试之BurpSuite工具的使用介绍(二)):https://www.cnblogs.com/zhaoyunxiang/p/160002 ...

  2. mybatis 日志实现 学习总结03

    日志 1.为什么要使用日志 使用日志能对项目: 调试:日志便于记录程序在之前的运行结果 错误定位 数据分析:日志中蕴含了大量的用户数据,包括点击行为,兴趣偏好等,对公司下一步的战略方向有一定指引作用. ...

  3. [递归回溯] LeetCode 504七进制数(摸鱼版)

    LeetCode 七进制数 前言: 这个就没什么好说的了 题目:略 步入正题 进位制转换 10 -n 余数加倒叙 没什么好讲的直接上七进制代码 偷个懒 10进位制转7 class Solution { ...

  4. ArcMap操作随记(12)

    1.[取色器]工具 [自定义]|[自定义模式]|[命令] 2.批量修改符号 [符号系统]→右键,[所有符号的属性] 3.将地图元素转换为图形 转换工具 4.好看的地图边框 [布局视图]→数据框上右键→ ...

  5. 一步一步迁移ASP.NET Core 6.0-Part2

    .NET 6 发布后,我们现有的应用会逐步升级到这个版本,首当其冲的是原因的ASP.NET Core的工程,如果一步一步升级到ASP.NET Core 6.0. 上一篇博文中,跟大家详细介绍了中间件. ...

  6. RDMA相关的技术网站

    https://www.cnblogs.com/vlhn/p/7909893.html https://www.cnblogs.com/vlhn/ 这个家伙的博客写的还不错,可以参考.

  7. weblogic重要漏洞记录

    (PS:之前在freebuf发过,这里直接复制过来的,所以有些图片会有水印) 前言 T3协议存在多个反序列化漏洞CVE-2015-4852/CVE-2016-0638/CVE-2016-3510/CV ...

  8. Rocket Mq 常用API 及简单运维

    RocketMQ 常用API 消息 消息消费模式 消息消费模式由消费者来决定,可以由消费者设置MessageModel来决定消息模式. 消息模式默认为集群消费模式 consumer.setMessag ...

  9. 三极管与MOS管主要参数差别及驱动电路基极(栅极)串联电阻选取原则

    三极管与MOS管都常在电路中被当做开关使用,比较起来: 1. 三极管集电极电流IC (一般为mA级别),远小于MOS管ID(一般为A级别),因此MOS管多用在大电流电路中,如电机驱动 2. 三极管耗散 ...

  10. Spring AOP统一日志 全量日志

    Spring AOP 切面@Around注解的具体使用 lichuangcsdn 2019-02-19 23:21:36 63936 收藏 61分类专栏: Spring 文章标签: Spring AO ...