什么是异常: 只有程序运行起来才发生叫做异常。错误是编写的时候和运行的时候发生(范围大)。
异常会中断应用程序的运行。( 程序突然终止并将控制交给操作系统 )
伪代码:不运行
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。指明是谁要抛出异常