异常
* 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. Maven安装与配置——详细教程

    一.安装Maven 进入Maven官网,下载安装包(https://maven.apache.org/download.cgi) . 2.下载完成后,解压到某一路径下.本文以C:\Soft\Java\ ...

  2. 面试官:Redis中有序集合的内部实现方式是什么?

    面试官:Redis中基本的数据类型有哪些? 我:Redis的基本数据类型有:字符串(string).哈希(hash).列表(list).集合(set).有序集合(zset). 面试官:有序集合的内部实 ...

  3. Cocoapods插件机制浅析

    原文链接 背景 虽然做iOS开发的过程中使用过 Cocoapods, 但是对里面的细节了解其实不算太多,直到这两年做织女项目时,通过对Cocoapods进行Qt支持改造才开始深入了解部分细节,这个过程 ...

  4. Idea 连接MySQL数据库

    Idea 连接MySQL数据库 注意: 需要导入jar包,mysql-connector-java-8.0.16.jar mysql8.0及以上 使用的驱动 drive=com.mysql.cj.jd ...

  5. JVM知识梳理

    JDK 是什么? JDK 是用于支持 Java 程序开发的最小环境. Java 程序设计语言 Java 虚拟机 Java API类库 JRE 是什么? JRE 是支持 Java 程序运行的标准环境. ...

  6. Java程序员必备的工具和框架

    最近几年,Java 的技术栈发展的非常快,成百上千的技术工具正不断地涌出来,这也造成了一个问题: 我们作为开发者,到底应该选哪些工具搭建出最合适的技术栈呢? 今天我就推荐一波我常用的.我了解的工具和框 ...

  7. 《前端运维》二、Nginx--1基本概念及安装

    一.Nginx基本概念 简单来说,Nginx就是一个代理服务器,什么是代理服务器呢?也就是当我们访问服务器的时候,请求不会直接请求到服务器,中间会有个代理,代理会预先于服务器处理这些请求,最后由代理决 ...

  8. ClickHouse镜像在阿里云镜像站首发上线

    镜像下载.域名解析.时间同步请点击阿里云开源镜像站 简介 ClickHouse是开源.高性能的列式OLAP的数据库管理系统(DBMS).使用SQL进行实时分析. ClickHouse可以做用户行为分析 ...

  9. redis的事件处理机制

    redis的事件处理机制 redis是单进程,单线程模型,与nginx的多进程不同,与golang的多协程也不同,"工作的工人"那么少,可那么为什么redis能这么快呢? epol ...

  10. Spring Authorization Server 0.2.3发布,放出联合身份DEMO

    很快啊Spring Authorization Server又发新版本了,现在的版本是0.2.3.本次都有什么改动呢?我们来了解一下. 0.2.3版本特性 本次更新的新特性不少. 为公开客户端提供默认 ...