异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。
异常不是错误
程序中关键的位置有异常处理,提高程序的稳定性
Java的异常处理是通过5个关键字来实现的
try:尝试,把有可能发生错误的代码放在其中,必须有
catch:捕获,当发生异常时执行
finally:最终,不管是否有异常都将执行
throw:抛出,引发异常
throws:抛出多个,声明方法将产生某些异常
package com.zhangguo.chapter6.d1;
import java.util.Scanner;
public class Exception1 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
//int i=input.nextInt();
int i=Integer.parseInt(input.next());
System.out.println("您输入的是:"+i);
System.out.println("程序结束了");
}
}
异常处理:
package com.zhangguo.chapter6.d1;
import java.util.Scanner;
public class Exception1 {
public static void main(String[] args) {
try {
Scanner input = new Scanner(System.in);
int i = Integer.parseInt(input.next());
System.out.println("您输入的是:" + i);
} catch (Exception exp) {
System.out.println("发生异常了:" + exp.getMessage());
}
System.out.println("程序结束了");
}
}
结果:
finally在任何情况下都将执行,正常时会执行,不正常也会执行
package com.zhangguo.chapter6.d1;
import java.util.Scanner;
public class Exception1 {
public static void main(String[] args) {
try {
Scanner input = new Scanner(System.in);
int i = Integer.parseInt(input.next());
System.out.println("您输入的是:" + i);
} catch (Exception exp) {
System.out.println("发生异常了:" + exp.getMessage());
}finally {
System.out.println("输入结束");
}
System.out.println("程序结束了");
}
}
结果:
1 您输入的是:1 输入结束 程序结束了
如果用户输入是的xyz
//算术异常
ArithmeticExecption
//空指针异常类
NullPointerException
//类型强制转换异常
ClassCastException
//数组负下标异常
NegativeArrayException
//数组下标越界异常
ArrayIndexOutOfBoundsException
//违背安全原则异常
SecturityException
//文件已结束异常
EOFException
//文件未找到异常
FileNotFoundException
//字符串转换为数字异常
NumberFormatException
//操作数据库异常
SQLException
//输入输出异常
IOException
//方法未找到异常
NoSuchMethodException
//抽象方法错误,当应用试图调用抽象方法时抛出
java.lang.AbstractMethodError
//断言错误,用来指示一个断言失败的情况
java.lang.AssertionError
//类循环依赖错误,若检测到类之间循环依赖则抛出该异常
java.lang.ClassCircularityError
//类格式错误
java.lang.ClassFormatError
//错误基类,标识严重程序运行问题,不应被应用程序捕获的反常情况
java.lang.Error
//非法访问错误,违反域或方法的可见性声明
java.lang.IllegalAccessError
//不兼容的类变化错误,当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常
java.lang.IncompatibleClassChangeError
//实例化错误,构造一个抽象类或者接口时抛出该异常
java.lang.InstantiationError
//内部错误
java.lang.InternalError
//链接错误
java.lang.LinkageError
//未找到类定义错误,找不到该类的定义时抛出该错误
java.lang.NoClassDefFoundError
//域(成员变量,字段)不存在错误
java.lang.NoSuchFieldError
//方法不存在错误
java.lang.NoSuchMethodError
//内存不足错误
java.lang.OutOfMemoryError
//堆栈溢出错误,如递归调用的层次太深
java.lang.StackOverflowError
//线程已结束
java.lang.ThreadDeath
//未知错误
java.lang.UnknownError
//未满足的链接错误
java.lang.UnsatisfiedLinkError
//不支持的类版本错误
java.lang.UnsupportedClassVersionError
//验证错误
java.lang.VerifyError
//虚拟机错误
java.lang.VirtualMachineError
//算术条件异常,如整数除零
java.lang.ArithmeticException
//数组索引越界异常
java.lang.ArrayIndexOutOfBoundsException
//数组存储异常,存放非数组声明类型
java.lang.ArrayStoreException
//类型转换异常
java.lang.ClassCastException
//找不到类异常
java.lang.ClassNotFoundException
//克隆不支持异常,如没有实现Cloneable接口
java.lang.CloneNotSupportedException
//枚举常量不存在异常
java.lang.EnumConstantNotPresentException
//根异常
java.lang.Exception
//非法访问异常
java.lang.IllegalAccessException
//非法的监控状态异常
java.lang.IllegalMonitorStateException
//非法的状态异常
java.lang.IllegalStateException
//非法的线程状态异常
java.lang.IllegalThreadStateException
//索引越界异常
java.lang.IndexOutOfBoundsException
//实例化异常
java.lang.InstantiationException
//被中断异常
java.lang.InterruptedException
//数组大小为负值异常
java.lang.NegativeArraySizeException
//属性不存在异常,当访问某个类的不存在的属性时抛出该异常
java.lang.NoSuchFieldException
//方法不存在异常
java.lang.NoSuchMethodException
//空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常
java.lang.NullPointerException
//数字格式异常
java.lang.NumberFormatException
//运行时异常
java.lang.RuntimeException
//安全异常
java.lang.SecurityException
//字符串索引越界异常
java.lang.StringIndexOutOfBoundsException
//类型不存在异常
java.lang.TypeNotPresentException
//不支持的方法异常
java.lang.UnsupportedOperationException
//Jsp页面异常
javax.servlet.jsp.JspException
//JSP引擎解析异常
org.apache.jasper.JasperException
//Servlet异常
javax.servlet.ServletException
//对象已被删除异常
org.hibernate.ObjectDeletedException
常用的异常
package com.zhangguo.chapter6.d1;
public class Exception2 {
public static void main(String[] args) {
try {
System.out.println(div(30,3));
} catch (Exception e) {
//输出异常的堆栈信息
e.printStackTrace();
}
try {
System.out.println(div(3,0));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
//throws 声明方法将可能抛出异常
public static int div(int n1,int n2) throws Exception{
if(n2==0){
//抛出异常
throw new Exception("除数不能为零");
}
return n1/n2;
}
}
运行结果:
public class ArithmeticException extends RuntimeException {
private static final long serialVersionUID = 2256477558314496007L;
/**
* Constructs an {@code ArithmeticException} with no detail
* message.
*/
public ArithmeticException() {
super();
}
/**
* Constructs an {@code ArithmeticException} with the specified
* detail message.
*
* @param s the detail message.
*/
public ArithmeticException(String s) {
super(s);
}
}