您的位置:首页 > 职场人生

黑马程序员---java关于异常

2014-06-24 23:06 176 查看
关于Java中的异常
--------- android培训java培训、java学习型技术博客、期待与您交流! ------------

1.什么是异常
程序中遇到的非致命错误,而不是编译时的语法错误,如空指针异常,操作数越界,打开一个不纯在的文件、网络中断等等。
由于Java语言面向对象,万物皆对象,异常也被看成是一种对象。
//=============================================
2.异常的继承体系
java.lang.Throwable -- 所有的错误和异常的父类 ,异常这个事物最高的父类

|-- 错误 Error 所有错误的父类
|-- 异常 Exception 所有异常的父类

Throwable类中的三个方法,都是将异常发生的信息,显示出来

String toString() 返回此 throwable 的简短描述。
String getMessage() 返回此 throwable 的详细消息字符串。
void printStackTrace() 将此 throwable 及其追踪输出至标准错误流。
//=============================================
3.如何处理异常
第一种处理方式:使用:try
catch 处理异常。 格式语法:

try{
被检测的代码
可能发生异常的代码
}catch(异常类 变量){
处理异常
循环,判断,调方法
}

案例:
class ExceptionDemo
{
public static void main(String[] args)
{
try{
int result = div(3,0);
System.out.println("result="+result);
}catch(Exception e){
//输出异常的信息
e.printStackTrace();//打印异常信息,就用这个方法
}

System.out.println("Game Over");
}
private static int div(int x , int y){
return x / y ;
}
}
//==============
第二种方式:继续抛出异常,关键字throw 与 throws

throw 关键字用法:写在方法内部的,意思抛出异常的意思,throw 后面写异常对象 new出来

throws 写在方法的声明上,后面写的是异常类。

案例:

class ExceptionDemo2
{
public static void main(String[] args) throws Exception
{
//System.out.println("Hello World!");
method(15);
}

//定义一个方法,计算月份属于那一个季节
//throws Exception方法有异常,自己不处理,声明出来,交给调用者处理
private static void method(int month)throws Exception{

if(month < 1 || month > 12)
//如果if成立,说明月份非法,抛出异常
throw new Exception();

else if(month >=3 && month <=5)
System.out.println("春天");
else if(month >=6 && month <=8)
System.out.println("夏天");
else
System.out.println("秋天");
}
}

//=============================================
4.异常的分类
分为:编译时期异常与运行时期异常

运行时期异常
Java中,凡是RuntimeException类和他的所有子类都属于运行时异常类
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException
IndexOutOfBoundsException
ClassCastException
NullPointerException
ArithmeticException
以上都是常见的几种异常,各位看官自己判断。。。。+_+

运行时期的异常特点:
凡是在方法中抛出的异常对象,是运行时期异常(RuntimeException和他的子类)
在方法的声明上,不需要写throws抛出 ,调用者,也不需要try
catch处理
设计这个运行时期异常的初衷,运行时期异常在程序的运行期间内,是不允许发生的
一旦发生了,我们的程序,就必须停止运行,程序人员修改源代码
以后实际的应用中,异常90%自定义的都是运行时期异常
案例:
class RuntimeExceptionDemo
{
public static void main(String[] args)
{
double area = 0;
area = getArea(3.1,-4.1);
System.out.println(area);
}

private static double getArea(double r1,double r2){ //不需要写throws抛出
,调用者,也不需要try catch处理
if(r1 <= 0 || r2 <= 0)
throw new RuntimeException();

double area1 = r1*r1*Math.PI;
double area2 = r2*r2*Math.PI;
return area1 > area2 ? area1 : area2;
}
}
//=============================================
5. 如何自定义异常
步骤:
A. 定义类,后缀必须Exception
B. 继承Exception或者继承RuntimeException
C. 构造方法中,将异常消息,通过super传递给父类构造方法

class CollectionNoSortException extends RuntimeException
{
CollectionNoSortException(String message){
super(message);
}
}

//=============================================
6. 子类与父类中的异常处理关系细节
A.父类方法抛出异常,子类重写它的方法必须抛出相同的异常或者异常的子集(就是不能抛出比父类更多的异常)。
父类方法不抛出异常,子类方法重写后也不能抛出异常。

B.如果子类调用了一个抛出异常的方法,子类别无选择,只能try..catch

C. 如果多个catch抓住异常,请你将最大的异常写在最后面的catch

package cn.itcast.exception;
class AException extends Exception
{
}
class BException extends AException
{
}

class Fu
{
public void show(){

}
}
class Zi extends Fu
{
public void show(){ //如果子类调用了一个抛出异常的方法,子类别无选择,只能try..catch

try{
method();
}catch(Exception e){}
}

public void method() throws AException,Exception{}
}

class ExceptionDemo5
{
public static void main(String[] args)
{
Zi zi = new Zi();
try{
zi.method();
}catch(AException e){ // 如果多个catch抓住异常,请你将最大的异常写在最后面的catch

}catch(Exception e){ //你可以自己尝试调换上下两个catch,会产生什么

}
}
}
//=============================================
7.finally代码快
无论是否发生异常,都必须要执行,语法结构
try{

}
catch(){

}
fianlly{
必须要执行的
无论有没有异常发生
finally中的代码,必须要执行
}

案例:
class Demo
{
public static void main(String[] args)
{
try
{
showExce();
System.out.println("A");
}
catch(Exception e)
{
System.out.println("B");
}
finally
{
System.out.println("C");
}
System.out.println("D");
}
public static void showExce()throws Exception
{
throw new Exception();
}
}

//==执行结果为BCD
以后我们会用Java程序来操作外部设备,操作远程计算机
万一网络有问题,操作的过程中发生了异常
finally不管有没有异常,必须执行,在finally中,关闭连接资源
//=============================================
小结:作为一名“程序猿”。我们要去去考虑程序的健壮性和安全性,对于可能发生的意外情况都用throws关键字进行标记,要养成良好的编程风格

--------- android培训java培训、java学习型技术博客、期待与您交流! ------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: