如鹏网JAVA培训笔记24晓伟整理.docx
《如鹏网JAVA培训笔记24晓伟整理.docx》由会员分享,可在线阅读,更多相关《如鹏网JAVA培训笔记24晓伟整理.docx(13页珍藏版)》请在冰豆网上搜索。
如鹏网JAVA培训笔记24晓伟整理
写在前边的话:
2015年1月29日如鹏线上训练营第三十六天
世界上美丽的东西千千万万,却没有一样比年轻更为美丽;世界上珍贵的东西数不清,却没有一样比青春更为宝贵。
我们是多麽值的骄傲多麽让人羡慕啊!
而我们若只是挥霍光阴,只是享受,不去奋斗拼搏,那我们真的算拥有青春吗?
答案是否定的,我们只有发愤图强,努力耕耘才能做到无愧于青春,无愧于人生,才能拥有一个充实而完美的青春。
奋斗抒写无悔青春,在漫漫人生道路上,青春虽然只是一小段,但当你白发苍苍回首时,你会发现曾经拥有的青春依然会在记忆中闪烁着动人的光彩。
青春无悔该是我们每个人的追求,我们只有把握好青春的每一天,在激流中踊跃不断拼搏我们才可以骄傲地说:
“我的青春是无悔的!
”
青春的世界里,不需要固结你的思想,只有追寻美好的梦想,人生方荆棘丛生,我们都要持之以恒。
让我们像江河一样,谱写青春的音符,留下奋斗的足迹。
用我们的奋斗和梦想扬起青春的船帆,当我们努力拼搏地摇桨时,成功的闸门你也会慢慢地再为我们打开你,我们将享受一份青春的美好,收获一份成功的喜悦!
异常的概念:
●异常是程序在运行期发生的不正常的事件,它会打断指令的正常秩序流程。
●设计良好的程序应该在异步发生时提供处理这些不正常事件的方法,使程序不会因为异常的发生而阻断或产生不可预见的结果。
●java语言使用异常处理机制为程序提供了异常处理的能力。
PublicclassTestException()
{
Publicstaticvoidmain(String[]args)
{
String[]friends={“lisa”,“bily”,“kessy”};
for(inti=0;i<5;i++)
{
System.out.println(friends[i]);
}
}
}
异常的分类:
●java程序运行过程中所发生的异常事件从严重性可分为两类:
1.错误(Error):
JVM系统内部错误或资源耗尽等严重情况,属于JVM需要负担的责任。
这一类异常事件无法恢复或不可能捕获,将导致应用程序中断。
2.异常(Exception):
其它因编程错误或偶尔的外在因素导致的一般性问题。
这类异常得到恰当的处理时,程序有机会恢复至正常运行状况。
●程序员通常只能处理异常(Exception),而对错误(Error)无能为力。
异常处理机制:
●java程序在执行过程中如果出现异常,会自动生成一个异常类对象,该异常对象将被自动提交给JVM,这个过程称为抛出(throw)异常。
●当JVM接受到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常和处理异常。
●如果JVM找不到可以捕获异常的代码,则运行时系统将终止,相应的java粗也将退出。
异常的分类:
●Error:
称为错误,由java虚拟机(JVM)生成并抛出,程序对其不做处理。
●Exception:
所有异常类的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显示的声明或捕获。
●RuntimeException:
一类特殊的异常,如被0除,数组下标超出范围等,其产生比较频繁,处理麻烦,如果显示的声明或捕获将会对程序可读性和运行效率影响很大。
因此由系统自动检测并将它们交给缺省的异常处理程序。
受检异常又叫已检查异常;
非受检异常又叫未检查异常
异常的分类:
●非受检(Unchecked)异常:
编译器不要求强制处置的异常。
(RunException)
一般是指编程时的逻辑错误。
是程序员应该积极避免其出现的异常
java.lang.RuntimeException及它的子类都是非受检异常:
错误的类型转换:
java.lang.ClassCastException
数组下标越界:
java.lang.ArrayIndexOutOfBoundsException
空指针访问:
java.lang.NullPointerException
算术异常(除0溢出):
java.lang.ArithmeticException
●受检(checked)异常:
编译器要求必须处置的异常。
指的是程序在运行时由于外界因素造成的一般性异常。
没有找到指定名称的类:
java.lang.ClassNotFoundException
访问不存在的文件:
java.io.FileNotFoundException
操作文件时发生的异常:
java.io.IOException
操作数据库时发生的异常:
java.sql.SQLException
Exception的层次关系:
●Exception的子类很多,大致可以分为三类,有关IO的IOException,有关运行时异常的RuntimeException,以及其他的异常:
1.IOException是由于IO系统堵塞等原因引起的异常,包括:
(1)试图从文件结尾处读取信息
(2)试图打开一个不存在或者格式错误的url
2.RuntimeException是由于程序编写过程中不周全而引起的,包括:
(1)错误的类型转换
(2)数组越界访问
(3)数字计算错误
(4)试图访问一个空对象
3.其他异常:
(1)用Class.forName()来初始化一个类的时候,字符串参数或对应的类不存在
(2)其他
常见异常:
●RuntimeException
ArithmeticException:
数学计算异常
NullPointException:
空指针异常
NegativeArraySizeException:
负数组长度异常
ArrayIndexOutOfBoundsException:
数组索引越界异常
ClassNotFoundException:
类文件未找到异常
●IOException:
FileNotFoundException:
文件未找到异常
EOFException:
读写文件尾异常
MalformedURLException:
URL格式错误异常
SocketException:
Socket异常
异常处理举例:
publicclassTestException
{
publicstaticvoidmain(String[]args)
{
Srring[]friends={“lisa”,“bily”,“kessy”};
try
{
for(inti=;i<5;i++)
{
System.out.println(friends[i]);
}
}catch(ArrayIndexOutOfBoundsExceptione)
{
System.out.println(“发生异常,请稍候再试....”);
}
}
}
异常处理机制:
●在整个java的异常处理中,实际上也是按照面向对象的方式进行处理的,步骤如下:
1.一旦产生异常,则首先会产生一个异常类的实例化对象;
2.在try语句中对此异常对象进行捕捉;
3.产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码。
⊙try代码段包含的是可能产生异常的代码
⊙try代码段后跟一个或多个catch代码段(或跟一个finally代码段)
⊙每个catch代码段只声明一种其能处理的特定类型的异常,并提供处理的方法。
⊙当异常发生时,程序会中止当前的流程去执行相应的catch代码段。
⊙finally段的代码无论是否发生异常都执行。
异常捕获和处理:
try语句:
1.try{...}语句包含了一段代码,这段代码就是一次捕获并处理异常的范围。
2.在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理。
catch语句:
⊙在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。
⊙在catch中声明的异常对象(catch(ExceptionNamee))封装了异常事件发生的信息,在catch语句块中可以使用这个对象的一些方法获取这些信息。
如:
getMessage()方法,用来获得有关异常事件的字符串信息。
printStackTrace()方法,用来跟踪异常事件发生时执行堆栈的内容。
⊙使用多重catch语句,异常子类一定要位于异常父类之前。
如果没有异常产生,所有的catch段的代码都会被忽略不被执行。
异常的捕获和处理:
●finally语句:
1.finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其他部分以前,能够对程序的状态作统一的管理。
2.无论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。
3.通常在finally语句块中可以进行资源的清理工作,如:
⊙关闭打开的文件
⊙删除临时文件
⊙关闭数据库的连接等
finally语句是可选的。
throws关键字:
●在定义一个方法的时候可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,而交给方法的调用出进行处理。
●throws使用格式:
public返回值类型方法名(参数表)throws异常类1,异常类2...{.....}
使用throw和throws:
●throw关键字用来在方法代码中主动抛出一个异常。
⊙如果方法代码中自行抛出的异常是受检异常,则这个方法要用throws关键字声明这个异常。
●throws用来声明一个方法可能会抛出的所有异常。
跟在方法签名的后面
⊙如果一个方法声明的是受检异常,则在调用这个方法之处必须处置这个异常(谁调用谁处理)
显示捕获这个异常
继续用throws向上声明
注:
重写一个方法时,它所声明的异常范围不能被扩大。
Exception与RuntimeException:
⊙这两个类的区别如下:
*Exception在程序中时必须进行处理的
*RuntimeException可以不使用try...catch进行处理,但是如果有异常产生,则异常将有JVM进行处理。
自定义异常:
●创建自定义异常
继承自Exception或其子类,习惯上包装一下父类的构造方法。
publicclassMyExceptionextendsException
{
publicMyException(){super();}
publicMyException(Stringmsg){super(msg);}
publicMyException(Throwablecause){super(cause);}
publicMyException(Stringmsg,Throwablecause){super(msg,cause);}
}
●使用自定义异常:
publicString[]createArray(intlength)throwsMyException
{
if(length<0)
{
thrownewMyException(“数组长度小于0,不合法!
”);
}
returnString[length];
}
异常实践:
●观察抛出的异常的名字和行号重要
●调用JDK提供的类的方法前,阅读其API文档了解它可能会产生的异常。
然后再据此决定自己是应该处理这些异常还是将其加入throws列表。
应捕获和处理那些已知如何处理的异常,而传递那些不知如何处理的异常。
●尽量减小try语句块的体积
●在处理异常时,应该打印出该异常的堆栈信息以方便调试。