异常
* 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. tp5(laravel7) ajax模型修改数据

    ① 设置ajax请求(10分) ② 后台更改数据值(10分) ③ 重新计算平均分(10分) ④ 无刷新更新评分结果(10分) 思路: 在详情页面中有一个评分的按钮,单击后进行修改数据,首先找见本条数据 ...

  2. Go值类型和引用类型+作用域+空白标识符+常量

    值类型和引用类型 所有像 int.float.bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值: 当使用等号 = 将一个变量的值赋值给另一个变量时,如:j ...

  3. Django基础八之认证模块---auth

    Django基础八之认证模块---auth 目录 Django基础八之认证模块---auth 1. auth介绍 2. autho常用操作 2.1 创建用户 2.2 验证用户 2.3 验证用户是否登录 ...

  4. 旅游清单一步搭建,Angular助力你的踏春计划

    春天的脚步愈发临近,相信很多小伙伴已经开始规划自己的踏春计划了,无论是欣赏名胜古迹,还是走访风土人文,你都需要提前准备一份旅游清单!有了这款Angular旅游计划应用,从地点到预算,它都能帮助你创建自 ...

  5. static变量和函数如何巧妙调用

    app.c 和 main.c 之间,在main.c中调用app.c的static变量和函数,需要利用一个结构体结合指针通过传地址的方式间接访问. app   --------------------- ...

  6. MindSpore尝鲜之Vmap功能

    技术背景 Vmap是一种在python里面经常提到的向量化运算的功能,比如之前大家常用的就是numba和jax中的向量化运算的接口.虽然numpy中也使用到了向量化的运算,比如计算两个numpy数组的 ...

  7. C++ cout 数字之间进制的转换

    转换一个数变成8进制,则为 cout << oct << x << endl; 转换一个数变为16进制,为 cout << hex << x ...

  8. 什么是 Spring Profiles?

    Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean.因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些 ...

  9. Oracle入门基础(十二)一一储存过程及触发器

    1.第一个存储过程 打印Hello World 调用存储过程: 1.exec sayhelloworld(); 2.begin sayhelloworld(); sayhelloworld(); en ...

  10. phpstorm 快捷生成函数

    在函数上一行键入 /** /** * @param $a * @param $b * @return mixed */ function abc($a, $b) { $c = $a + $b; ret ...