Java 中的异常处理机制
生活中的异常:
不能够完整而顺利的完成一些工作
根据不同的异常进行相应的处理,而不会就此终端我们的生活
引出:
异常处理:
方式:
1.选择结构(逻辑判断)避免
demo:if逻辑处理异常
- import java.util.Scanner;
- public class TestIF {
- /**
- * 程序中的异常
- * @param 房上的猫
- */
- public static void main(String[] args) {
- //处理异常的方式1:if ..逻辑判断
- Scanner input=new Scanner(System.in);
- System.out.print("请输入第一个整数:");
- if(input.hasNextInt()==true){
- int num1=input.nextInt();//1)输入不是整数类型 2)除法 输入 0
- System.out.print("请输入第二个整数:");
- int num2=input.nextInt();
- if(num2==0){
- System.err.println("除数不能为0,程序退出");
- System.exit(1);// 退出程序
- }
- else
- {
- int jg=num1/num2;//输入num2可能输入 0
- System.out.println(jg);
- }
- }else
- {
- System.err.println("输入的不是整数,程序退出");
- System.exit(1);
- }
- }
- }
弊端:
1)代码臃肿
2)程序员要花很大精力“堵漏洞”
3)程序员很难堵住所有漏洞
2.使用异常机制
异常处理机制,是专门应对异常出现后,如何解决该异常的一种手段
异常是指程序在运行过程中所发生的不正常的时间,它会中断正在运行的程序
Java编程语言使用异常处理机制为程序提供了错误处理机制
异常处理关键字
捕获异常:
try(试一试):执行可能产生异常的代码
catch(抓住,捕获):捕获异常
finally(最终):无论是否发生异常,代码总能执行
声明异常:
throws(抛出):声明方法可能要抛出的各种异常
抛出异常:
throw(抛出):手动抛出异常
throws声明异常,抛给调用者,调用必须进行try...catch
位置:方法名后面进行 声明异常,多个异常使用逗号隔开
//声明异常,多个异常用逗号隔开
只要有throws,强制要求方法调度方法必须 手段1:try catch 2.继续向上抛
public static void a() throws 异常类型{
//可能出现异常的代码
}
throw:手动抛出异常
throw new Exception("异常");
注:在真实开发中,如果我们定制了工具类,工具类中有特别复杂的方法,需要各种断定,这个时候,工具类的方法一定有一个机制,就是异常上抛的机制,作用:为了工具的使用房,可以感知到这个异常
demo 01:
- import java.util.InputMismatchException;
- import java.util.Scanner;
- public class TestExceptionThrows1 {
- /**
- * throws声明异常,抛给调用者处理,调用者必须进行try..catch
- * 位置: 方法名后面进行 声明异常,多个异常使用逗号隔开
- */
- public static void divid() throws InputMismatchException,ArithmeticException,Exception{
- Scanner input=new Scanner(System.in);
- System.out.print("请输入第一个整数:");
- int num1=input.nextInt();//1)输入不是整数类型 2)除法 输入 0
- System.out.print("请输入第二个整数:");
- int num2=input.nextInt();
- int jg=num1/num2;//输入num2可能输入 0
- System.out.println(jg);
- }
- public static void main(String[] args) {
- //调用处必须处理
- try {
- divid();
- } catch (InputMismatchException e) {
- System.err.println("输入不匹配");
- e.printStackTrace();
- } catch (ArithmeticException e) {
- System.err.println("除数不能为0");
- e.printStackTrace();
- } catch (Exception e) {
- System.err.println(e.getMessage());
- e.printStackTrace();
- }
- }
- }
demo 02:
- import java.util.InputMismatchException;
- import java.util.Scanner;
- public class TestExceptionThrows2 {
- /**
- * throws声明异常,抛给调用者处理,调用者必须进行try..catch
- * 位置: 方法名后面进行 声明异常,多个异常使用逗号隔开
- */
- public static void divid() throws InputMismatchException,ArithmeticException,Exception{
- Scanner input=new Scanner(System.in);
- System.out.print("请输入第一个整数:");
- int num1=input.nextInt();//1)输入不是整数类型 2)除法 输入 0
- System.out.print("请输入第二个整数:");
- int num2=input.nextInt();
- int jg=num1/num2;//输入num2可能输入 0
- System.out.println(jg);
- }
- public static void main(String[] args) throws InputMismatchException,ArithmeticException,Exception{
- //调用处不处理,抛给了java虚拟机继续处理
- divid();
- }
- }
demo 03:
- public class PersonThrow {
- private String name;
- private int age;
- private String sex;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- if(age>=0 && age<=100){
- this.age = age;
- }else{
- try {
- //手动抛出异常
- throw new Exception("输入的年龄必须是0~100之间的数");
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) throws Exception {
- if(!sex.equals("男") && !sex.equals("女")){
- throw new Exception("输入必须是男或女");
- }else
- {
- this.sex = sex;
- }
- }
- }
- public class TestPerson {
- public static void main(String[] args) {
- PersonThrow per=new PersonThrow();
- per.setAge(-90);
- System.out.println(per.getAge());
- try {
- per.setSex("fd");
- System.out.println(per.getSex());
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
异常的分类
常见的异常处理类型
解析:检查时异常:编译时系统提示必须使用异常处理机制环绕(chenked异常)
运行时异常:运行时抛出异常
使用try-catch-finally处理异常
异常是一种特殊的对象,类型为 java.lang.Exception或其子类
语法:
格式1 :
- try{
- //可能发生异常的语句
- } catch(Exception){
- //捕获异常
- }finally{
- //无论是否有异常,都进入执行
- }
执行顺序:
try块 发生异常 产生异常对象
异常类型匹配 进入 catch块
程序继续执行
printStactTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程
ex.getMessage();
返回异常信息描述的字符串
ex.printStactTrace();
异常堆栈信息
显示具体异常类型
显示产生异常的具体位置
当异常类型不匹配时,程序之间中断
打印自定义处理信息:
System.err.println(“自定义信息”);
多路异常捕获:
多个catch块并列,但异常类型不同(捕获可能出现多种异常的代码块)
注:子异常一定在顶级一次之前
demo:try..catch处理异常
- import java.util.InputMismatchException;
- import java.util.Scanner;
- public class TestExceptionTry {
- /**
- *
- */
- public static void main(String[] args) {
- try {
- Scanner input=new Scanner(System.in);
- System.out.print("请输入第一个整数:");
- int num1=input.nextInt();//1)输入不是整数类型 2)除法 输入 0
- System.out.print("请输入第二个整数:");
- int num2=input.nextInt();
- int jg=num1/num2;//输入num2可能输入 0
- System.out.println(jg);
- }catch(ArithmeticException ae){
- System.err.println("除数不能为0"+ae.getMessage());
- ae.printStackTrace();
- }catch(InputMismatchException ae){
- System.err.println("输入的不是整数");
- System.exit(1);
- }
- catch (Exception e) {
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- }
- }
(C) 房上的猫 。 保留所有权利。
https://www.cnblogs.com/lsy131479/
如需转载,请注明出处!!!
Java 中的异常处理机制的更多相关文章
- Java中的异常处理机制的简单原理和应用?
程序运行过程中可能出现各种"非预期"情况,这些非预期情况可能导致程序非正常结束. 为了提高程序的健壮性,Java提供了异常处理机制: try { s1... s2... s3... ...
- 16、java中的异常处理机制
异常:就是程序在运行时出现不正常情况.异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述.并封装成对象. 其实就是java对不正常情况进行描述后的对象体现. 对于问题的划 ...
- java中的异常处理机制
java异常处理机制 1)在java语言中,通常将可能出现异常的语句放入try{}语句中,将出现错误后需要执行的语句放入到catch{}语句中,将无论是否发生异常都要执行的语句放在finally{}语 ...
- Java中的异常处理机制《》
异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性. Java异常机制主要依赖于try.catch.finall ...
- Java中的异常处理机制的简单原理和应用
异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间.地点.人物.情节等信息,可以用一个对象来表示,Java使用面向对象的方式 ...
- java中的异常处理机制_函数覆盖时的异常特点
/*注意:异常声明在函数上 异常在子父类覆盖时的体现1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者异常的子类2.如果父类方法抛出多个异常,那么子类在覆盖该方法 ...
- 【Java面试题】21 Java中的异常处理机制的简单原理和应用。
异常指Java程序运行时(非编译)所发生的非正常情况或错误. java对异常进行了分类,不同类型的异常使用了不同的java类,所有异常的根类为java.lang.Throwable.Throwable ...
- java中的异常处理机制_finally的使用
finally总结: finally代码块:定义一定执行的代码 通常用于关闭资源或者某些一定执行的代码 实例1:finally功能演示 class FuShuException extends Exc ...
- 43 java中的异常处理机制的简单原理和应用
随机推荐
- Android 5.0 最应该实现的8个期望
毫无疑问,Android 5 将是令人兴奋的操作系统,因为 Android4.0 至 4.4 版本之间并没有显著的差异,显然谷歌会在 5.0 版本中进行一些较大幅度的革新.那么,代号为“柠檬芝士蛋糕” ...
- 为什么JavaScript声明变量的时候鼓励加var关键字
在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它. var x = "XX"; y ="xx ...
- 分享自己新做的vim colorscheme
把下面的内容保存成darkslategrey.vim,放入~/.vim/colors目录即可. " Vim color file " Maintainer: jiqing() &q ...
- C语言入门教程-(4)常量和变量
1.常量和变量的概念 程序执行过程中其值不能发生改变的量叫做常量,其值能发生改变的量叫做变量.常量可以直接使用,而变量则必须先定义后才能使用,否则编译器会报错. 2.常量和变量的命名规范 在介绍常量和 ...
- c++ static静态
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...
- 关于Linux内核版本
Linux内核可分为实验版本和产品化版本.每一个版本号由三位数字“x.y.z”组成,第二位数字说明版本类型:偶数表示产品化版本,奇数表示实验版本.产品化版本只修改错误,而实验版本最初是产品化版本的拷贝 ...
- crond检查服务状态
代码如下: * */1 * * * /etc/init.d/ntpd status;if [ $? -ne 0 ];then /etc/init.d/ntpd start; fi
- 【Linux技术】autotools制作makefile过程详解【转】
转自:http://www.cnblogs.com/lcw/p/3159461.htmlPreface Makefile固然可以帮助make完成它的使命,但要承认的是,编写Makefile确实不是一件 ...
- 数据库-mysql数据类型
MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...
- java基础76 web服务器之Tomcat服务器
(注:本文是以“压缩版Tomcat”为例,展开描述的) 一.Tomcat服务器的介绍 1.服务器 1.1.服务器的种类 从物理上讲:服务器就是一台pc机器.至少8核/8G以上.内存至少用T来计算.宽带 ...