黑马程序员-异常
2014-08-10 13:01
169 查看
------- android培训、java培训、期待与您交流! ----------
异常,就是不正常,程序在运行时出现的不正常
4000
情况。
以万物皆对象的思想来想
这些问题也可以按照面向对象思想进行描述,并封装成了对象
所以异常就是java按照面向对象的思想将问题进行对象封装,这样就方便于操作问题以及处理问题
例如:角标越界,空指针,类型转换等
这些问题进行不断向上抽取,得出了一个异常体系
java.lang.Throwable
Throwable:可抛出的
|--Error: 错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正
|--Exception 异常 可以有针对性的处理方式
这个体系有一个特点跟集合很像,就是以父类的名称作为子类的后缀名
这个体系所有的类和对象都具备一个独有的特点:可抛性
可抛性的体现:就是这个体系中的类和对象都可以被throws和throw两个关键字操作
throws将出现的问题标示出来创建对象,交给调用者处理
throw 创建该异常对象
处理方式:
捕捉处理,抛出在调用处处理
对于捕捉:
try catch finally
基本格式
try
{
需要被检测的代码
}
catch(异常类 变量名)
{
异常处理代码
}
finally
{
一定会执行的代码。
}
异常处理的机制:
首先,try进行被检测代码的异常捕获,如果没有异常,则正常往下运行
如果有finally会在捕捉不到异常的前提下先执行,如果try语句中有return,先执行finally
如果捕捉到了异常,则创建一个相关异常的实例对象
在catch中定义的异常类 变量名 作为形参来将try捕捉到的异常对象传入
然后进行异常的处理,所以catch才是异常处理的最后手段
处理完后,不管是否继续执行,都将finally执行。finally是绝对会执行的,除非System.exit(0)
finally由于他的特性,一般用于关闭资源
catch的处理方式有几种常见的
一种 打印信息 因为每个异常对象的构造方法都会有一个私有的信息属性
所以可以调用公开的方法getMessage来获取这个信息
第二种:便是Exception复写的toString类了,这个类获取异常的名字以及异常的信息
第三种:e.printStackTrace 打印异常在堆栈中信息:异常名称+异常信息+异常位置
throw和throws的区别:
throw用于抛出异常对象,后面跟的是异常对象,throw用在函数内
throws用于抛出异常类,后面跟的是异常类名,可以跟多个。抛出几个就处理几个
通常情况,如果函数内容有throw,抛出了异常对象,就需要进行处理,如果没有处理,就需要在本类上抛出这个异常,交给调用处去处理
有一个情况例外那就是RuntimeException的类及其子类
这一类实在运行时发生异常,直接将程序停止,方便调试。
那么编译时检查异常和运行异常的区别
编译被检查异常,能在函数内抛出,函数必须要声明异常,否则编译失败
运行时异常,直接抛出异常对象,无需声明无需处理,直接停掉程序
另外,当子类要处理异常时,特别是使用父类的方法,一定要看父类是否有抛出异常,如果没有,则子类必须进行try处理不能抛,如果父类又抛出异常
子类必须处理或者抛出。如果父类抛出了很多异常,那么子类可以抛出其父类的任意异常。但不能抛出父类所没有的异常。
尽管如此,还是有很多异常是我们自己想要的,比如不想要负数之内的,这时就可以自定义异常。
如何自定义异常呢?
只要继承Exception或者RuntimeException即可,为了让类具有可抛性
然后在通过throw或者throws来操作
如果一个异常调用者处理不了,就可以把此异常转换成新的异常再抛出去。
try catch finally的结合方式
1.try catch finally
2.try catch
3.try finally
常见的异常:
1.角标越界异常(IndexOutOfBoundsException)
2.空指针异常(NullPointerException)
3.类型转换异常(ClassCaseException)
例子:
class Demo
{
public static void func() //
throws Exception
{
try
{
throw new Exception(); //
没有catch解决,也没有抛出 , 编译失败
}
finally
{
System.out.println("B");
}
}
public static void main(String[] args)
{
try
{
func();
System.out.println("A"); // 发生异常,跳转。
}
catch (Exception e)
{
System.out.println("C");
}
System.out.println("D");
}
}
最后答案为BCD
异常,就是不正常,程序在运行时出现的不正常
4000
情况。
以万物皆对象的思想来想
这些问题也可以按照面向对象思想进行描述,并封装成了对象
所以异常就是java按照面向对象的思想将问题进行对象封装,这样就方便于操作问题以及处理问题
例如:角标越界,空指针,类型转换等
这些问题进行不断向上抽取,得出了一个异常体系
java.lang.Throwable
Throwable:可抛出的
|--Error: 错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正
|--Exception 异常 可以有针对性的处理方式
这个体系有一个特点跟集合很像,就是以父类的名称作为子类的后缀名
这个体系所有的类和对象都具备一个独有的特点:可抛性
可抛性的体现:就是这个体系中的类和对象都可以被throws和throw两个关键字操作
throws将出现的问题标示出来创建对象,交给调用者处理
throw 创建该异常对象
处理方式:
捕捉处理,抛出在调用处处理
对于捕捉:
try catch finally
基本格式
try
{
需要被检测的代码
}
catch(异常类 变量名)
{
异常处理代码
}
finally
{
一定会执行的代码。
}
异常处理的机制:
首先,try进行被检测代码的异常捕获,如果没有异常,则正常往下运行
如果有finally会在捕捉不到异常的前提下先执行,如果try语句中有return,先执行finally
如果捕捉到了异常,则创建一个相关异常的实例对象
在catch中定义的异常类 变量名 作为形参来将try捕捉到的异常对象传入
然后进行异常的处理,所以catch才是异常处理的最后手段
处理完后,不管是否继续执行,都将finally执行。finally是绝对会执行的,除非System.exit(0)
finally由于他的特性,一般用于关闭资源
catch的处理方式有几种常见的
一种 打印信息 因为每个异常对象的构造方法都会有一个私有的信息属性
所以可以调用公开的方法getMessage来获取这个信息
第二种:便是Exception复写的toString类了,这个类获取异常的名字以及异常的信息
第三种:e.printStackTrace 打印异常在堆栈中信息:异常名称+异常信息+异常位置
throw和throws的区别:
throw用于抛出异常对象,后面跟的是异常对象,throw用在函数内
throws用于抛出异常类,后面跟的是异常类名,可以跟多个。抛出几个就处理几个
通常情况,如果函数内容有throw,抛出了异常对象,就需要进行处理,如果没有处理,就需要在本类上抛出这个异常,交给调用处去处理
有一个情况例外那就是RuntimeException的类及其子类
这一类实在运行时发生异常,直接将程序停止,方便调试。
那么编译时检查异常和运行异常的区别
编译被检查异常,能在函数内抛出,函数必须要声明异常,否则编译失败
运行时异常,直接抛出异常对象,无需声明无需处理,直接停掉程序
另外,当子类要处理异常时,特别是使用父类的方法,一定要看父类是否有抛出异常,如果没有,则子类必须进行try处理不能抛,如果父类又抛出异常
子类必须处理或者抛出。如果父类抛出了很多异常,那么子类可以抛出其父类的任意异常。但不能抛出父类所没有的异常。
尽管如此,还是有很多异常是我们自己想要的,比如不想要负数之内的,这时就可以自定义异常。
如何自定义异常呢?
只要继承Exception或者RuntimeException即可,为了让类具有可抛性
然后在通过throw或者throws来操作
如果一个异常调用者处理不了,就可以把此异常转换成新的异常再抛出去。
try catch finally的结合方式
1.try catch finally
2.try catch
3.try finally
常见的异常:
1.角标越界异常(IndexOutOfBoundsException)
2.空指针异常(NullPointerException)
3.类型转换异常(ClassCaseException)
例子:
class Demo
{
public static void func() //
throws Exception
{
try
{
throw new Exception(); //
没有catch解决,也没有抛出 , 编译失败
}
finally
{
System.out.println("B");
}
}
public static void main(String[] args)
{
try
{
func();
System.out.println("A"); // 发生异常,跳转。
}
catch (Exception e)
{
System.out.println("C");
}
System.out.println("D");
}
}
最后答案为BCD
相关文章推荐
- 黑马程序员——(异常)总结
- 黑马程序员---java关于异常
- 黑马程序员——java基础之异常
- 03黑马程序员_异常捕获,关系表达
- 黑马程序员_java 异常之throws、throw 和 RuntimeException
- 黑马程序员----Java的异常处理机制
- 黑马程序员7. finally&异常总结&包
- 黑马程序员--异常体系
- 黑马程序员_学习记录10:异常
- 黑马程序员——异常总结(老师)
- 黑马程序员_复习异常:理解自定义异常
- 黑马程序员_常见异常
- 黑马程序员——异常
- 黑马程序员——异常的日志信息、系统信息
- 黑马程序员——异常篇
- 黑马程序员--异常
- 黑马程序员--Java基础常见异常整理
- 黑马程序员——异常
- 【黑马程序员】Java学习笔记--异常
- 黑马程序员——面向对象(三)(多态和异常简述)