黑马程序员——Java异常
2014-09-26 08:52
190 查看
------- android培训、java培训、期待与您交流!
----------
问题划分:
1:严重问题,java通过error类来描述。一般不编写针对性的代码对期进行处理。
2:非严重问题,java通过exception类进行描述。可以使用针对性的代码进行处理。
异常的处理
java提供了特有的语句进行处理
try
{
需要被检测的代码
}
catch
{
处理异常的代码(处理方式)
}
finally
{
一定会执行的语句(代码),通常定义关闭资源代码
}
只有System.exit(0);系统退出,这一个代码在finally之前,finally不会执行。
java默认的异常处理机制,就是在调用printstacktrace方法,打印异常的堆栈的跟踪信息不必放在输出语句中直接写即可。
e.printstacktrace();
throws Exception
在功能上通过throws的关键字声明了该功能有可能出现的问题。
对多异常的处理:
1:声明异常时,建议声明更为具体的异常,这样可以处理的更具体。
2:对方声明几个异常,就对应几个catch块。如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
建议在进行catch块处理时,catch中一定要定义具体处理方式。不要简单定义 e.printstacktrace();,也不要简单的就书写一条输出语句。
public class Test03 {
public static void main(String[] args){
System.out.println("请输入1到29之间的整数");
//定义缓冲区
BufferedReader bufr = null;
//捕捉异常
try{
bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
//读取数据
while((line = bufr.readLine())!=null){
if("over".equals(line))
break;
//将读取到的数据转化为int型数据
int n = Integer.parseInt(line);
if(n<=0 || n>=30)
throw new RuntimeException("读取失败,输入值为非法值");
//调用求斐波那契数列第n项的方法。
int fun = function(n);
System.out.println("斐波那契数列第" + n + "项为:" + fun);
}
}
//对异常处理
catch(Exception e){
throw new RuntimeException("读取失败,输入值为非法值");//不要简单定义 e.printstacktrace();,也不要简单的就书写一条输出语句要定义的尽量详细。
}
finally{
try{
if(bufr!=null)
bufr.close();//一定要执行的代码,这里关闭流是一定要执行的。
}
catch(Exception e){
throw new RuntimeException("读取流关闭失败");
}
}
}
的思想。将特有的问题,进行自定义的异常封装。
当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。要么在内部try catch处理,要么在函数上声明让调用
者处理。一般情况在函数内出现异常,函数上需要声明。
因为父类已经把异常信息的操作都完成了,所以子类只要在构造时,将异常信息传递给父类,通过super语句那么就可以直接通过
getMessage方法获取自定义异常信息。
自定义异常,必须是自定义类继承Exception。
异常体系都有一个特点:因为异常类和异常对象都被抛出。他们都具备可抛性,这个可抛性是throwable这个体系中独有的特点。
只有这个体系中的类和对象才可以被throws和throw操作.
throw和throws的区别:
1:throws使用在函数上(指小括号和大括号之间),throw用在函数内。
2:throw后面跟的是异常类,可以抛多个,用逗号隔开。throw后跟的是异常对象。
自定义异常时,如果该异常的发生,无法再继续进行运算,就让异常继承RuntimeException。
异常分两种:
1:编译时被检测的异常。
2:编译时不被检测的异常(运行时异常,RuntimeException即其子类)。
异常在子父类覆盖中的体现:
1:子类在覆盖父类方法时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或该异常的子类或者不抛
2:如果父类方法抛出多多个异常,子类在覆盖该方法时,只能抛出父类异常的子集。
3:如果父类或者接口的方法中没有抛出异常,那么子类在覆盖方法时,也不可以抛出异常。如果子类发生了异常,就必须
进行try处理,绝对不能抛。
当要定义自定义异常信息,可以使用父类已经定义好的功能。
异常信息传递给父类的构造函数。
class MyException extends Exception
{
MyException(String message)
{
super(message)
}
}
异常的好处:
1:将问题进行封装。
2:将正常流程的代码和问题代码相分离便于阅读。
异常处理原则:
1:处理方式有两种try和throws。
2:调用到抛出异常的功能时,抛出几个就处理几个,一个try对应多个catch。
3:多个catch,父类的catch放到最下面。
4:catch内需要定义针对性的处理方式,不要简单定义 e.printstacktrace();,也不要简单的就书写一条输出语句。
当捕获到异常时,本功能处理不了,可以继续在catch中抛出。
try
{
throw new AException();
}
catch(AException e)
{
throw e//本功能处理不了,可以继续在catch中抛出。
}
如果该异常处理不了,但并不属于该功能出现的异常。可以将异常转换后,再抛出和该功能相关的异常。或者一场可以处理但需要将异常产生后和本
功能相关的问题提供出去,让调用者知道并处理也可以将捕获后的异常处理后转换成新的异常。
try
{
throw new AException();
}
catch(AException e)
{
throw
new BException();//让调用者知道并处理也可以将捕获后的异常处理后转换成新的异常。
}
throw单独存在时下面不要定义语句,因为执行不到,会导致编译失败。
interface shape//定义接口
{
void getArea();
}
class Rec implements shape//实现接口
{
private int len,wid;
if(led<0||wid<0)
throw new MyException("出现非法值");//抛出自定异常
Rec(int len ,int wid)
{
this.len=len;
this.wid=wid;
}
public void getArea()//复写接口中的getArea方法
{
System.out.println(len*wid);
}
}
class ExceptionTest1
{
public static void main(String[] args)
{
Rec r = new Rec(-3,4);//
r.getArea();
}
}
class MyException extends Exception//定义自定义异常
{
MyException(String message)
{
super(message)//访问父类异常
}
}
------- android培训、java培训、期待与您交流!
----------
----------
异常
概述
异常就是程序在运行时的不正常情况。java对不正常情况进行描述后的对象体现。问题划分:
1:严重问题,java通过error类来描述。一般不编写针对性的代码对期进行处理。
2:非严重问题,java通过exception类进行描述。可以使用针对性的代码进行处理。
异常的处理
java提供了特有的语句进行处理
try
{
需要被检测的代码
}
catch
{
处理异常的代码(处理方式)
}
finally
{
一定会执行的语句(代码),通常定义关闭资源代码
}
只有System.exit(0);系统退出,这一个代码在finally之前,finally不会执行。
java默认的异常处理机制,就是在调用printstacktrace方法,打印异常的堆栈的跟踪信息不必放在输出语句中直接写即可。
e.printstacktrace();
throws Exception
在功能上通过throws的关键字声明了该功能有可能出现的问题。
对多异常的处理:
1:声明异常时,建议声明更为具体的异常,这样可以处理的更具体。
2:对方声明几个异常,就对应几个catch块。如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
建议在进行catch块处理时,catch中一定要定义具体处理方式。不要简单定义 e.printstacktrace();,也不要简单的就书写一条输出语句。
public class Test03 {
public static void main(String[] args){
System.out.println("请输入1到29之间的整数");
//定义缓冲区
BufferedReader bufr = null;
//捕捉异常
try{
bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
//读取数据
while((line = bufr.readLine())!=null){
if("over".equals(line))
break;
//将读取到的数据转化为int型数据
int n = Integer.parseInt(line);
if(n<=0 || n>=30)
throw new RuntimeException("读取失败,输入值为非法值");
//调用求斐波那契数列第n项的方法。
int fun = function(n);
System.out.println("斐波那契数列第" + n + "项为:" + fun);
}
}
//对异常处理
catch(Exception e){
throw new RuntimeException("读取失败,输入值为非法值");//不要简单定义 e.printstacktrace();,也不要简单的就书写一条输出语句要定义的尽量详细。
}
finally{
try{
if(bufr!=null)
bufr.close();//一定要执行的代码,这里关闭流是一定要执行的。
}
catch(Exception e){
throw new RuntimeException("读取流关闭失败");
}
}
}
自定义异常
因为项目中会出现特有的问题,而这些问题并未被java所描述并封装成对象,所以对于这些特有的问题可以按照java的对问题封装的思想。将特有的问题,进行自定义的异常封装。
当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。要么在内部try catch处理,要么在函数上声明让调用
者处理。一般情况在函数内出现异常,函数上需要声明。
因为父类已经把异常信息的操作都完成了,所以子类只要在构造时,将异常信息传递给父类,通过super语句那么就可以直接通过
getMessage方法获取自定义异常信息。
自定义异常,必须是自定义类继承Exception。
异常体系都有一个特点:因为异常类和异常对象都被抛出。他们都具备可抛性,这个可抛性是throwable这个体系中独有的特点。
只有这个体系中的类和对象才可以被throws和throw操作.
throw和throws的区别:
1:throws使用在函数上(指小括号和大括号之间),throw用在函数内。
2:throw后面跟的是异常类,可以抛多个,用逗号隔开。throw后跟的是异常对象。
自定义异常时,如果该异常的发生,无法再继续进行运算,就让异常继承RuntimeException。
异常分两种:
1:编译时被检测的异常。
2:编译时不被检测的异常(运行时异常,RuntimeException即其子类)。
异常在子父类覆盖中的体现:
1:子类在覆盖父类方法时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或该异常的子类或者不抛
2:如果父类方法抛出多多个异常,子类在覆盖该方法时,只能抛出父类异常的子集。
3:如果父类或者接口的方法中没有抛出异常,那么子类在覆盖方法时,也不可以抛出异常。如果子类发生了异常,就必须
进行try处理,绝对不能抛。
当要定义自定义异常信息,可以使用父类已经定义好的功能。
异常信息传递给父类的构造函数。
class MyException extends Exception
{
MyException(String message)
{
super(message)
}
}
异常的好处:
1:将问题进行封装。
2:将正常流程的代码和问题代码相分离便于阅读。
异常处理原则:
1:处理方式有两种try和throws。
2:调用到抛出异常的功能时,抛出几个就处理几个,一个try对应多个catch。
3:多个catch,父类的catch放到最下面。
4:catch内需要定义针对性的处理方式,不要简单定义 e.printstacktrace();,也不要简单的就书写一条输出语句。
当捕获到异常时,本功能处理不了,可以继续在catch中抛出。
try
{
throw new AException();
}
catch(AException e)
{
throw e//本功能处理不了,可以继续在catch中抛出。
}
如果该异常处理不了,但并不属于该功能出现的异常。可以将异常转换后,再抛出和该功能相关的异常。或者一场可以处理但需要将异常产生后和本
功能相关的问题提供出去,让调用者知道并处理也可以将捕获后的异常处理后转换成新的异常。
try
{
throw new AException();
}
catch(AException e)
{
throw
new BException();//让调用者知道并处理也可以将捕获后的异常处理后转换成新的异常。
}
throw单独存在时下面不要定义语句,因为执行不到,会导致编译失败。
interface shape//定义接口
{
void getArea();
}
class Rec implements shape//实现接口
{
private int len,wid;
if(led<0||wid<0)
throw new MyException("出现非法值");//抛出自定异常
Rec(int len ,int wid)
{
this.len=len;
this.wid=wid;
}
public void getArea()//复写接口中的getArea方法
{
System.out.println(len*wid);
}
}
class ExceptionTest1
{
public static void main(String[] args)
{
Rec r = new Rec(-3,4);//
r.getArea();
}
}
class MyException extends Exception//定义自定义异常
{
MyException(String message)
{
super(message)//访问父类异常
}
}
------- android培训、java培训、期待与您交流!
----------
相关文章推荐
- 黑马程序员_关于java异常机制的学习
- 黑马程序员——第十天(Java面向对象-异常-包)
- 黑马程序员-学习日记_JAVA中异常
- 黑马程序员_java异常处理
- 黑马程序员:java学习要点-内部类和异常
- 黑马程序员入学篇——(5)java中异常
- 黑马程序员:JAVA异常处理机制
- 黑马程序员_Java基础_面向对象(内部类、异常1)
- 黑马程序员--java异常类
- 黑马程序员 java中的异常处理个人总结
- 黑马程序员---- Java学习笔记:1.异常 2.集合
- 黑马程序员--Java异常处理笔记
- 黑马程序员 java 可能遇到的异常
- 黑马程序员_Java基础_面向对象(异常2、练习题、导包)
- 黑马程序员---------笔记整理(java基础六-----异常)
- 黑马程序员_Java异常总结
- 黑马程序员_java 异常之throws、throw 和 RuntimeException
- 黑马程序员——java语言——异常
- 黑马程序员_java基础3-面向对象(二)多态、异常、包
- 黑马程序员________Java中异常机制的学习思考