Java学习记录7 异常
Posted chendejian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习记录7 异常相关的知识,希望对你有一定的参考价值。
1. 异常机制
-
异常(Exception):意思是例外。软件程序在运行过程中遇到的例外。
-
格式:try{}catch(Exception e){e.printStackTrace();}
-
Java是采用面向对象的方式来处理异常的。处理过程:
-
抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。
-
捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法来开始追溯,直到找到相应的异常处理代码为止。
-
-
异常的分类:
-
所有异常的根类:Throwable。
-
Error:自己处理不了的问题,需要重启虚拟机。
-
Exception:程序本省能够处理的异常。是所有异常类的父类,其子类对应了各种各样可能出现的异常事件。
-
Checked Exception已检查异常:编译器需要处理。编译时通不过。方法1:try catch,方法2:throws抛出
try{
语句1;
语句2:
}catch(Exception1 e){
}catch(Exception2 e/*异常类型*/){
}finally{
//是否遇到异常,这里都会最后执行。
}
如果语句1有异常,语句2就不执行了,直接执行相应的异常处理语句,最后执行finally。
//方法1:捕获异常try catch
FileReader reader = null;
try {
reader = new FileReader("d:/bb.txt");
char c1 = (char) reader.read();//读文件的一个字符
System.out.println(c1);
} catch (FileNotFoundException e) {//子类异常在父类前面
e.printStackTrace();//打印异常信息
} catch(IOException e){
e.printStackTrace();
}finally{
try {
if(reader != null)
{
reader.close();
}
} catch (IOException e) {
?
e.printStackTrace();
}
}
方法2:声明异常throws抛出,谁调用谁处理
public static void main(String[] args) throws IOException /*抛給了JRE*/{
readMyFile();
}
?
public static void readMyFile() throws IOException {
FileReader reader = null;
reader = new FileReader("d:/bb.txt");
char c1 = (char) reader.read();// 读文件的一个字符
System.out.println(c1);
?
if (reader != null) {
reader.close();
}
} -
Runtime Exception(Unchecked Exception)运行时异常:编译器不需要处理。逻辑判断处理来避免这些异常。
int a = 0;
int b = 1;
if(a != 0)
{
System.out.println(b/a);
}
//java.lang.NullPointerException 空指针异常
String str = null;
if(str != null)
{
System.out.println(str.length());
}
-
-
手动抛出异常
-
自定义异常:如果继承Exception类,则为受检查异常,必须对其进行处理。如果不想处理,可以让自定义异常类继承运行时异常RuntimeException类。
-
alt+shift+s:弹出Source下拉框
-
public static void main(String[] args) {
Person p = new Person();
p.setAge(-10);
}
?
class Person{
private int age;
?
public int getAge() {
return age;
}
?
public void setAge(int age) {
if(age < 0){
try {
throw new IllegaAgelException("年龄不能为负数");
} catch (IllegaAgelException e) {
e.printStackTrace();
}
}
this.age = age;
}
}
class IllegaAgelException extends Exception{
public IllegaAgelException(){
}
public IllegaAgelException(String msg){
super(msg);
}
} -
以上是关于Java学习记录7 异常的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段
201621123010《Java程序设计》第10周学习总结