异常体系:
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】异常的更多相关文章

  1. 浅谈java异常[Exception]

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...

  2. 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    本文转载自  java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...

  3. Java异常体系及分类

    上图是基本的java异常体系结构. 主要分为2大类:Error和Exception 1.Error:描述了Java运行系统中的内部错误以及资源耗尽的情形.应用程序不应该抛出这种类型的对象,一般是由虚拟 ...

  4. Java异常之自定义异常

    哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...

  5. 第11章 Java异常与异常处理

    1.Java异常简介 1.什么是异常异常出现的时候代码会无法正常运行下去,会产生各种问题2.捕捉异常的作用提早发现异常,方便查找问题,并给出解决方法3.Java中的异常1.Java中所有不正常的类都是 ...

  6. java 异常

    1.java异常 2.自定义抛出 3.运行时异常,程序有问题,让使用者可以改' ' 4.return  和  throw的区别 return 符合函数要求的值    throw  有问题的时候用它结束 ...

  7. 3.Java异常进阶

    3.JAVA异常进阶 1.Run函数中抛出的异常 1.run函数不会抛出异常 2.run函数的异常会交给UncaughtExceptionhandler处理 3.默认的UncaughtExceptio ...

  8. 2.Java异常学习

    1.Java异常的概念 异常的例子 1.除法就是一个需要捕获异常的例子,除数又可能是0 异常处理的基本流程如下 一旦发生异常,就使得程序不按照原来的流程继续的运行下去 a.程序抛出异常 try{ th ...

  9. java异常架构图 和几个面试题

    1.java异常架构图 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被 ...

  10. 黑马----JAVA异常

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA异常 一.JAVA异常有三种语句块:try语句块.catch语句块.finally语句块. 1.try语句 ...

随机推荐

  1. Python机器学习(基础篇---监督学习(线性分类器))

    监督学习经典模型 机器学习中的监督学习模型的任务重点在于,根据已有的经验知识对未知样本的目标/标记进行预测.根据目标预测变量的类型不同,我们把监督学习任务大体分为分类学习与回归预测两类.监督学习任务的 ...

  2. ORACLE一个TNS配置错误

    oracle tns配置文件格式如下 RSXT = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.26.3. ...

  3. call Apply bind详解

    call方法: 语法:call(thisObj,'',''........) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 说明:call方法可以用来代替另一个对象调用一个方法.call方法 ...

  4. 选择性重传ARQ基本原理

    发送发可以连续发送多个数据包,接收方对于无差错的数据包进行正常接收,对于有差错数据包进行丢弃并发送NAKn进行差错反馈,对于n号数据包之后正确到达的数据包进行缓存,直到收到重发的,正确的n号数据包,再 ...

  5. Hadoop 搭建集群的步骤

    1.安装jdk,配置环境变量 root@localhost java]# vi /etc/profile 在profile中添加如下内容: #set java environmentexport  J ...

  6. GSM:嗅探语音流量

    GSM: Sniffing voice traffic I wrap up the GSM series with a walkthrough on how to decrypt voice traf ...

  7. 蓝屏代码PAGE_FAULT_IN_NONPAGED_AREA的解决方法

    就在昨天晚上,小王同学的电脑继1803更新后第4次蓝屏了,原本蓝屏后自动重启后就会恢复正常,然而天真的我太低估了微软的实力.蓝屏-重启-蓝屏-重启无限循环 当然,重启几次就进入了高级模式 高级模式 进 ...

  8. osgi Quick Start

    今天有空看了下osgi,根据官网的说明来快速搭建一个服务,把步骤记下来. (官网地址:https://enroute.osgi.org/tutorial/020-tutorial_qs.html) 一 ...

  9. 禁止用su切换到root

    http://jie388.blog.51cto.com/1433454/920492

  10. 关于QQ屏蔽某些文件上传一些有意思的事

    起因是因为某鱼事件... 资源倒是找了,可是因为TX的屏蔽文件上传.文件通过几次改名之后也没能上传成功(想想也没那么简单). 然后某神就写了上面那串代码实现上传.具体思想是:绕过文件摘要算法(hash ...