throw和throws的区别是啥,各自有什么用处啊?
这是自己写的这个模拟借书软件的代码 希望可以帮到大家
这是自己写的这个模拟借书软件的代码 希望可以帮到大家
2018-05-28
throw是抛出一个异常类的对象(是一个实例),throws抛出异常类
在Java中,把程序的业务实现代码放在try块中定义,所有的异常处理逻辑放在catch块中完成。如果执行try块中的代码出现异常,系统就会自动生成一个异常对象,该异常对象被提交给Java运行时环境,这个过程被称为抛出异常。当Java运行时环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的catch块,则将该异常对象交给该catch块处理,这个过程称为捕获异常,如果Java运行时环境找不到捕获异常的catch,就会传给该方法的调用者。如,main方法调用A方法,A方法调用B方法,B方法调用C方法。。。。,如果在C方法中发生异常,只要抛出了异常没有被捕获,或者捕获异常处理后又重新抛出了异常,那么异常就会传给该方法的调用者(B方法),B方法又传给A方法,A方法传给main方法,如果main方法依然没有处理该异常,JVM会终止该程序,并打印异常的跟踪栈信息
如果抛出IndexOutBoundsException异常,你可以打印一句话“数组越界”,也可以打印异常跟踪栈信息,同样,如果抛出NumberFormatException异常,你也可以打印“数字格式异常”,也可以打印异常跟踪栈信息,看你如何处理
if (scanner.hasNextInt()) {
int id = scanner.nextInt();
if (id>ss.length) {
System.out.println("您输入的书号有误,请重新输入");
}else{
System.out.println("寻找完毕:《"+ss[id-1]+"》的书号是"+id);
}
}else{
boolean b = false;
String name = scanner.next();
for(int i = 1;i<=ss.length; i++){
if (ss[i-1].equals(name)) {
System.out.println("寻找完毕:《"+ss[i-1]+"》的书号是"+(i));
b = true;
break;
}
}
if(!b) {
System.out.println("找不到这本书,请重新输入书名");
}
}
throws用于声明方法中可能抛出的异常
example:public static void main(String[] args) throws Exception
throw用于抛出一个具体的异常类对象,可以单独作为语句使用
如果throw语句抛出的异常是Checked异常,则该throw语句要么处于try块处理,显式捕获该异常,要么放在一个带throws声明抛出的方法中(将该异常交给该方法的调用者处理)
如果throw语句抛出的是Runtime异常,则该语句可以不用放在try块中,也不用放在带throws声明抛出的方法中,程序可以使用try。。catch来捕获处理异常,也可以不用理会该异常,把该异常交给该方法的调用者处理
example:
public class ThrowExamp
{
public static void main(String[] args)
{
try
{
throwChecked(-3);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
throwRuntime(3);
}
public static void throwChecked(int a) throws Exception
{
if(a>0)
{
//自行抛出Exception异常,必须处于try块中,或带throws声明的方法中
throw new Exeption("a 不合法");
}
}
public static void throwRuntime(int a)
{
if(a>0)
{
//自行抛出Runtime异常,既可以显示捕获该异常,也可以不用理会该异常,交给方法调用者处理
throw new RuntimeException("a不合法");
}
举报