现在的位置: 首页 > 综合 > 正文

黑马程序员–异常

2013年08月10日 ⁄ 综合 ⁄ 共 3155字 ⁄ 字号 评论关闭

http://edu.csdn.net/heima android培训
http://edu.csdn.net/heima ; java培训期待与您交流!

异常。

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自己手动抛出异常。 

5throwsthrow关键字的区别?
  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

 

抱歉!评论已关闭.