------- android培训、java培训、期待与您交流! ----------
1. 异常:就是程序在运行时出现的不正常情况。
2. 对问题的分析:
①. 严重的问题:java通过error类进行描述,对于error一般不编写针对性代码对其进行处理。
②. 不严重的问题:java通过Exception类进行描述,对于Exception,可以使用针对性的处理方式来进行处理。
不论error还是Exception,他们都具有一些共性:
不如不正常即【异常情况信息】,引发原因等。
Example:
Java.lang.throwable
-------error
-------Exception
即java的throwable下面有连个类error和Exception。而throwable定义了Error和Exception的一些共性内容.
3. 异常处理:
Java提供了特殊的语句来进行异常处理:
try
{
要检测的代码块;
}
Catch(异常类变量)
{
处理异常的代码块;
}
Finally
{
一定会执行的语句;
}
其中try,catch,finally几种组合情况:
①.Try{}
Catch(异常类变量){}
②.try{}finally{}
③.try{} catch(){} catch(){}………..
4. 封装的异常情况:
①.Java中许多异常被封装,比如runtimeException中的ArithmeticException,ArrayOutOfBoundsException等等。
②.而RuntimeException中的异常可以抛出,不用再函数上申明,或者申明,不抛出,编译都不会出错。
class ArithmeticException extendsException{} /* ,ArithmeticException类是被封装好的。*/
class Alog{
intdiv(int a,int b)
{
returna/b;
}
}
public class Test001 {
publicstatic void main(String[] args)
{ Alog a = new Alog();
try
{
intx=a.div(6, 0);
/*被测试的代码,如果上面发现异常,在转回来,然后跳转到catch(Exception e)处理*/
System.out.println("x="+x);
}
catch(Exceptione)
{
System.out.println("byzero!");
System.out.println(e.getMessage());
System.out.println(e.toString());
//e.printStackTrace();
}
}
}
5.自定义异常:
①.因为项目中会出现特有的问题,而这些问题并未被java所描述并封装对象。
所以对于这些特有的问题可以按照java的对问题封装的思想。
将特有的问题。进行自定义的异常封装。
②.需求:在本程序中,对于除数是-1,也视为是错误的是无法进行运算的。
那么就需要对这个问题进行自定义的描述。
③.当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
要么在内部try catch处理。
要么在函数上声明让调用者处理。一般情况在,函数内出现异常,函数上需要声明。
④.父类中已经把异常信息的操作都完成了。所以子类只要在构造时,将异常信息传递给父类通过super语句。那么就可以直接通过getMessage方法获取自定义的异常信息。
⑤.自定义异常:
必须是自定义类继承Exception。
继承Exception原因:
异常体系有一个特点:因为异常类和异常对象都被抛出。
他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。
只有这个体系中的类和对象才可以被throws和throw操作。
⑥.throws和throw的区别
throws使用在函数上。throw使用在函数内。
throws后面跟的异常类。可以跟多个。用逗号隔开。
throw后跟的是异常对象。
class FuShuException extends Exception//getMessage();
{
privateint value;
FuShuException()
{
super();
}
FuShuException(Stringmsg,int value)
{
super(msg);
this.value= value;
}
publicint getValue()
{
returnvalue;
}
}
class Demo
{
intdiv(int a,int b)throws FuShuException
{
if(b<0)
thrownew FuShuException("出现了除数是负数的情况------ / by fushu",b);//手动通过throw关键字抛出一个自定义异常对象。
returna/b;
}
}
class ExceptionDemo3
{
publicstatic void main(String[] args)
{
Demod = new Demo();
try
{
intx = d.div(4,-9);
System.out.println("x="+x);
}
catch(FuShuException e)
{
System.out.println(e.toString());
//System.out.println("除数出现负数了");
System.out.println("错误的负数是:"+e.getValue());
}
System.out.println("over");
}
}
/*
class Throwable
{
privateString message;
Throwable(Stringmessage)
{
this.message= message;
}
publicString getMessage()
{
returnmessage;
}
}
class Exception extends Throwable
{
Exception(Stringmessage)
{
super(message);
}
}
class Person
{
Stringname;
Person(Stringname)
{
this.name= name;
}
publicString getName()
{
returnname;
}
}
class Student extends Person
{
Student(String name)
{
super(name);
}
}
new Sttdent("lisi").getName();
5. 异常的继承问题:
异常在子父类覆盖中的体现;
①.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
②.如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
③.如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
如果子类方法发生了异常。就必须要进行try处理。绝对不能抛。
class AException extends Exception
{
}
class BException extends AException
{
}
class CException extends Exception
{
}
/*
Exception
|--AException
|--BException
|--CException
*/
class Fu
{
voidshow()throws AException
{
}
}
class Test
{
voidfunction(Fu f)
{
try
{
f.show();
}
catch(AException e)
{
}
}
}
class Zi extends Fu
{
voidshow()throws CException
{
}
}
class
{
publicstatic void main(String[] args)
{
Testt = new Test();
t.function(newZi());
}
}
最后做一个总结:
1. 异常情况关键要分清两种情况:
①.封装函数异常类:java.lang.throwable中封装了许多异常类,可以调用java虚拟机进行处理。
②自定义异常类:自定义异常类必须继承父类,之所以自定义类,是为了更好的了解出错原因。增强程序的可读性。
2. 异常中finally的作用是关资源,就是一个程序执行完毕后,不管是不是出错,那么这个程序所占的资源必须关闭。而finally所在代码块是必须运行的类,所以用来关资源。
3. 一个程序如果在函数上有:throws 异常类名 那么在调用者中必须进行try{} catch(){}进行处理。如果不想进行处理,而程序用能通过编译,那么自定义异常类必须继承RuntimeException类,因为RuntimeException类具有一个特点:只抛,只申明,编译都能通过,所以该类继承RuntimeException类,而没有申明,那么就没有try{}catch(){}
故而就不能处理。
例如:一个正方形求他的面积,边长为负即为异常。
我们认为传值为负时,那么这个正方形就没有构造成功,故而程序可以直接结束,而不需要try{} catch(){},也不需要调用面积,那么就必须要自定义类继承RuntimeException类,在函数上不用申明,而在内部抛出,程序就直接结束,下面的代码块都不处理了。
------- android培训、java培训、期待与您交流! ----------
详情请查看:

被折叠的 条评论
为什么被折叠?



