java异常笔记
2019-06-01 13:16
* 异常: * * 我们的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("关闭资源失败"); }
} } }END 回复 1 获取python资料 回复 2 获取数学资料 回复 3 添加小编微信 回复 4
获取各种编程视频 回复 加群 获取群二维码 众号ID:gh_57e2066aaf8c扫码关注最新动态
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com