异常
* 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. linux作业--第十周

    1.在阿里云服务器搭建openv-p-n(有条件的同学再做) 2.通过编译.二进制安装MySQL5.7 编译安装MySQL5.7 安装相关包 yum -y install libaio numactl ...

  2. linux作业--第七周

    1.解决DOS攻击生产案例:根据web日志或者或者网络连接数,监控当某个IP 并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔5分钟.防火墙命令为:iptables - ...

  3. MATLAB菜鸟入门笔记【函数章】

    一.用捷径表达式赋值 1.first:incr:last   first代表数组的每一个值,incr代表步增量,last代表这个数组的最后一个值. Ep:>>x=1:2:10        ...

  4. 微信小程序搜索并高亮关键字

    更多解读可使用博客: https://www.jianshu.com/p/86d73745e01c 实现流程:1.在文本框中输入关键字key,如"比赛",检索出比赛相关的列表key ...

  5. laravel8安装步骤

    网址: https://learnku.com/docs/laravel/8.x/installation/9354 安装: # 安装laravel composer create-project - ...

  6. Re:《Unity Shader入门精要》13.3全局雾效--如何从深度纹理重构世界坐标

    如何从深度纹理重构世界坐标 游戏特效,后处理是必不可少的,而后处理经常需要我们得到当前画面的像素对应世界空间的所有信息. 思路 通过深度纹理取得NDC坐标,然后再通过NDC坐标还原成世界空间坐标 // ...

  7. ArcMap连接oracle、oracle配置

    服务器:Oracle 11g 客户端:arcgis desktop 10.4.1.oracle 11g 32位客户端 客户端:arcgis server 10.4.1.oracle 11g 64位客户 ...

  8. Java使用多线程异步执行批量更新操作

    import com.google.common.collect.Lists; import org.apache.commons.collections.CollectionUtils; impor ...

  9. super.getClass()方法调用?

    下面程序的输出结果是多少? import java.util.Date; public class Test extends Date{ public static void main(String[ ...

  10. Spring 的优点?

    (1)spring属于低侵入式设计,代码的污染极低: (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性: (3)Spring提供了AOP技术,支持将一些通用任务,如安全. ...