博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA学习日志(9-2-异常)
阅读量:6833 次
发布时间:2019-06-26

本文共 3502 字,大约阅读时间需要 11 分钟。

  hot3.png

异常的处理:JAVA提供了特有的语句进行处理

固定格式:

try{	需要被检测的代码}catch(异常类 变量){	处理异常的代码}finally{	一定会执行的语句}

class eDemo{	int div(int a,int b){		return a/b;	}}class ExceptionDemo{	public static void main(String[] args){		eDemo d=new eDemo();		try{			int x=d.div(4,0);           //检测代码			System.out.println("x="+x);		}		catch(Exception e){             //处理发生异常的代码			System.out.println("none"); //Exception e=new ArithmeticException();		}		finally{                        //处理结束			System.out.println("over");		}	}}

对找到异常对象的常见方法操作

    1.String getMessage();获取异常信息 printStackTrace();获取异常名称,异常信息,出现位置

    2.在函数上声明异常,变鱼提高安全性,让调用处进行处理,不处理会编译失败

class eDemo{	int div(int a,int b)throws Exception{	//通过throw关键字声明该功能有可能出现异常		return a/b;	}}class ExceptionDemo{	public static void main(String[] args)throws Exception{

对多异常的处理

    1.声明异常时,建议声明更为具体的异常,这样可以处理的更具体

    2.对方声明几个异常,就对应有几个catch块,不要定义多余的catch块

            如果多个catch块中的异常出现继承关系,父类catch块放在最下面

throws ArithmeticException,ArrayIndexOutOfBoundsException//声明算术异常,数组越界异常

**建立在进行catch处理时,catch中一定要定义具体的处理方式


自定义异常

    因为项目中会出现特有的问题,而这些问题并未被JAVA所描述并封装对象

    因此对于这些特有的问题,可以按照JAVA对问题的封装思想

    将特有的问题进行自定义的异常封装

eg. v1.0

/* 需求:在本程序中,对于除数是0或-1视为错误,无法进行运算 */ class fushuException extends Exception{	  } class fDemo{	 int div(int a,int b){		 if(b<0){			 throw new fushuException();	//手动通过throw关键字抛出自定义异常对象		 }		 return a/b;	 } } class ExceptionDemo2{	 public static void main(String[] args){		 fDemo f=new fDemo();		 int x=f.div(4,-1);		 System.out.println("x="+x);		 System.out.println("over");	 } }/*无法编译:ExceptionDemo2.java:10: 错误: 未报告的异常错误fushuException; 必须对其进行捕获或声明以便抛出                         throw new fushuException();    //手动通过throw关键字抛出自定义异常对象*/

当函数内部出现了throw抛出异常对象,那么就必须要有对应的处理动作

    要么在内部try/catch处理|||||要么在函数上声明让调用者处理

    一般情况下,函数内部出现异常,函数上需要声明

v2.0

/* 需求:在本程序中,对于除数是0或-1视为错误,无法进行运算 */ class fushuException extends Exception{	//创建异常对象	  } class fDemo{	 int div(int a,int b)throws fushuException{ //声明异常		 if(b<0){			 throw new fushuException();	//手动通过throw关键字抛出自定义异常对象		 }		 return a/b;	 } } class ExceptionDemo2{	 public static void main(String[] args){		 fDemo f=new fDemo();		 try{								//函数内对异常进行处理			 int x=f.div(4,-1);			 System.out.println("x="+x);		 }		 catch(fushuException e){			 System.out.println(e.toString());			 System.out.println("出现负数");		 }		 System.out.println("over");	 } }

打印的结果中只有异常的名称,没有异常的信息,需要自定义异常信息

ver3.0

/* 需求:在本程序中,对于除数是0或-1视为错误,无法进行运算 */ class fushuException extends Exception{	//创建异常对象	 /*private String msg;	 fushuException(String msg){			//复写父类获取信息方法		 this.msg=msg;	 }	 public String getMessage(){		 return msg;	 }*/	 /*fushuException(String msg){			//直接调用父类方法,将子类异常信息传给父类		 super(msg);	 }*/	 private int value;						//自定义异常信息	 fushuException(String msg,int value){		 super(msg);		 this.value=value;	 }	 public int getValue(){		 return value;	 } } class fDemo{	 int div(int a,int b)throws fushuException{ //声明异常		 if(b<0){			 throw new fushuException("除数为负数",b);	//手动通过throw关键字抛出自定义异常对象		 }		 return a/b;	 } } class ExceptionDemo2{	 public static void main(String[] args){		 fDemo f=new fDemo();		 try{								//函数内对异常进行处理			 int x=f.div(4,-1);			 System.out.println("x="+x);		 }		 catch(fushuException e){			 System.out.println(e.toString());			 System.out.println("出现负数");			 System.out.println("错误的负数是"+e.getValue());		 }		 System.out.println("over");	 } }

**自定义异常必须是自定义类继承Exception

  继承Exception的原因:异常类和异常对象都被抛出。

        他们都具备可抛性,这个可抛性是Throwable中的独有特点

        只有这个体系中的类和对象才可以被throws/throw操作


throw与thorws的区别

    throws使用在函数上 throw使用在函数内

    throws可以跟多个异常类,用逗号隔开

    throw后跟异常对象

转载于:https://my.oschina.net/Almon/blog/725370

你可能感兴趣的文章
phpunit mock
查看>>
NodeJS、NPM安装配置步骤(windows版本)
查看>>
mac常用的命令
查看>>
knn 分类
查看>>
【总结】Hadoop中的MultipleOutputs实践
查看>>
测试常见问题
查看>>
SHOP++ 中Hibernate 注解 用法
查看>>
jQuery EasyUI使用教程之创建基本的树网格
查看>>
Fluentd日志处理-插件使用和调试问题(四)
查看>>
实验四 交换机SPAN功能配置 (交换与路由技术)
查看>>
centos7源码安装php5.6并安装pthreads扩展
查看>>
php网络名片系统源码免费电子云名片3.2版
查看>>
SylixOS lite Extension工程开发手册
查看>>
Mysql存储过程从0开始(上)
查看>>
在windows下如何新建爬虫虚拟环境和进行scrapy安装
查看>>
HSRP 技术
查看>>
网络基础~linux路由与网关、路由命令
查看>>
强大的联想4U机架式服务器ThinkSystem SR950
查看>>
美国防部:美国×××防御系统存在诸多安全问题
查看>>
阿里云搭建lamp平台
查看>>