【java】异常
异常体系:
Throwable
---Error
通常出现重大问题:如类不存在或者内存溢出。停止运行,不对代码进行处理
---Exception
在运行时出现的情况,可以进行针对性处理。可以通过try catch finally
---RuntimeException 运行时异常。
异常处理:
try
{
需要被检测的代码
}
catch (异常类 变量)
{
处理异常的代码
}
finally
{
一定会执行的代码
通常是关闭资源或连接。
}
例子:
class Div
{
private int a;
private int b;
public int div(int a,int b)
{
this.a=a;
this.b=b;
return a/b;
} } class DivDemo
{
public static void main(String[] args)
{
try
{
Div d1=new Div();
int x=d1.div(6,0);
System.out.println(x);
}
catch (Exception e)
{
System.out.println(e.getMessage());/// by zero
System.out.println(e.toString());///java.lang.ArithmeticException: / by zero
e.printStackTrace();//详细的堆栈信息
//java.lang.ArithmeticException: / by zero
// at Div.div(Divdemo.java:9)
// at DivDemo.main(Divdemo.java:22)
} }
}
对多异常的处理:
1.声明异常时,建议声明更为具体的异常。这样处理的可以具体些
2.对方声明几个异常,就对应有几个catch块,不要定义多余的catch块。
3.如果多个catch块中的异常出现继承关系,父类异常一定要放在最下面
自定义异常:
当函数内部出现了throw抛出异常对象,那么就必须给对应的处理动作。
1.要么在内部try catch处理
2.要么在函数上声明让调用者处理
3.如何自定义异常信息:因为父类中已经异常信息的操作都完成了。所以子类只要在构造时,讲异常信息传递给父类,通过super语句。
一般情况,函数内部出现异常,函数上需要声明。
4.自定义类必须继承Exception.
5.throws和throw的区别:
1)throws 使用在函数上,用于函数声明;throw 使用在函数内。
2)throws 后面紧跟着声明的异常类,可以多个,用逗号隔开;throw后面跟着是抛出异常类的对象。
6.catch 是用于处理异常。如果没有catch就代表异常没有被处理过,如果该异常是检测时异常,那么必须声明
7.finall一种情况下不会执行,当程序执行到System.exit(0),finally不会执行。例如:
class Test
{
public static String output="";
public static void foo(int i)
{
try
{
if(i==1)
throw new Exception();
output+="1";
}
catch(Exception e)
{
output+="2";
return; //returun后finally继续执行,但是其他语句就不再执行了
}
finally
{
output+="3";
}
output+="4";
}
public static void main(String args[])
{
foo(0);
System.out.println(output);//134
foo(1);
System.out.println(output); //13423
}
}
8.throw单独存在,下面不要定义语句,因为执行不到。
class FushuException extends Exception
{
FushuException(String msg)
{
super(msg);
}
} class Div
{
private int a;
private int b;
public int div(int a,int b) throws FushuException//函数内部出现throw抛出异常,函数上需要throws声明。
{
this.a=a;
this.b=b;
if (b<0)
{
throw new FushuException("出现了负数");
//System.out.print("dddd");//throw单独存在,下面不要定义语句,因为执行不到。
}
return a/b;
} } class FuDemo
{
public static void main(String[] args)
{
try
{
Div D1=new Div();
D1.div(3,-1);
}
catch (FushuException e)
{
System.out.print(e.toString());
} }
}
Exception 中有一个特殊的子类异常叫RuntimeException 运行时异常。特点:出现了无法运行的情况,需要对代码进行修改
1.如果在函数内throw抛出异常,函数上可以不用声明,编译一样通过。
2.如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。
自定义异常时:如果该类的发生,无法在继续进行运行,可让自定义异常类继承RuntimeException
异常分类:
1.编译时被检测的异常
2.编译时不被检测的异常(RuntimeException以及子类)
catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace,输出语句。
也不要不写。
当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。
try
{
throw new AException();
}
catch (AException e)
{
throw e;
} 如果该异常处理不了,但并不属于该功能出现的异常。
可以将异常转换后,在抛出和该功能相关的异常。 或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,
当调用者知道。并处理。也可以将捕获异常处理后,转换新的异常。
try
{
throw new AException();
}
catch (AException e)
{
// 对AException处理。
throw new BException();
} 比如,汇款的例子。
异常在子父类覆盖中的体现:
1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
2.如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3.如果父类或者接口的方法没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
如果子类方法发生了异常,必须进行try处理,绝对不能抛
class NoValueException extends RuntimeException
{
NoValueException(String message)
{
super(message);
}
} interface Shape
{
void getArea();
} class Rec implements Shape
{
private int len,wid; Rec(int len ,int wid)//throws NoValueException
{
if(len<=0 || wid<=0)
throw new NoValueException("出现非法值"); this.len = len;
this.wid = wid;
} public void getArea()
{
System.out.println(len*wid);
}
} class Circle implements Shape
{
private int radius;
public static final double PI = 3.14; Circle(int radius)
{
if(radius<=0)
throw new NoValueException("非法");
this.radius = radius;
} public void getArea()
{
System.out.println(radius*radius*PI);
}
} class ExceptionTest1
{
public static void main(String[] args)
{ Rec r = new Rec(3,4);
r.getArea(); Circle c = new Circle(-8); System.out.println("over"); }
}
【java】异常的更多相关文章
- 浅谈java异常[Exception]
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...
- 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?
本文转载自 java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...
- Java异常体系及分类
上图是基本的java异常体系结构. 主要分为2大类:Error和Exception 1.Error:描述了Java运行系统中的内部错误以及资源耗尽的情形.应用程序不应该抛出这种类型的对象,一般是由虚拟 ...
- Java异常之自定义异常
哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...
- 第11章 Java异常与异常处理
1.Java异常简介 1.什么是异常异常出现的时候代码会无法正常运行下去,会产生各种问题2.捕捉异常的作用提早发现异常,方便查找问题,并给出解决方法3.Java中的异常1.Java中所有不正常的类都是 ...
- java 异常
1.java异常 2.自定义抛出 3.运行时异常,程序有问题,让使用者可以改' ' 4.return 和 throw的区别 return 符合函数要求的值 throw 有问题的时候用它结束 ...
- 3.Java异常进阶
3.JAVA异常进阶 1.Run函数中抛出的异常 1.run函数不会抛出异常 2.run函数的异常会交给UncaughtExceptionhandler处理 3.默认的UncaughtExceptio ...
- 2.Java异常学习
1.Java异常的概念 异常的例子 1.除法就是一个需要捕获异常的例子,除数又可能是0 异常处理的基本流程如下 一旦发生异常,就使得程序不按照原来的流程继续的运行下去 a.程序抛出异常 try{ th ...
- java异常架构图 和几个面试题
1.java异常架构图 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被 ...
- 黑马----JAVA异常
黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA异常 一.JAVA异常有三种语句块:try语句块.catch语句块.finally语句块. 1.try语句 ...
随机推荐
- 软工个人作业4——Alpha阶段个人总结
一.个人总结 1.在alpha 结束之后, 每位同学写一篇个人博客, 总结自己的alpha 过程: 经过本次alpha阶段的冲刺,首先学到了很多,收获了很多,同时也蛮辛苦的.其实我觉得作为组员我有很认 ...
- elasticsearch(3) 数据操作-更新
一 更新整个文档 更新整个文档的方法和存放数据的方式是相同的,通过PUT 127.0.0.1/test/test/1 我们可以把test/test/1下的文档更新为新的文档 例: PUT 127.0 ...
- 基于Verilog的带FIFO输出缓冲的串口接收接口封装
一.模块框图及基本思路 rx_module:串口接收的核心模块,详细介绍请见“基于Verilog的串口接收实验” rx2fifo_module:rx_module与rx_fifo之间的控制模块,其功能 ...
- anaconda3下64位python和32位python共存
查看当前工作平台:conda info 切换64位和32位: set CONDA_FORCE_32BIT=1是切换到32位 set CONDA_FORCE_32BIT= 是切换到64位 注意=号前后不 ...
- Flask开发基础
Flask是一个使用Python编写的轻量级Web应用框架. 模板引擎使用的Jinja2 Flask框架简单易学,但是其保留了扩展的弹性,可以使用Flask-extension 加入ORM ,窗体验证 ...
- 2018-软工机试-A-西班牙馅饼
A. 西班牙馅饼 单点时限: 1.0 sec 内存限制: 256 MB 港岛妹妹,你献给我的西班牙馅饼 甜蜜地融化了我,天空之城在哭泣 港岛妹妹,我们曾拥有的甜蜜的爱情 疯狂地撕裂了我,天空之城在哭泣 ...
- Eclipse is running in a JRE, but a JDK is required Some Maven plugins may not work when importing projects or updating source folders.
安装Maven后每次启动出现警告信息: Eclipse is running in a JRE, but a JDK is requiredSome Maven plugins may not wor ...
- 通过JQuery的$.ajax()把 json 数据 post 给 PHP
通过JQuery的$.ajax()把 json 数据 post 给 PHP时的几种情况: 无法在PHP中通过$_POST 以及 $_REQUEST 获取json数据,即 $json = $_POST[ ...
- MT4 取K线
目标:动态获取最新K线并通过DLL发送出去,symbols和periods可配置. //+------------------------------------------------------- ...
- s21day23 python笔记
s21day23 python笔记 一.内容回顾及补充 字符串格式化 %s # 示例一:特别注意:最后的右括号前面必须有逗号(,) msg = '我是%s,年龄%s'%('alex',19,) # 元 ...