2019-03-09 Java Exception
2019-03-09 本文已影响0人
yangsunior
异常的分类:
1. 编译时被检测异常: 只要是Exception和其子类都是,除了特殊子类RuntimeException体系。
这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式。
这样的问题都可以针对性的处理。
2. 编译时不检测异常(运行时异常): 就是Exception中的RuntimeException和其子类。
这种问题的发生让无法功能继续,运算无法进行,更多是因为调用者的原因导致的而或者引发了内部状态的改变导致的。
这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止,让调用者对代码进行修正。
所以自定义异常时,要么继承Exception。要么继承RuntimeException。
- throws 和throw的区别。
-
throws使用在函数上,throw使用在函数内。
-
throws抛出的是异常类,可以抛出多个,用逗号隔开。
throw抛出的是异常对象。
对于事先预知的异常,可以DIY函数捕获。
class ExceptionDemo
{
public int method(int[] arr,int index)
{
if(arr==null)
throw new NullPointerException("数组的引用不能为空!");
if(index>=arr.length)
{
throw new ArrayIndexOutOfBoundsException("数组的角标越界啦,哥们,你是不是疯了?:"+index);
}
if(index<0)
{
throw new ArrayIndexOutOfBoundsException("数组的角标不能为负数,哥们,你是真疯了!:"+index);
}
return arr[index];
}
}
class AJavaTest
{
public static void main(String[] args)
{
int[] arr = new int[3];
ExceptionDemo d = new ExceptionDemo();
int num = d.method(null,-30);
num = d.method(arr,-30);
num = d.method(arr,30);
System.out.println("num="+num);
System.out.println("over");
}
}
num = d.method(null,-30);
-> 数组的引用不能为空!
num = d.method(arr,-30);
-> 数组的角标不能为负数,哥们,你是真疯了!:-30
num = d.method(arr,30);
-> 数组的角标越界啦,哥们,你是不是疯了?:30
自定义异常类
class FuShuIndexException extends Exception
{
FuShuIndexException()
{}
FuShuIndexException(String msg)
{
super(msg);
}
}
class ExceptionDemo
{
public int method(int[] arr,int index) throws NullPointerException, FuShuIndexException
{
if(arr==null)
throw new NullPointerException("数组的引用不能为空!");
if(index>=arr.length)
{
throw new ArrayIndexOutOfBoundsException("数组的角标越界啦,哥们,你是不是疯了?:"+index);
}
if(index<0)
{
throw new FuShuIndexException("角标变成负数啦!!");
}
return arr[index];
}
}
class AJavaTest
{
public static void main(String[] args) throws FuShuIndexException
{
int[] arr = new int[3];
ExceptionDemo d = new ExceptionDemo();
int num = d.method(null,-30);
num = d.method(arr,-30);
System.out.println("num="+num);
System.out.println("over");
}
}
num = d.method(null,-30);
-> 数组的引用不能为空!
num = d.method(arr,-30);
-> 数组的角标不能为负数,哥们,你是真疯了!:-30