什么是异常: 只有程序运行起来才发生叫做异常。错误是编写的时候和运行的时候发生(范围大)。
异常会中断应用程序的运行。( 程序突然终止并将控制交给操作系统 )
伪代码:不运行
try与catch必须一起出现,其中可能会出现异常的语句放在try中间。出现异常后的处理放在catch中间。try之间可以放多条语句。也可以放多个try与catch.,一个try可以对多个catch,但反之不行。
package Chap3;
public class MyExceptiontest {
/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int i=9; try{ i=i/0; }catch(Exception e){ } System.out.println(i);
}
}
---------------------------------------------------------------------我是无敌分割线-----------------------------------------------------
package Chap3;
public class MyExceptiontest {
/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int i=9; try{ i=i/0; }catch(Exception e){ System.out.println(e.getMessage());
getmessage得到异常的地方,并不影响程序的运行 } System.out.println(i);
}
}
----------------------------------------------------我是无敌分割线----------------------------------------------
f inally:try、catch与finally三个一起出现。通常来释放资源,只能出现一次。
t hrow:
t hrows:
----------------------------------------------------我是无敌分割线----------------------------------------------
Exception:是所有异常的根。
RuntimeException :所有异常的基类,运行时异常。
ArithmeticException :有用。
IllegalArgumentException:参数错误异常
ArrayIndexOutOfBoundException:数组下标越界异常
NullPointerException :空指针异常(Java程序90%是这个问题)对象未赋值时或对对象和方法进行了引用就会引发空指针异常。
package Chap3;
public class Myexception { public static void main(String[] args){ String s=new String(); s=null; System.out.println(s.length()); } }//会提示空指针异常。
----------------------------------------------------我是无敌分割线----------------------------------------------
ClassNotFoundException: 类找不到异常(Jdbc会遇到这种问题)。解决方法:没有加载JDBC驱动程序就会出现这种异常。
NumberFormatException:数值转换异常。
IOException:输入输出异常。
FileNotFoundException :找不到文件异常。
EOFException:文件结束异常。
InterruptedException:线程中断。
----------------------------------------------------我是无敌分割线----------------------------------------------
package Chap3;
public class Myexception { public static void main(String[] args){ try{ String s=null; System.out.println(s.length()); int i=9; i=i/0; } catch(NullPointerException e){ System.out.print("空指针异常"); } catch(ArithmeticException e){ System.out.print("算数异常"); } } }//因为s=null已经异常,所以下面的就不再运行。
----------------------------------------------------我是无敌分割线----------------------------------------------
异常处理块的一般模式
try{
// 要监控错误的代码块
……
} catch (Exception e) {
// Exception e 的异常处理程序
……
} finally{
// 在 try 结束前要执行的代码块
……
}
----------------------------------------------------我是无敌分割线----------------------------------------------
多catch异常:
q 当引发异常时,会按顺序来查看每个 catch 语句,并执行第一 个类型与异常类型匹配的语句
package Chap3;
public class Myexception { public static void main(String[] args){ try{ String s=null; System.out.println(s.length()); int i=9; i=i/0; } catch(NullPointerException e){ System.out.print("空指针异常"); } catch(ArithmeticException e){ System.out.print("算数异常"); } } }
----------------------------------------------------我是无敌分割线----------------------------------------------
使用多重 catch 语句时,异常子类一定要位于异常父类之前
try{
…...
} catch(Exception e) {
……
} catch(ArrayIndexOutOfBoundsException e) {
……
}
此程序报错。
----------------------------------------------------我是无敌分割线----------------------------------------------
class NestedException {
public test(String[] s) {
try {
int num = Integer.parseInt(s[0]);
/* 嵌套 try 块。 */
try {
int numValue = Integer.parseInt(s[0]);
System.out.println(“ s[0] + “ 的平方是 " + numValue * numValue);
} catch (NumberFormatException nb) {
System.out.println(“ 不是一个数字! ");
}
} catch (ArrayIndexOutOfBoundsException ne) {
System.out.println(“ 请输入数字!!! ");
}
}
/**main方法 */
public static void main(String[] args) {
NestedException obj = new NestedException();
String [ ] s={“a”,”1”};
obj.test(s);
}//尽量避免嵌套 TRY 的出现。
}
----------------------------------------------------我是无敌分割线----------------------------------------------
Throw 是语句, throws 是子句。
throw用来抛出异常。故意弄出一个错误。创建错误用throw抛出。使用继承“异常”类既可。
自定义异常类的方法:
q 创建用户自定义异常
q 继承 Exception 或其子类
public class SexException extends Exception{ //extends继承就OK
public SexException(){
super (" 性别不合法。 ");
}
}
----------------------------------------------------我是无敌分割线----------------------------------------------
throws用来声明函数可能会抛出哪些异常。
package Chap3;
public class Sextest { public static void main(String[] args) throws SexException { String sex="e"; if (sex.equals("1") || sex.equals("0")){ System.out.println("ok"); }else{ throw new SexException(); } }
}
谁是调用者就要加上throws。指明是谁要抛出异常