异常总结
什么是异常:导致程序出错,中断的原因。
常见异常:数组下标越界,空指针异常,文件不存在,栈溢出,值为负(取随机数),强制类型转换。
异常的分类:
运行时异常:
数组下标越界,空指针异常,
下标越界:
int array[]=new int [10];
array[10]=10;
强制类型转换:
Object stu=new Student();
Teacher tc=(Teacher)stu;
Student 和 Teacher两个类之间没有继承关系,不能进行强制类型转换
UNStudent stu=new UNStudent ();
Student st=(Student)stu;
两个类之间有继承关系,可以进行强制类型转换
值为负:
java.util.Random rd=new java.util.Random(); //产生一个随机数
rd.nextInt(-1);
栈溢:
死循环或无限递归
public static void main(String []args){
对象.show(); //无限递归导致系统栈溢
}
public void show(){
...
}
出现运行时异常时,程序可以继续进行。
强制性异常:
File temfile=new File("");
temfile.createNewFile();
出现强制性异常时,程序终止。
异常的处理机制:
try catch处理机制
try{
可能出现问题的代码
如果没出现问题,则向下执行。
}catch{
出现问题时执行的代码
}
如: try{
temfile.createNewFile();
System.out.println("文件已创建");
}catch{
System.out.println("文件创建失败");}
throws 处理机制
如果有多个异常,可以用多个catch来捕获问题
try{
可能出现问题的代码
如果没出现问题,则向下执行。
}catch{
出现问题时执行的代码
}catch{
...
}
try{
temfile.createNewFile(); //a问题出错
Robot rb=new Robot(); //b问题出错
}catch(a){
System.out.println("文件创建失败"); //a出问题时执行的代码
}catch(b){
... //b出问题时执行的代码
}
如果a问题出错,则跳过后面的代码执行第一个catch
也可以对异常的父类进行捕获
try{
temfile.createNewFile(); //a问题出错
Robot rb=new Robot(); //b问题出错
}catch(Exception ef){
ef.printStackTrace(); //让异常对象ef打印出出错原因
...
}
finally语句:不管代码是否出现异常,都会执行的代码
try{
...
}catch{
...
}finally{
...
}
注:try,catch,finally均不能单独使用,try可以和catch,finally组合使用,catch可以有多个,而finally最多有一个。
throws处理机制:
throws抛出异常,当一个程序出现一个异常时,不知道怎么处理,使用throws,将异常抛到它的调用者那里。
throws与throw的区别:
throws用来声明一个方法中可能出现异常的所有信息,而throw用来抛出一个具体的异常对象。
在某种条件下抛出异常
public void test() throws Exception{
...
if(){
throw new MyException();
}
}
***将异常转型
public void test() throws Exception{
...
try{
...
}catch(Exception e){
...
throw new MyException();
}
}
异常信息的分析与程序调试
出现异常时:
了解异常的类型 (在jdk中查找)
找到异常的位置
分析出错原因
改错
方法调用:A->B->C->D
异常向上传递:main()<-A<-B<-C<-D(在D中出现异常);
抛出异常的位置:
用System.out.print()进行判断。
自己写软件时使用 try catch处理异常,而在写第三方插件时用throws,将异常抛给使用者。
什么是异常:导致程序出错,中断的原因。
常见异常:数组下标越界,空指针异常,文件不存在,栈溢出,值为负(取随机数),强制类型转换。
异常的分类:
运行时异常:
数组下标越界,空指针异常,
下标越界:
int array[]=new int [10];
array[10]=10;
强制类型转换:
Object stu=new Student();
Teacher tc=(Teacher)stu;
Student 和 Teacher两个类之间没有继承关系,不能进行强制类型转换
UNStudent stu=new UNStudent ();
Student st=(Student)stu;
两个类之间有继承关系,可以进行强制类型转换
值为负:
java.util.Random rd=new java.util.Random(); //产生一个随机数
rd.nextInt(-1);
栈溢:
死循环或无限递归
public static void main(String []args){
对象.show(); //无限递归导致系统栈溢
}
public void show(){
...
}
出现运行时异常时,程序可以继续进行。
强制性异常:
File temfile=new File("");
temfile.createNewFile();
出现强制性异常时,程序终止。
异常的处理机制:
try catch处理机制
try{
可能出现问题的代码
如果没出现问题,则向下执行。
}catch{
出现问题时执行的代码
}
如: try{
temfile.createNewFile();
System.out.println("文件已创建");
}catch{
System.out.println("文件创建失败");}
throws 处理机制
如果有多个异常,可以用多个catch来捕获问题
try{
可能出现问题的代码
如果没出现问题,则向下执行。
}catch{
出现问题时执行的代码
}catch{
...
}
try{
temfile.createNewFile(); //a问题出错
Robot rb=new Robot(); //b问题出错
}catch(a){
System.out.println("文件创建失败"); //a出问题时执行的代码
}catch(b){
... //b出问题时执行的代码
}
如果a问题出错,则跳过后面的代码执行第一个catch
也可以对异常的父类进行捕获
try{
temfile.createNewFile(); //a问题出错
Robot rb=new Robot(); //b问题出错
}catch(Exception ef){
ef.printStackTrace(); //让异常对象ef打印出出错原因
...
}
finally语句:不管代码是否出现异常,都会执行的代码
try{
...
}catch{
...
}finally{
...
}
注:try,catch,finally均不能单独使用,try可以和catch,finally组合使用,catch可以有多个,而finally最多有一个。
throws处理机制:
throws抛出异常,当一个程序出现一个异常时,不知道怎么处理,使用throws,将异常抛到它的调用者那里。
throws与throw的区别:
throws用来声明一个方法中可能出现异常的所有信息,而throw用来抛出一个具体的异常对象。
在某种条件下抛出异常
public void test() throws Exception{
...
if(){
throw new MyException();
}
}
***将异常转型
public void test() throws Exception{
...
try{
...
}catch(Exception e){
...
throw new MyException();
}
}
异常信息的分析与程序调试
出现异常时:
了解异常的类型 (在jdk中查找)
找到异常的位置
分析出错原因
改错
方法调用:A->B->C->D
异常向上传递:main()<-A<-B<-C<-D(在D中出现异常);
抛出异常的位置:
用System.out.print()进行判断。
自己写软件时使用 try catch处理异常,而在写第三方插件时用throws,将异常抛给使用者。