商家合作关于我们网站地图

手机版

新闻详情

java异常笔记

发布时间:2019-06-11 11:07:43 被关注:

* 异常:

*

* 我们的java程序也是会存在某些不正常的情况的,这些不正常情况统称为异常。

* 异常体系:

* Throwable

*  Error

*   Excetion

*Throwable常用的方法:

* toString()  返回此throwable的简短描述,异常对象的完整类名

* getMessage() 返回的是创建Throwable传入的字符串信息。

* printStackTrace() 打印异常的栈信息。

例子代码:

public class Demo1 {

public static void main(String[] args) {/*//创建一个Throwable对象。Throwable t=new Throwable();//Throwable t=new Throwable("头晕");String info=t.toString();System.out.println("toString: "+info);//java.lang.Throwable 包名+类名=完整类名String message=t.getMessage();System.out.println("toString: "+message);*/test();}public static void test() {Throwable t=new Throwable();t.printStackTrace();}

}

疑问:下面的信息是通过printStackTrace方法打印出来的,那么异常对象从何而来?

*Exception in thread "main" java.lang.ArithmeticException: / by zeroat cn.itcast.exception.Demo3.div(Demo3.java:15)at cn.itcast.exception.Demo3.main(Demo3.java:12)

jvm运行到a/b语句的时候,发现b为0,除数为0在现实生活中是属于不正常的情况,

jvm一旦发现这种不正常的情况时候,那么jvm就会马上创建一个对应的异常对象,并且会调用这个异常对象的printStackTrace的方法来处理。

异常的处理:

方式一:捕获异常

捕获处理的格式:

try{

可能发生异常的代码

}catch(捕获的异常类型    变量名){

处理异常的代码。。。。

}

捕获处理要注意的细节:

1.如果try块中代码出了异常经过了处理之后,那么try-catch块外面的代码可以正常执行。

2.如果try块中出了异常的代码,那么在try块中出现异常代码后面的代码不会执行了。

3.一个try块后面是可以跟有多个catch块的,也就是一个try块可以捕获多种异常的类型。

4.一个try块可以捕获多种异常的类型,但是捕获的异常类型必须从小到大进行捕获,否则编译报错。

例子代码:

public class Demo3 {

public static void main(String[] args) {// TODO Auto-generated method stubint[]arr=null;div(4,2,arr);}public static void div(int a,int b,int[] arr) {// int c=a/b;// System.out.println("c="+c);try{int c=a/b;//jvm在这句话的时候发现了不正常的情况,那么就会创建一个对应的异常对象System.out.println("长度"+arr.length);System.out.println("c="+c);}catch(ArithmeticException e) {//处理异常的代码System.out.println("toString"+e.toString());}catch(NullPointerException e) {System.out.println(e.toString());}

}

}

* 异常的处理方式-----抛出处理

*

* 抛出处理(throw  throws)

*

* 抛出处理要注意的事项:

* 1.如果一个方法的内部抛出了一个异常对象,那么必须在方法上声明抛出。

*2.如果调用了一个声明抛出异常的方法,那么调用者必须处理异常。

*3.如果一个方法内部抛出了一个异常对象,那么throw语句后面的代码都不会再执行了。

*4.在有一种情况,只能抛出一种类型对象。

*throw与throws两个关键字:

*1.throw关键字是用于非法内部的,throws是用于方法声明的。

*2.throw关键字是用于方法内部抛出一个异常对象的,throws关键字是用于在方法声明抛出异常类型的。

*3.throw关键字后面只能有一个异常对象,throws后面一次可以声明抛出多种类型的异常。

public class Demo4 {

public static void main(String[] args) {// TODO Auto-generated method stubtry {div(4,0);

}catch(Exception e) {System.out.println("异常");e.printStackTrace();}}public static void div(int a,int b)throws Exception {if(b==0) {throw new Exception();//抛出一个异常对象}int c=a/b;System.out.println("c="+c);}

}package cn.itcast.exception;

* 自定义异常类:

*sun提供了很多的异常类给我们用于描述程序中的不正常情况,但是sun给我们提供异常类还不足以描述我们现实生活中所有不正常情况,那么这时候我们就需要自定义异常。

*需求:模拟feiq上线的时候如果没有插上网线,那么就抛出一个没有插上网线的异常。

*如果已经插上网线,那么久正常显示好友列表。

*自定义异常类的步骤:自定义一个类继承Exception。

class NoIpException extends Exception{public NoIpException(String message) {super(message);//调用了Exception一个参数的构造方法。}}public class Demo5 {

public static void main(String[] args) {// TODO Auto-generated method stubString ip="192.189.21.100";ip=null;try {feiq(ip);}catch(NoIpException e) {e.printStackTrace();System.out.println("马上");}

}public static void feiq(String ip) throws NoIpException{if(ip==null) {throw new NoIpException("没有插网线");}System.out.println("正常");}

}

* 自定义异常

*需求:模拟你去吃饭,如果带钱少于10块,那么久抛出一个没有带够钱的异常对象。

*如果带够了,那么就可以吃饭。

class NoMoneyException extends Exception{public NoMoneyException(String message) {super(message);}}public class Demo6 {

public static void main(String[] args) {try {eat(0);}catch(NoMoneyException e) {System.out.println("洗碗");}

}public static void eat (int money) throws NoMoneyException{if (money<10) {throw new NoMoneyException("吃霸王餐");}System.out.println("吃饭");}}package cn.itcast.exception;

* finally关键字:

*finally块的使用前提是必须要存在try块才能使用

*

*finally块的代码在任何情况下都会执行的,除了jvm退出的情况。

*finally非常适合做资源释放的工作,这样子可以保证资源文件正在任何情况下都会被释放。

*

*try块的三种组合方式:

*第一种:比较适用于有异常要处理,但是没有资源释放的。

*try{

*可能发生异常的代码

*}catch(捕获的异常类型 变量名){

*处理异常的代码

}

*第二种:比较适用于既有异常要处理又要释放资源的代码。

*try{

*可能发生异常的代码

*}catch(捕获的异常类型 变量){

*处理异常的代码

*}finally{

*释放资源的代码

}

*第三种:比较适用于内部抛出的是运行时异常,并且有资源要释放。

*try{

*可能发生异常的代码

*

*}finally{

* 释放资源的代码

}

例子1:public class Demo7 {

public static void main(String[] args) {   // TODO Auto-generated method stub   div(4,0);

} public static void div(int a,int b) {   try {//      if(b==0) {//        System.exit(0);//退出jvm//      }     int c=a/b;     System.out.println("c="+c);   }catch(Exception e) {     System.out.println("除数为0");     throw e;   }finally {     System.out.println("finally 块执行了");   } }

例子2:package cn.itcast.exception;

import java.io.File;import java.io.FileReader;import java.io.IOException;

public class Demo8 {

public static void main(String[] args) {   // TODO Auto-generated method stub   FileReader fileReader=null;   try {     //找到目标文件     File file=new File("f:a.text");     fileReader=new FileReader(file);     //读取文件     char[]buf=new char[1024];     int length=0;     length=fileReader.read(buf);     System.out.println("读取到的文件"+new String(buf,0,length));   }catch(IOException e) {     System.out.println("读取文件失败");   }finally {     //关闭资源       try{         fileReader.close();       System.out.println("关闭资源成功");     }catch(IOException e) {       System.out.println("关闭资源失败");     }   }

}

少儿编程培训课程


求学登记
推荐学校