【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语句 ...
随机推荐
- SpringBoot项目如何打War包
首先,需要添加Tomcat启动依赖 <dependency> <groupId>org.springframework.boot</groupId> <art ...
- TCP学习总结(四)
TCP连接管理 TCP运输连接有3个阶段, 即: 连接建立,数据传送和连接释放. 1. TCP的连接建立(3次握手) TCP连接的建立采用客户服务器方式.主动发起连接建立的应用进程叫做客户(clien ...
- 集合和format
昨天没来及整理博客,有点小累.休息了一下,今天的内容比较多 集合还是按照之前的方法,整理了一边所有的方法,其次在看了下format的方法 还有一些函数,暂时学了一点 还不知道怎么整理 s = {,,, ...
- 日常踩坑 — 相邻元素之间的margin合并问题。
踩坑:使用v-for渲染的组件,当然图中的id已经换成class,还是没有解决这个问题,于是各种查找资料,我就不信简单的CSS问题这么难解决! v-for渲染组件级传值: <div class= ...
- 博客 新址: https://pheromone.github.io/
该博客暂时调整歇业,小店地址暂时搬迁至: https://pheromone.github.io/ 该博客只做旧文章的维护工作. 博客 新址: https://pheromone.github.io ...
- 微信小程序前端开发踩坑(一)
之前由于不了解微信小程序的整个的运行开发机制,走了很多的弯路,脑子灵光的可能不会遇到,这个主题系列的帖子希望可以帮助到像我一样理解能力慢的孩子. 不论是开发微信小程序还是说学习任何一门编程语言,最重要 ...
- java程序初体验
示例代码 class Demo { public static void main(String[] args) { System.out.print("hello world") ...
- 处理文件中的" M-BM- "特殊符号
有时为了方便,会在Excel中进行代码拼装,比如说是建表SQL语句,但是在复制的代码过程中可能会带入不可见字符,造成代码无法运行. 本次代码中就需要了不可见的" M-BM- " 问 ...
- window10单机安装storm集群
适合范围:storm自由开源的分布式实时计算系统,擅长处理海量数据.适合处理实时数据而不是批处理. 安装前的准备 1.安装zookeeper ①下载zookeeperhttps://zookeeper ...
- Python:从入门到实践--第九章-类--练习
#.餐馆:创建一个名为Restaurant的类,其方法_init_()设置两个属性:restaurant_name和cuisine_type. #创建一个名为describe_restaurant的方 ...