A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马小符 中级黑马   /  2015-4-15 23:19  /  766 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

2 个回复

倒序浏览
学习了
回复 使用道具 举报
总结的很全面
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马