【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语句 ...
随机推荐
- selenium中切换浏览器不同tab 的操作
from selenium import webdriverimport timedriver=webdriver.Chrome()driver.get('http://ui.imdsx.cn/uit ...
- L362 When to Bring up Salary During the Job Interview Process
Money is an awkward topic of conversation for many professionals—even more so when you’re busy tryin ...
- Real time profiler for Delphi applications
xalion提供的资源,这么强,还是免费的,快去试用! ✓ Detailed debug information (internal, TDS, MAP) ✓ Display informat ...
- 删除csdn上面自己上传的资源
今天想删掉以前的资源,才发现CSDN并没有提供删除资源的功能,然后去网上搜了下,这才删除了,不知道怎么删除的小伙伴看过来~ 首先,找到自己要删除资源的页面,举个栗子 https://download. ...
- django项目中购物车的实现
对于做项目而言,最重要的是分析清楚自己负责模块的思路,确定思路后,把每一步实现的步骤确定后,根据步骤,去实现代码,测试. 购物车的逻辑: 登录用户可以添加购物车,未登陆用户页可以添加到购物车 ...
- Knowledge From Practice(JavaScript)
1.HTML事件对象 onmouseover:鼠标移入事件 onmouseout:鼠标移出事件 onmousedown:鼠标落下事件 onmouseup:鼠标抬起事件 例子: onclick:鼠标点击 ...
- Android应用程序启动过程
有没有想过,当我们点击桌面应用程序图标是怎样打开APP启动应用程序的呢? 当我们点击应用图标会调用Launcher的startActivitySafely()方法,方法实现如下,其实是调用的start ...
- 帝国CMS系统标签e:loop调用的附加SQL条件和排序参数
帝国CMS6.5以上版本在原来所有信息调用标签基础上增加了两个标签参数:“附加SQL条件”和“显示排序”.支持这两个参数的标签有如下:ecmsinfo.灵动标签.phomenews.phomenews ...
- POJ - 1222: EXTENDED LIGHTS OUT (开关问题-高斯消元)
pro:给定5*6的灯的状态,如果我们按下一个灯的开关,它和周围4个都会改变状态.求一种合法状态,使得终状态全为关闭: sol:模2意义下的高斯消元. 终于自己手打了一个初级板子. #include& ...
- flask 数据库迁移的简单操作
1.目的:修改现有数据库的表结构,不改变数据库中现有的数据. 2.导包:from flask_migrate import Migrate, MigrateCommandfrom flask_scri ...