Throwablede类是 Java 语言中所有错误或异常的超类。

两个子类的实例,Error 和 Exception
Error 是 Throwablede 的子类,用于指示合理的应用程序不应该试图捕获的严重问题。
Exceptionde 类及其子类是Throwablede 的一种形式,它指出了合理的应用程序想要捕获的条件。
 
package com.cwcec.test;

class FuShuException extends Exception
{
public FuShuException()
{ } public FuShuException(String msg)
{
super(msg);
}
}
class Person
{
int age;
String name;
public Person(String name,int age)
{
this.name = name;
this.age = age;
} public Person()
{ } public int method(int[] arr,int index) throws FuShuException //throw是语句抛出一个异常。
{
if(arr == null)
{
throw new NullPointerException("数组不能为null");
}
if(index >= arr.length)
{
throw new ArrayIndexOutOfBoundsException("数组访问的下标越界");
}
if (index < 0)
{
throw new FuShuException("数组下标不能为负数"); //throws是方法可能抛出异常的声明
}
return arr[index];
}
} public class FieldDemo
{
public static void main(String[] args) throws FuShuException
{ Person person = new Person("Tom", 50);
int[] arr = {1,2,3};
int rel = person.method(null, 2);
System.out.println(rel); } }
 
异常的分类:
1、编译时被检测异常:只要是Exception和其子类,除了特殊子类RuntimeException体系。
      这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式。
       这种问题可以针对性的进行处理。
 
2、编译时不检测异常(运行时异常):就是Exception中的RuntimeException和其子类。
      这种问题的发生无法让功能继续,运行无法进行,更多的是因为调用的原因导致的或者内部状态的
      改变而导致的。
      这种问题一般不处理,直接编译通过,在运行时,让调用者调用时程序强制停止。
 
所以自定义异常时,要么继承Exception,要么继承RuntimeException。
 
 throws 和throw的区别:
1、throws使用在函数上,是方法可能抛出异常的声明,
      throw使用在函数内,表示抛出一个异常;
2、throws抛出的是异常类,可以抛多个,用逗号隔开,
      throw抛出的是异常对象,只能有一个。
 
--------------------------------------------------------------------------------------------------------------------------------------
1. RuntimeException与Exception, Error不同点: 当方法体中抛出非RuntimeException(及其子类)时,方法名必须声明抛出的异常;但是当方法体中抛出RuntimeException(包括RuntimeException子类)时,方法名不必声明该可能被抛出的异常,即使声明了,JAVA程序在某个调用的地方,也不需要try-catch从句来处理异常。
class TestA{
//compiles fine.we don't need to claim the RuntimeException to be thrown here
void method(){
throw new RuntimeException();
}
}
class TestB{
void method() throws RuntimeException{
throw new RuntimeException();
} void invokeMethod(){
//compiles fine. we don't need the try-catch clause here
method();
}
}
class TestC{ //compiles error.we need to claim the Exception to be thrown on the method name
void method(){
throw new Exception();
}
}
class TestD{
//compiles fine.
void method() throws Exception{
throw new Exception();
}
}

以下所有的相关异常的特性都不包括RuntimeException及其子类。

2. 假如一个方法在父类中没有声明抛出异常,那么,子类覆盖该方法的时候,不能声明异常。

class TestA{
void method(){}
}
class TestB extends TestA{ //complies error if the method overrided pertaining to the base class doesn't declare throwing exceptions
void method() throws Exception{
throw new Exception();
}
}
3. 假如一个方法在父类中声明了抛出异常,子类覆盖该方法的时候,要么不声明抛出异常,要么声明被抛出的异常继承自它所覆盖的父类中的方法抛出的异常。
class TestA{
void method() throws IOException{}
}
class TestB extends TestA{
//compiles fine if current method does not throw any exceptions
void method(){}
}
class TestC extends TestA{
//compiles fine because InterruptedIOException is inherited from IOException which is thrown by the overrided method of the base class
void method() throws InterruptedIOException{}
}
class TestD extends TestA{
//compiles error because Exception thrown by current method is not inherited from IOException which is thrown by the overrided method of the base class
void method() throws Exception{}
}
4. 构造器不遵循上述规则,因为构造器不遵循JAVA的覆盖和重载规则。
class TestA {
public TestA() throws IOException {} public TestA(int i) {}
} class TestC extends TestA {
// compiles fine if current constructor doesn't throw anything.
public TestC() { super(0); }
} class TestB extends TestA {
// compiles fine even if current constructor throws exceptions which don't
// inherit from exceptions that are thrown by the overrided method of the
// base class
// this also means constructors don't conform the inheriting system of JAVA
// class
public TestB() throws Exception {}
}
5. 当一个类继承某个类,以及实现若干个接口,而被继承的类与被实现的接口拥有共同的方法,并且该方法被覆盖时,它所声明抛出的异常必须与它父类以及接口一致。
class ExceptionA extends Exception{
}
class ExceptionB extends Exception{ }
interface TestA{
void method() throws ExceptionA;
}
abstract class TestB{
abstract void method() throws ExceptionB;
}
class TestC extends TestB implements TestA{
//compiles error
public void method() throws ExceptionA{}
}
class TestD extends TestB implements TestA{
//compiles error
public void method() throws ExceptionB{}
}
class TestE extends TestB implements TestA{
//compiles error
public void method() throws ExceptionA,ExceptionB{}
}
class TestF extends TestB implements TestA{
//compiles fine
public void method(){}
}

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. php实现姓名按首字母排序的类与方法

    php将名字按首字母进行排序 <?php public function getFirstChar($s){ $s0 = mb_substr($s,0,3); //获取名字的姓 $s = ico ...

  2. java-spark的各种常用算子的写法

    通常写spark的程序用scala比较方便,毕竟spark的源码就是用scala写的.然而,目前java开发者特别多,尤其进行数据对接.上线服务的时候,这时候,就需要掌握一些spark在java中的使 ...

  3. Git最常用的命令 总结

    stage/unstage  git add xxx.xx 和 git reset HEAD xxx.xx 前者将本地的修改提交到index(此操作成为stage,参考备注1),后者将已提交到inde ...

  4. Shell 变量简介

    1. 概述 概述 知识点又稀又碎, 面试一问就流泪 简单介绍下 shell 下的变量及其基本操作 2. 环境 操作系统 CentOS Linux release 7.5 用户 root 用户 约定 使 ...

  5. springboot(eureka子项目)+idea+jsp 404问题

    我是这么解决的 对于单一项目,加入以下jar包即可 <!--前台页面的支持--> <dependency> <groupId>javax.servlet</g ...

  6. 20155204 2016-2017-2《Java程序设计》课程总结

    20155204 2016-2017-2<Java程序设计>课程总结 目录 作业链接汇总 作业总结 实验报告链接汇总 代码托管链接 课堂项目实践 学习经验 问卷调查 链接二维码 (按顺序) ...

  7. WPF MVVM从入门到精通8:数据验证

    原文:WPF MVVM从入门到精通8:数据验证 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通3:数据绑定 WPF M ...

  8. WPF MVVM从入门到精通7:关闭窗口和打开新窗口

    原文:WPF MVVM从入门到精通7:关闭窗口和打开新窗口 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通3:数据绑定 ...

  9. 面试:sql语句-1-基础查询

    1.基础查询

  10. java class file

    目录 什么是java类文件 幻数 主次版本号 常量池数和常量池 this_class super_class 接口数量和接口 字段数和字段 方法数和方法 以下内容主要还是参考<Inside JV ...