1.throw和throws
public static int score(int math,int chinese) throws Exception {
if(math < 0 || chinese < 0){
throw new Exception();
}
return (math+chinese)/2;
}
从这里看,
throw是在方法体中处理异常的,抛出,这个时候,Exception中也可以设置字符串作为日志, 但是,要配合throws使用
throws是将异常抛给调用者,注意throws是可以直接单独使用的
2. try catch finally
try catch 就是try中是可能出问题的代码,注意,如果出现异常,则到异常出现的位置,终止,直接跳入catch
而finally是catch完了之后处理finally ,但是,finally不会影响catch中的值
如果根据结果看,运行了finally而没运行catch
public static void main(String[] args) {
int[] a = {1,2};
Student s = new Student();
System.out.println("giao(a) = " + giao(a,s).name);
}
public static Student giao(int[] a,Student s){
try {
a[8]=10;
}catch (Exception e){
s.name ="是最后输出的么";
return s;
}finally {
s.name ="不是阿giao了";
}
s.name = "终点";
return s;
}
根据这段代码来分析一下,
显然finally是最后运行的,不然的话,名字应该是最后输出
但是请注意,这里能改变名称,是因为,传的是对象,也就是指针,改变了地址中的值,但是如果是值传递,就没有作用了。上代码
public static void main(String[] args) {
int[] a = {1,2};
System.out.println("giao(a) = " + giao(a));
}
public static int giao(int[] a){
int i = 5;
try {
a[8]=10;
}catch (Exception e){
i++;
return i;
}finally {
i--;
}
return 100;
}
从结果看,这里finally中的i–并没有对返回的i起作用。