当前位置: 技术问答>java相关
抛出throw异常和捕捉catch异常的问题?
来源: 互联网 发布时间:2015-03-27
本文导语: 最近学到JAVA的异常处理,有三个问题搞不懂,请教一下大家。 一。书上说抛出THROW异常是为了让调用这个方法的方法来处理异常情况。如下代码所示: static void arraytest(int i) *throws ArrayIndexOutOfBoundsException ...
最近学到JAVA的异常处理,有三个问题搞不懂,请教一下大家。
一。书上说抛出THROW异常是为了让调用这个方法的方法来处理异常情况。如下代码所示:
static void arraytest(int i)
*throws ArrayIndexOutOfBoundsException
{
写一个数组下标溢出错误
}
public static void main(String args[])
{
try
{
arraytest(i);//调用这个有错误的方法
}
catch(ArrayIndexOutOfBoundsException e)
{
输出提示
}
}
这段代码我运行了一下,发现要不要带*号的那条THROWS抛出异常,运行结果都一样的。请问这个抛出THROW异常到底有什么实际的意义啊?我不用它,也可以用try_cacth_finally来处理嘛?
二。如何写用户自定义的异常?
三。怎么处理自定义的异常啊?
二、三题请用具体的代码举个例子,谢谢!!
一。书上说抛出THROW异常是为了让调用这个方法的方法来处理异常情况。如下代码所示:
static void arraytest(int i)
*throws ArrayIndexOutOfBoundsException
{
写一个数组下标溢出错误
}
public static void main(String args[])
{
try
{
arraytest(i);//调用这个有错误的方法
}
catch(ArrayIndexOutOfBoundsException e)
{
输出提示
}
}
这段代码我运行了一下,发现要不要带*号的那条THROWS抛出异常,运行结果都一样的。请问这个抛出THROW异常到底有什么实际的意义啊?我不用它,也可以用try_cacth_finally来处理嘛?
二。如何写用户自定义的异常?
三。怎么处理自定义的异常啊?
二、三题请用具体的代码举个例子,谢谢!!
|
1.throw和throws的区别在于,throw用于抛出异常,throws用于再抛出。抛出很好理解,就不解释了,再抛出的意思是,对于方法体内的异常,不想在该方法体内处理,就再次抛出,让调用他的方法来处理。
在你所举的例子中,之所以看不到加与不加throws的区别,因为你的方法
static void arraytest(int i)所抛出的是runtimeException,而且在MAIN方法中CATCH了。
试试看抛出一条IOException,如果在static void arraytest(int i)中没有catch,也不用throws再抛出的话,编译都通不过。
2.关于写和处理自定义异常,书上一般都有例子的,实在找不到再说吧
在你所举的例子中,之所以看不到加与不加throws的区别,因为你的方法
static void arraytest(int i)所抛出的是runtimeException,而且在MAIN方法中CATCH了。
试试看抛出一条IOException,如果在static void arraytest(int i)中没有catch,也不用throws再抛出的话,编译都通不过。
2.关于写和处理自定义异常,书上一般都有例子的,实在找不到再说吧
|
正是如此,你看一下throws的位置也明白了,throws是跟在方法名后的,说明是这个方法要抛出给其它方法处理的违例。而如果你在方法内要抛出一个违例,用throw new Exception()句子。
至于二三题,很简单的一个例子是 throw new Exception("例子错误");
你catch到它后,可以用 ex.getMessage()得到这个字串。
或是你自定义一个伟例,如
class myException extends Exception
{
public myException(String msg){
super(msg);
}
}
这是一个最简单的违例,如果你想加入其它信息什么的,就扩充它。
|
static void arraytest(int i)
*throws ArrayIndexOutOfBoundsException
{
try
{
写一个数组下标溢出错误
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("err in function");
}
}
public static void main(String args[])
{
try
{
arraytest(i);//调用这个有错误的方法
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("err out function");
}
}
你再试一下,看看有什么不同,就知道该怎么用了。
*throws ArrayIndexOutOfBoundsException
{
try
{
写一个数组下标溢出错误
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("err in function");
}
}
public static void main(String args[])
{
try
{
arraytest(i);//调用这个有错误的方法
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("err out function");
}
}
你再试一下,看看有什么不同,就知道该怎么用了。
|
语句throws描述本方法有可能会抛出异常。
"You do not need to handle or declare runtime exceptions or errors."
意思是你不需要定义活处理运行时异常,JVM会替你做的
"You do not need to handle or declare runtime exceptions or errors."
意思是你不需要定义活处理运行时异常,JVM会替你做的
|
the key is the concept of "unchecked". You just throw a unchecked exception. therefore, you do not need to add Throws clause after your method name. If you throw a checked exception, you must add Throws clause after your method name.