您的位置:首页 > 编程语言 > Java开发

05 JAVA 异常

2015-07-28 00:21 423 查看
Something to be noticed:

int a = null; //错误

非final的类都可以被继承

在Eclipse环境下,我们可以使用command+鼠标组合来进入某个类的源代码。对了,outline是个好工具。

JAVA 5.0之后加入的新特性:

Integer a = 1000 //编译器会自动判断并执行"Integer a = new Integer(1000)

int a = new Integer(1000) //int a = (new Integer(1000)).intValue();

Integer b1 = 123 //如果数值在-128-127这个范围之间,会去查看cache中有没有之前打包过的实例,有则直接返回

Integer b2 = 123

b1 == b2 //true

JAVA 8.0 增加的新特性稍后再好好看吧~

===========================================================================================

一旦一个程序运行中出现异常,程序就会停止运行,此时我们可以使用java.lang.Exception来处理异常

异常:

运行期间发生的错误,而不是编译器编译程序时出现的错误(javac),好的程序可以在异常发生的时候提供处理这些错误的方法,使得程序不会因为异常的发生而停止或者产生不可预见的结果

顺便记个无关的东西:

buffer flow(从上向下存储数据)->return address->jump to the code



Throwable:可以被抛出的异常

Error:JVM出错,程序处理不了

Excepion:可以处理的错误

- RuntimeException:程序的瑕疵或者逻辑错误,运行时无法修复,无需显式声明抛出,可以捕获处理也可以不捕获处理,例如IndexOutOfBoundsException,ArithmeticException

- checked exception:checked异常都是可以被处理的,必须catch,程序才可以走,任何方法后面有throws 异常的都要捕获,如果当前方法不知道如何处理,则可以抛出给上一级捕获,例如CloneNotSupportedException,ParseException,IOException

- 抛出异常

处理不了的异常都交给上级

void f() throws 异常1,异常2,... {

/*if(cond) {

throw new 异常1(“添加信息,就是getMessage方法会显示的信息”)

}

...*/

}

我们可以不处理该异常,而把异常交给上一层,上一层也可以直接抛出异常不处理而交给上一层,比如:

void f1() throws 异常1,异常2,... {

f();

...

}

void f2() {

try {

f1();

}

catch (异常1) {

异常处理

}

catch...

}

- 捕获异常

try {

} catch (异常 变量名) {

处理异常;

}

finally {

}

一个try可以跟多个catch捕获多个异常(小->大)

主要方法:

- getMessage() 返回throwable的具体信息

- printStackTrace() 打印追踪错误

异常发生时,程序会终止try正在运行的程序,根据获取的异常的类型去执行相应的catch代码段,而finally是无论是否发生异常都会执行,进行资源的清除工作,使程序可以恢复统一的状态,比如打开文件执行某个操作,无论成功与否我们都要关闭打开的文件

- 自定义异常

- 继承java.lang.Exception或者它的子类

- 方法声明部分用throws语句声明该方法可能抛出的异常

- 在方法适当位置生成自定义异常的实例,用throw语句抛出

class SelfDefExcep extends Exception {
private String id;
public SelfDefExcep(String message, String id) {
super(message);
this.id = id;
}

public String getId() {
return id;
}
}

public class TestException {
public static void register(String id) throws SelfDefExcep {
System.out.println("你输出的ID号:"+id);
if(id.length() < 6) {
throw new SelfDefExcep("id长度不能少于6", id);
}
System.out.println("合格的ID号");
}

public static void manage() {
try{
register("11111");
} catch(SelfDefExcep sde) {
System.out.println(sde.getMessage());
}
}

public static void main(String[] args) {
manage();
}
}
结果:

你输出的ID号:11111

id长度不能少于6
- 与继承之间的关系

重写方法需要抛出与原方法所抛出异常类型一致异常或者不抛出异常,不能抛出新的异常

Reference:

1. 马士兵JAVA基础视频
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: