1、Java异常
Java运行时发生异常可以分为两类:
Error
:JVM
系统内部错误、资源耗尽等问题产生的异常。Exception
:编程错误或偶然的外在因素导致的。
2、常见的异常
2.1 RuntimeException
运行异常
2.2 IOException
3、异常捕获
3.1
如果知道try
中是何种异常,可以用该类异常作为catch
中的参数(例如:ArithmeticException
),也可以使用其父类(例如:RuntimeException
)作为其catch
中的参数。但使用与该类无关的异常,catch
将不会执行。
try{
}catch(ExceptionName1 e){
}catch(ExceptionName2 e){
}finally {
}
举例:
try {
int j = 10 / 0;
}
catch (ArithmeticException exception){
System.out.println("0. " + exception.getMessage());
} catch (NullPointerException ex){
System.out.println("1. " + ex.getMessage());
}catch (ClassCastException e){
System.out.println("2. " + e.getMessage());
}
catch (RuntimeException e){
System.out.println("3. " + e.getMessage());
}
System.out.println("end....");
3.2
调用异常对象的成员变量的方法:
getMessage()
:得到有关异常的信息。printStackTrace()
:用来跟踪异常事件发生时执行堆栈的内容。
public static void main(String[] args) {
int[] a = new int[]{1, 2, 3, 4};
try {
for (int i = 0; i < 6; i++){
System.out.println(a[i]);
}
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("数组下标越界异常:" + e.getMessage());
}finally {
System.out.println("数组下标可能越界。。。");
}
}
上述异常,在不捕获的前提下,Java能够自己捕获,并且编译通过。
下面的必须捕获,否则报错。
4、IOException
异常捕获
自定义异常
编写应用程序EcmDef.java,接收命令行的两个参数,要求不能输入负数,计算两数相除。
对缺少命令行参数(ArrayIndexOutOfBoundsException)、
除0(ArithmeticException)及输入负数(EcDef 自定义的异常)进行异常处理。
提示:
(1)在主类(EcmDef)中定义异常方法(ecm)完成两数相除功能。
(2)在main()方法中使用异常处理语句进行异常处理。
(3)在程序中,自定义对应输入负数的异常类(EcDef)。
(4)运行时接受参数 java EcmDef 20 10
//args[0]=“20” args[1]=“10”
(5)Interger类的static方法parseInt(String s)将s转换成对应的int值。如int a=Interger.parseInt(“314”); //a=314;
public class EcDef extends RuntimeException {
private static final long serialVersionUID = 1L;
public EcDef(){
}
public EcDef(String msg){
super(msg);
}
}
public class EcmDef {
public static void main(String[] args) {
try {
int i = Integer.parseInt(args[0]);
int j = Integer.parseInt(args[1]);
int ret = ecm(i ,j);
System.out.println("result = " + ret);
} catch (NumberFormatException e) {
System.out.println("输入的参数不能转换为INT型。。。");
e.printStackTrace();
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("输入的参数个数不足。。。");
}catch (ArithmeticException e){
System.out.println("除数不能为0。。。");
}catch (EcDef e){
System.out.println("运算的数不能为负数。。");
e.printStackTrace();
}
}
public static int ecm(int i, int j){
if(i < 0 || j < 0){
throw new EcDef("不能输入负数");
}
return i / j;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)