异常小结

              Java的异常

   所谓异常就是程序运行时可能出现的一些错误。

一.首先介绍下 throwthrowsthrowable的区别

  throws是用来说明当前方法会出现非运行时异常,声明一个方法可能抛出的所有异常信息。通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息。throws是获取异常而通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法。
throw才是真正将异常对象抛出的关键字,由它来明确地抛出一个"异常。throw语句抛出的是具体类型的异常的对象  
Throwable 类是 Java 语言中所有错误或异常的父类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。 
Throwable的两个直接子类,Error(错误)和 Exception(异常),通常用于指示发生了异常情况。
 
二.运行时异常、编译时检测异常和Error的区别
1.Error(错误)是用于指示合理的应用程序不应该试图捕获的严重问题。表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者是硬件问题,对于这种错误,程序根本不能控制,也就不需要你去费心捕捉。这是虚拟机运行时内存耗尽,系统崩溃等等重大的错误,级别高于Exception,而且没法恢复的。
2.Exception(异常)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。异常包括运行时异常和强制检测异常(通常用try…catch来处理或抛给上级)
2.1运行时异常
这是我们写代码的时候不需要catch,或者throw就可以通过编译的异常,一般由于程序员的错误引起的,比如NullPointException异常,数组越界异常,这些都是没法在 try catch中恢复的,异常需要程序员细心检查出错误。
2.2强制检测异常
就是checked Exception ,这些异常在你写代码时候必须用try{}catch语句抓住,或者throw抛出给上级处理的,不然代码编译时候就通不过。比如IOException FileNotFoundExcption等等。
 
三.常见异常
1. java.lang.nullpointerexception(空指针异常)
  这个异常大家可能有遇到过,反正我是经常犯这个错误。简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在调用数组和未赋初值的字符串变量时,或画图时未取得窗体画布对象,或图片创建时的路径错误等等。对数组操作中出现空指针,可能是像我这样的初学java者常犯的错误吧。总是把数组的初始化和数组元素的初始化混淆。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,它们依然是空的,所以后面要用到数组时还需要对每个元素都进行初始化。
 
2. java.lang.arrayindexoutofboundsexception(数组下标越界)
  这个异常相信很多朋友也经常遇到过,异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。
 
3. java.lang.ArrayStoreException
数组存储异常。当向数组中存放非数组声明类型对象时抛出。
 
4.java.lang.NegativeArraySizeException
数组大小为负值异常。当使用负数大小值创建数组时抛出该异常。
 
5. java.lang.classnotfoundexception(指定的类不存在)
这里主要考虑一下类的名称和路径是否正确即可,我们在eclipse里做
写的程序工程,一般都是默认加上package的。如果转到其他环境中,可能要自己动手加上package才行。不然可能就会出现该异常。
 
6 java.lang.NoSuchMethodError(指定的方法不存在)
方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。
 
7. ClassCastException(类型强制转换异常)
当试图将对象强制转换为不是实例的子类时,抛出该异常。例如,在画板中,我就将填充圆强制转换为矩形,这就都将生成一个 ClassCastException。还有在传参时,实参和形参的类型不一致也会生成这种异常。
 
8. java.lang.illegalaccessexception(没有访问权限)
当应用程序要调用一个类、获取属性,或者调用一个方法,但当前正在执行的方法无法访问指定类、属性、方法或构造方法的定义时,抛出IllegalAccessException 
 
9. java.lang.OutOfMemoryError
内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。
 
10.ava.lang.IndexOutOfBoundsException
索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。例如,当我们依次移除队列中的元素时,如果没有控制好条件就会出现索引越界。
 
其他还有很多异常,我也完全不懂!!!总的来说,出现异常是我们平时在编程过程中不希望看到的,但是我们又不可避免的要处理它。所以在设计程序时,我们尽量要做的细心,避免那些经常犯过的错误,和容易出现的异常。
 
四 自定义异常类的步骤:
:创建一个类继承于Throwable或其子类; ­ 

:添加构造方法; ­ 

:在一个方法中使用throw抛出异常 ­ 

:在另一个方法中捕获并处理异常 ­
 
package exception1;

public class Myexception2 {//测试类

    public static void main(String[] args){

       try{//捕获异常

           myMethod();

       }

       catch(MyException  e){

           System.out.print(e.toString());

       }

    }

    static void myMethod() throws  MyException{//抛出异常

       throw  new MyException();

    }

}

class  MyException extends Exception{//自定义异常类

    public String toString(){

       return  "自定义异常";

       

    }

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值