1、 异常:
就是java程序中的一些不正常情况,java语言对这些不正常情况进行了描述,并进行了对象的封装。
2、异常体系:异常情况有很多,就形成了体系。
a、 Throwable
|--Error :严重性的,无法处理,要直接修改程序。
|--Exception :可以定义针对性的处理。
通常 子类名的后缀名都是父类名。
b、这个异常体系的最大特点:该体系中的类和对象都具备可抛性。
c、jvm默认异常处理方式就是将收到的异常名字,信息,位置,都打印在控制台上,结束程序。
d、Throwable中的方法。Exception中没有特有方法,都是继承Throwable中的方法。
String getMessage():获取异常信息。
String toString():覆写Object中,打印名称,信息。
void printStackTrace():打印异常的信息,名称,位置。
3、异常处理:对于Eception异常有两种处理方式。
第一种:声明抛出。告诉调用者功能会有问题。通过throws关键字对问题声明在功能上。
需求:除零算数异常。
第二种:进行捕捉。可以使用真对象的捕捉代码块。
try{需要被检测的代码}
catch(异常类 变量){异常处理代码}
finally{一定会被执行的代码}
4、自己创建异常对象:可以自定义异常信息,但需要自己手动抛异常。
thrwo:自己手动抛出异常。
5、throws和throw关键字的区别?
throws用在函数上,用于功能声明异常,后面抛出的异常类可以抛多个,只要用逗号隔开即可。
throw只能用在函数内,用于抛出异常对象。特点:一旦异常执行,就会结束功能.
6、自定义异常:
a、自定义异常概述
有些异常java中没有给出对应的异常描述。例如:除数不能为负数。
这时需要我们按照面向对象的思想对这个问题进行描述,封装成对象。
b、异常定义的方式:
1、定义一个类,对问题进行描述。
2、必须要让这个类继承异常类,具备可抛性。
7、异常分两种。
第一种:编译时异常Exception:编译时被编译器检测的异常。
通常都需要辨析针对性的处理代码进行处理。
第二种:运行时异常RuntimeException:编译时不被检测的异常,这种异常出现,编译时期是不在检查之列的。
这种异常不需要在函数上声明,即使声明了,调用者也不用一定给出预先处理方式,因为它不会导致编译失败。通常,不编写针对性代码进行处理。一旦发生,就让程序停掉。为了对代码进行修正。例:角标越界异常。
区分:RuntimeException和它的子类都是运行时异常。
代码演示:
异常处理方式一:声明抛出。
public class ExceptionDemo {
public static void main(String[] args) throws ArithmeticException{
/*
* 需求:一个除数为0的异常处理方式。
* 方式一:在函数上声明抛出。告诉调用者可能会出现异常。
*/
Demo d = new Demo();
int x = d.div(4, 0);
System.out.println("x="+x);
System.out.println("over");
}
}
//自定义一个类,这个类中有个方法,进行除法运算。
class Demo{
int div(int a,int b)throws ArithmeticException{//抛出,谁掉用抛给谁。
return a/b;
}
}
异常处理方式二:进行捕捉处理。
public class ExceptionDemo2 {
public static void main(String[] args) {
try{
Demo2 d = new Demo2();
d.div(4, 0);
}
//异常处理方式。
catch(ArithmeticException e){
System.out.println("message:"+e.getMessage());//打印信息。
// System.out.println("toString:"+e.toString());//异常的名字+信息。
// System.out.println("啊,异常啦");
// e.printStackTrace();//打印异常的信息+名字+位置。
}
System.out.println("over");
}
}
class Demo2 {
int div(int a,int b)throws ArithmeticException{
if(b==0)
throw new ArithmeticException("完了,被零除了");
return a/b;
}
}
自定义异常:
public class ExceptionDemo3 {
public static void main(String[] args) {
/*
* 需求:自定义除数不能为负数的异常。
* 定义方式:
* 1、定义一个类,对异常问题进行描述。
* 2、必须让这个类继承异常类,具备可抛性。
*/
try{
Demo3 d = new Demo3();
int num = d.div(4, -1);
System.out.println(num);
}
catch(ArithmeticException e){
System.out.println("message="+e.getMessage());
}
catch(FuShuException e){
System.out.println("message="+e.getMessage());
System.out.println("toString:"+e.toString());
System.out.println("负数是:"+e.getNum());
e.printStackTrace();
}
}
}
//描述负数异常。
class FuShuException extends Exception{
private int num;
FuShuException()
{
super();
}
FuShuException(String message){
super(message);//将异常信息传给父类处理。
}
FuShuException(int num){
this.num = num;
}
public int getNum(){
return num;
}
}
//两个整形数的除法运算。
class Demo3{
int a,b;
int div(int a,int b)throws ArithmeticException,FuShuException {
if(b<0)
throw new FuShuException(b);
// throw new FuShuException("错误,不允许除数为负数。。");
if(b==0)
throw new ArithmeticException("除数为零了。。");
return a/b;
}
}
http://edu.csdn.net/heima android培训 http://edu.csdn.net/heima ; java培训期待与您交流!详细请查看http://edu.csdn.net/heima
|
|