黑马程序员 Java面向对象<三> 异常
2014-06-21 14:16
274 查看
----------
android培训、java培训、期待与您交流! ----------
写程序避免不鸟出现bug,java也不例外。但它不同与其他语言的是,java提供了一套处理机制,用于处理这些bug。也就是java的异常处理机制
它是基于面向对象思考的将问题封装成了对象。
因为问题的产生有产生的原因、有问题的名称、有问题的描述等多个属性信息存在。当出现多属性信息最方便的方式就是将这些信息进行封装。
异常就是java按照面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。
出现的问题有很多种,比如角标越界,空指针等都是。就对这些问题进行分类。
而且这些问题都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系。
Throwable:可抛出的。
//该体系的特点就在于Throwable及其所有的子类都具有可抛性
|--Error:错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正。
|--Exception:异常,可以有针对性的处理方式
通过throws throw 凡是可以被这两个关键字所操作的类和对象都具备可抛性.
2、通过throws在函数上声明。(如果函数内throw异常,那么函数就必须声明)
异常:是在运行时期发生的不正常情况
throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。
通常情况:函数内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。
2、运行时异常,其中Exception有一个特殊的子类RuntimeException,以及RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常
声明的原因:是需要调用者对该异常进行处理。
运行时异常如果在函数内被抛出,在函数上不需要声明。
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正
否则必须在函数内用trycatch捕捉,否则编译失败。
2、如果调用到了声明异常的函数,要么try catch要么throws,否则编译失败。
3、什么时候catch,什么时候throws 呢?
功能内容可以解决,用catch。
解决不了,用throws告诉调用者,由调用者解决 。
4、什么时候定义try,什么时候定义throws呢
功能内部如果出现异常,如果内部可以处理,就用try;
如果功能内部处理不了,就必须声明出来,让调用者处理。
5、一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。
内部又几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。
例子
/*
有个圆形和长方形,都可以获取面积,对于面积若出现非法数值,是为获取面积出问题
问题通过异常来表示
*/
//创建输入值错误的异常
class NoValueException extends RuntimeException//对问题名称的描述,更具体
{
NoValueException(String message)
{
super(message);
}
}
//创建接口,抽取获取面积方法
interface ShapeArea
{
void getArea();
}
//创建获取长方形面积的类
class Rec implements ShapeArea
{
private int len,wid;
//此处声明了,就会将问题抛给主函数中解决
Rec(int len,int wid)throws NoValueException
{
if (len<=0 || wid<=0)
throw new NoValueException("出现非法值了");
this.len = len;
this.wid = wid;
}
public void getArea()
{
System.out.println(len*wid);
}
}
//创建获取圆形面积的类
class Circle implements ShapeArea
{
private int rad;
private static final double PI = 3.14;
//此处未声明,当调用该函数,发生异常时会直接结束程序,并打印具体的异常信息
Circle(int rad)
{
if (rad<=0)
throw new NoValueException("出现非法值了");
this.rad = rad;
}
public void getArea()
{
System.out.println(rad*rad*PI);
}
}
//测试
class Temp
{
public static void main(String[] args)
{
//方式一:出现异常时,信息不具体
try
{
Rec r= new Rec(-3,4);
r.getArea();
}
catch (NoValueException e)
{
System.out.println(e.toString());
}
System.out.println("OVER");
//方式二:出现异常时,信息更具体
Circle c = new Circle(-8);
c.getArea();
}
}
android培训、java培训、期待与您交流! ----------
写程序避免不鸟出现bug,java也不例外。但它不同与其他语言的是,java提供了一套处理机制,用于处理这些bug。也就是java的异常处理机制
它是基于面向对象思考的将问题封装成了对象。
异常
定义:
就是不正常。程序在运行时出现的不正常情况。其实就是程序中出现的问题。这个问题按照面向对象思想进行描述,并封装成了对象。因为问题的产生有产生的原因、有问题的名称、有问题的描述等多个属性信息存在。当出现多属性信息最方便的方式就是将这些信息进行封装。
异常就是java按照面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。
出现的问题有很多种,比如角标越界,空指针等都是。就对这些问题进行分类。
而且这些问题都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系。
异常体系
最终问题(不正常情况)就分成了两大类Throwable:可抛出的。
//该体系的特点就在于Throwable及其所有的子类都具有可抛性
|--Error:错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正。
|--Exception:异常,可以有针对性的处理方式
通过throws throw 凡是可以被这两个关键字所操作的类和对象都具备可抛性.
// 常见异常 public class Temp { public static void main(String[] args) { int[] arr = new int[3]; //System.out.println(arr[3]);//java.lang.ArrayIndexOutOfBoundsException: 角标越界 arr = null; //System.out.println(arr[1]);//java.lang.NullPointerException 空指针异常 int a =0,b = 2; System.out.println(b/a);//java.lang.ArithmeticException: / by zero 算数异常 } }
可处理的Exception
1、在运行时运行出现的一些情况,可以通过 try catch finally2、通过throws在函数上声明。(如果函数内throw异常,那么函数就必须声明)
异常:是在运行时期发生的不正常情况
异常处理几种格式
/* 格式一: try{ 可能发生异常的代码; } catch(接收捕获异常类的对象 异常类引用变量){ 处理代码; } 格式二: try{ 可能发生异常的代码; } fianlly{ 一定要执行的语句;(通常用于关闭资源) } 格式三: try{ 可能发生异常的代码; } catch(捕获异常类的对象 异常类引用变量){ 处理代码; } finally{ 一定要执行的语句;(通常用于关闭资源) } */ public class Temp { public static void main(String[] args) { int[] arr = {1,3,5,7}; try{ System.out.println(arr[5]); } catch (Exception e){ System.out.println("数组角标越界"); } finally{ System.out.println("return 之前必须执行"); return ; } } }
throw 和 throws关键字的区别
throw 用于抛出异常对象,后面跟的是异常对象;throw用在函数内。throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。
通常情况:函数内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。
异常分两种
1、编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。2、运行时异常,其中Exception有一个特殊的子类RuntimeException,以及RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常
编译时被检查的异常和运行时异常的区别
编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。声明的原因:是需要调用者对该异常进行处理。
运行时异常如果在函数内被抛出,在函数上不需要声明。
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正
异常处理的原则
1、函数内容如果抛出需要检测的异常,那么函数上必须要声明。否则必须在函数内用trycatch捕捉,否则编译失败。
2、如果调用到了声明异常的函数,要么try catch要么throws,否则编译失败。
3、什么时候catch,什么时候throws 呢?
功能内容可以解决,用catch。
解决不了,用throws告诉调用者,由调用者解决 。
4、什么时候定义try,什么时候定义throws呢
功能内部如果出现异常,如果内部可以处理,就用try;
如果功能内部处理不了,就必须声明出来,让调用者处理。
5、一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。
内部又几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。
例子
/*
有个圆形和长方形,都可以获取面积,对于面积若出现非法数值,是为获取面积出问题
问题通过异常来表示
*/
//创建输入值错误的异常
class NoValueException extends RuntimeException//对问题名称的描述,更具体
{
NoValueException(String message)
{
super(message);
}
}
//创建接口,抽取获取面积方法
interface ShapeArea
{
void getArea();
}
//创建获取长方形面积的类
class Rec implements ShapeArea
{
private int len,wid;
//此处声明了,就会将问题抛给主函数中解决
Rec(int len,int wid)throws NoValueException
{
if (len<=0 || wid<=0)
throw new NoValueException("出现非法值了");
this.len = len;
this.wid = wid;
}
public void getArea()
{
System.out.println(len*wid);
}
}
//创建获取圆形面积的类
class Circle implements ShapeArea
{
private int rad;
private static final double PI = 3.14;
//此处未声明,当调用该函数,发生异常时会直接结束程序,并打印具体的异常信息
Circle(int rad)
{
if (rad<=0)
throw new NoValueException("出现非法值了");
this.rad = rad;
}
public void getArea()
{
System.out.println(rad*rad*PI);
}
}
//测试
class Temp
{
public static void main(String[] args)
{
//方式一:出现异常时,信息不具体
try
{
Rec r= new Rec(-3,4);
r.getArea();
}
catch (NoValueException e)
{
System.out.println(e.toString());
}
System.out.println("OVER");
//方式二:出现异常时,信息更具体
Circle c = new Circle(-8);
c.getArea();
}
}
相关文章推荐
- 黑马程序员 Java面向对象<二> 继承、多态、接口
- 黑马程序员——Java基础---面向对象<一>
- 黑马程序员——Java基础---面向对象<二>
- 黑马程序员 Java面向对象<一> 基础
- 黑马程序员_java异常<三>
- 黑马程序员 java面向对象<四> 多线程
- 黑马程序员_java基础3-面向对象(二)多态、异常、包
- 黑马程序员-----java基础IO流<三>
- 黑马程序员----java面向对象04(异常、包)
- 黑马程序员_Java语法及面向对象基础<一>
- 黑马程序员——Java基础---语法<三>
- 黑马程序员——第十天(Java面向对象-异常-包)
- 黑马程序员 Java基础 --->异常处理与包
- Java笔记2 面向对象<5>内部类、静态内部类、内部类定义原则、匿名内部类、异常概述、RuntimeException
- 黑马程序员——Java语言基础——03.面向对象(3)异常
- 黑马程序员--面向对象第二部分-内部类、异常--java学习日记6(基础知识)
- 黑马程序员--Java学习笔记之面向对象思想(多态、内部类、匿名内部类、异常类)
- 《黑马程序员》java笔记->【03.2.1】关于异常
- 黑马程序员—java面向对象总结(4)—内部类、异常
- 黑马程序员_java面向对象总结【4】(内部类、异常处理、Package)