异常
上学(){
设置标量;
调用标量输出(标量值)
}
标量输出(标量值){
if(堵车){
call 老师;
输出 堵车;
}else if(生病){
call 老师;
输出 生病;
}else{
输出 正常上课;
}
}
-------------------------------------------------------\\\
try {
输出 正常上课;
}catch(堵车){
call 老师 堵车;
}catch(生病){
call 老师 生病;
}
}
-------------------------------------------------
异常:运行程序过程中不期而至的各种状况
异常是一个事件,它发生在程序运行期间。当干扰了程序正常运行。
Java通过API中Throwable类的子类描述各种不同的异常
Throwable:是java语言中所有的错误和异常的超类 (Errow和EXception)
Error : 错误,不能够通过程序写代码的技术手段来解决。指的的严重的系统错误
Exception:异常 在代码中,有可能发生,有可能不发生的错误现象
异常一般情况下,是在编译的时候没有问题,执行的时候出问题
Exception的重要子类:
RuntimeException 类以及子类表示 “JVM 常用操作” 引发的错误;
比如:对象的引用为空,除数为0 数组越界
通常,java的异常可以分为 可查的异常 和 不可查异常
可查异常/受检异常(编译器要求必须处理的异常):正确的程序在运行的过程中,很容易出现的,情理中可以接受的异常状况。可查异常虽然是异常状况,但是在一定程度上它的发生是可以预计的,而且一旦发生这种异常,就必须采取某种方式进行处理。
除了RuntimeException以及子类之外,其他的Exception类及其子类都属于可查异常。
可查异常的特点:Java编译器会检查这些异常。也就是说 当程序中可能出现这些异常,要么就try - catch捕获异常,要么使用throws子句来抛出异常。否则编译是不会通过
不可查异常/非受检异常/运行时异常(编译器不要求强制处置的异常)包括运行时异常(RuntimeExceptioin 及其子类)
可以不捕获 也可以不抛出
---------------------------------------------------------------------------
捕获异常
程序员必须要人工处理的异常
非捕获异常
程序员可以不人工处理的异常,交给JVM自动处理
-------------------------------------------------
两种处理方式:
抛出异常 当一个方法出现异常,方法需要创建异常对象并且交付给运行时系统,异常对象中包含了异常类型和异常出现的程序状态等信息,运行的时候系统辅助寻找处理异常的代码并执行
捕获异常 在方法抛出异常之后,运行的时候系统将转为寻找合适的异常处理器(exception handler)
直白一些:自己处理,不影响调用方法的处理机制
--------------------------------------
捕获异常
使用 try catch
try 选定要捕获异常的范围
如果在try中出现异常
则使用catch 捕获异常
格式:
try{
代码段(可能出现异常代码)
}catch(异常类 ex){
对异常进行处理的代码段
}
------------------------------------------------
异常方法:
public void printStackTrace()
直接调用,可以打印异常的详细信
public String getMessage()
打印该方法的返回值,异常信息
-------------------------------------------------
多重catch
格式:
try{
代码段(可能出现异常代码)
}catch(异常类1 ex){
对异常进行处理的代码段
}catch(异常类2 ex){
对异常进行处理的代码段
}catch(异常类3 ex){
对异常进行处理的代码段
}catch(异常类4 ex){
对异常进行处理的代码段
}...
注意:如果前面的catch语句以及捕获异常,后面就不会捕获
前面的catch异常范围小(子类),后面的catch异常范围大。(父类)
---------------------------------------------------------------------
写一个数组越界,并使用try catch捕获异常。
IndexOutOfBoundsException
-------------------------------------------------------
抛出异常
throw throws 关键词
抛出异常的情况:声明方法的时候,异常不在方法中进行处理,所以需要抛出,给调用方法的进行处理
如果一个方法没有捕获一个检查异常,name该方法必须使用throws关键词声明。
throws关键词放在方法签名的尾部。用来抛出异常的类型
throw 关键词方法在方法体中,用来抛出异常的对象
方法签名:方法名,参数列表
格式:
修饰符 返回值类型 方法名(参数列表) throws 异常类型{
throw 异常对象;
}
-----------------------------------------------------------------
自定义异常
四步操作
1.定义一个类继承Throwable或其子类,一般情况下都是继承Exception
2.添加构造方法(当然也可以不加)
3.在某个方法类抛出该异常
4.捕获该异常
-------------------------------------------------------------
2) 定义Student类包含Name和Address属性,和setName、setAddress方法,当姓名长度小于1或者大于5时
finally 关键词
格式:
try{
代码1
}[catch(异常 ){
代码2
}]finally{
代码3
}
说明:[] 中的内容可以有可无
代码1 可能执行一段
代码2 可能会执行
代码3 必须执行
----------------------------------------------------------
final
finally
用来创建在try代码块后面必须执行的代码块
无论是否发生异常,finally代码块中的代码总会被执行
在finally代码块中,可以运行清理类型等收尾善后语句 比如 关闭资源,关闭连接
-----------------------------------
注意:
catch不能独立于try而存在
在try、catch语句后面天津finally 并不是强制性的
try代码后不能既没有catch也没有finally
-------------------------------------------------------
上学(){
设置标量;
调用标量输出(标量值)
}
标量输出(标量值){
if(堵车){
call 老师;
输出 堵车;
}else if(生病){
call 老师;
输出 生病;
}else{
输出 正常上课;
}
}
-------------------------------------------------------\\\
上学()
可能存在 堵车,生病{
try {
输出 正常上课;
}catch(堵车){
call 老师 堵车;
}catch(生病){
call 老师 生病;
}
}
-------------------------------------------------
异常:运行程序过程中不期而至的各种状况
异常是一个事件,它发生在程序运行期间。当干扰了程序正常运行。
Java通过API中Throwable类的子类描述各种不同的异常
Throwable:是java语言中所有的错误和异常的超类 (Errow和EXception)
Error : 错误,不能够通过程序写代码的技术手段来解决。指的的严重的系统错误
Exception:异常 在代码中,有可能发生,有可能不发生的错误现象
异常一般情况下,是在编译的时候没有问题,执行的时候出问题
Exception的重要子类:
RuntimeException 类以及子类表示 “JVM 常用操作” 引发的错误;
比如:对象的引用为空,除数为0 数组越界
通常,java的异常可以分为 可查的异常 和 不可查异常
可查异常/受检异常(编译器要求必须处理的异常):正确的程序在运行的过程中,很容易出现的,情理中可以接受的异常状况。可查异常虽然是异常状况,但是在一定程度上它的发生是可以预计的,而且一旦发生这种异常,就必须采取某种方式进行处理。
除了RuntimeException以及子类之外,其他的Exception类及其子类都属于可查异常。
可查异常的特点:Java编译器会检查这些异常。也就是说 当程序中可能出现这些异常,要么就try - catch捕获异常,要么使用throws子句来抛出异常。否则编译是不会通过
不可查异常/非受检异常/运行时异常(编译器不要求强制处置的异常)包括运行时异常(RuntimeExceptioin 及其子类)
可以不捕获 也可以不抛出
---------------------------------------------------------------------------
捕获异常
程序员必须要人工处理的异常
非捕获异常
程序员可以不人工处理的异常,交给JVM自动处理
-------------------------------------------------
两种处理方式:
抛出异常 当一个方法出现异常,方法需要创建异常对象并且交付给运行时系统,异常对象中包含了异常类型和异常出现的程序状态等信息,运行的时候系统辅助寻找处理异常的代码并执行
直白一些:自己不处理,进行抛出,抛出有自动抛出和手动抛出,手动抛出关键词throw 创建一个异常实例。
捕获异常 在方法抛出异常之后,运行的时候系统将转为寻找合适的异常处理器(exception handler)
直白一些:自己处理,不影响调用方法的处理机制
--------------------------------------
捕获异常
使用 try catch
try 选定要捕获异常的范围
如果在try中出现异常
则使用catch 捕获异常
格式:
try{
代码段(可能出现异常代码)
}catch(异常类 ex){
对异常进行处理的代码段
}
------------------------------------------------
异常方法:
public void printStackTrace()
直接调用,可以打印异常的详细信
public String getMessage()
打印该方法的返回值,异常信息
-------------------------------------------------
多重catch
格式:
try{
代码段(可能出现异常代码)
}catch(异常类1 ex){
对异常进行处理的代码段
}catch(异常类2 ex){
对异常进行处理的代码段
}catch(异常类3 ex){
对异常进行处理的代码段
}catch(异常类4 ex){
对异常进行处理的代码段
}...
注意:如果前面的catch语句以及捕获异常,后面就不会捕获
前面的catch异常范围小(子类),后面的catch异常范围大。(父类)
---------------------------------------------------------------------
写一个数组越界,并使用try catch捕获异常。
IndexOutOfBoundsException
-------------------------------------------------------
抛出异常
throw throws 关键词
抛出异常的情况:声明方法的时候,异常不在方法中进行处理,所以需要抛出,给调用方法的进行处理
如果一个方法没有捕获一个检查异常,name该方法必须使用throws关键词声明。
throws关键词放在方法签名的尾部。用来抛出异常的类型
throw 关键词方法在方法体中,用来抛出异常的对象
方法签名:方法名,参数列表
格式:
修饰符 返回值类型 方法名(参数列表) throws 异常类型{
throw 异常对象;
}
-----------------------------------------------------------------
自定义异常
四步操作
1.定义一个类继承Throwable或其子类,一般情况下都是继承Exception
2.添加构造方法(当然也可以不加)
3.在某个方法类抛出该异常
4.捕获该异常
-------------------------------------------------------------
定义一个自定义异常。
例:
1) 自定义两个异常类:非法姓名异常IllegaNameException和非法地址异常IllegalAddressException。
2) 定义Student类包含Name和Address属性,和setName、setAddress方法,当姓名长度小于1或者大于5时
抛出IllegaNameException,当地址中不含有“省”或者“市”关键字时抛出IllegalAddressException。
3) 编写程序抛出这两种异常,在main方法中进行捕获并合理地处理。
public class IllegaNameException extends Exception {
public IllegaNameException(String Message){
super(Message);
}
@Override
public void printStackTrace() {
// TODO Auto-generated method stub
super.printStackTrace();
}
}
public IllegaNameException(String Message){
super(Message);
}
@Override
public void printStackTrace() {
// TODO Auto-generated method stub
super.printStackTrace();
}
}
public class IllegalAdressEXception extends Exception {
public IllegalAdressEXception(String Message){
super(Message);
}
@Override
public void printStackTrace() {
// TODO Auto-generated method stub
super.printStackTrace();
}
}
public IllegalAdressEXception(String Message){
super(Message);
}
@Override
public void printStackTrace() {
// TODO Auto-generated method stub
super.printStackTrace();
}
}
public class Student {
private String name;
private String adress;
public void setName(String name) throws IllegaNameException {
if((name.length()<2)||(name.length()>5)){
throw new IllegaNameException("姓名不规范");
}
this.name = name;
}
public void setAdress(String adress) throws IllegalAdressEXception {
int x=adress.indexOf("省");
int y=adress.indexOf("市");
if((x==-1)&&(y==-1)){
throw new IllegalAdressEXception("地址名不规范");
}
this.adress = adress;
}
}
private String name;
private String adress;
public void setName(String name) throws IllegaNameException {
if((name.length()<2)||(name.length()>5)){
throw new IllegaNameException("姓名不规范");
}
this.name = name;
}
public void setAdress(String adress) throws IllegalAdressEXception {
int x=adress.indexOf("省");
int y=adress.indexOf("市");
if((x==-1)&&(y==-1)){
throw new IllegalAdressEXception("地址名不规范");
}
this.adress = adress;
}
}
public class TestStudent {
public static void main(String[] args) {
Student s=new Student();
try {
s.setName("张");
} catch ( IllegaNameException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
s.setAdress("成都");
} catch (IllegalAdressEXception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-------------------------------------------------------------------public static void main(String[] args) {
Student s=new Student();
try {
s.setName("张");
} catch ( IllegaNameException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
s.setAdress("成都");
} catch (IllegalAdressEXception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
finally 关键词
格式:
try{
代码1
}[catch(异常 ){
代码2
}]finally{
代码3
}
说明:[] 中的内容可以有可无
代码1 可能执行一段
代码2 可能会执行
代码3 必须执行
----------------------------------------------------------
final
finally
用来创建在try代码块后面必须执行的代码块
无论是否发生异常,finally代码块中的代码总会被执行
在finally代码块中,可以运行清理类型等收尾善后语句 比如 关闭资源,关闭连接
-----------------------------------
注意:
catch不能独立于try而存在
在try、catch语句后面天津finally 并不是强制性的
try代码后不能既没有catch也没有finally
-------------------------------------------------------