throws:此方法不处理异常,调用方法进行处理,可能会存在异常,然后向上抛出,throws在方法参数列表后面声明此方法可能出现异常,谁调用此方法,先调用处根据情况对象是否处理。
throw:在方法体内,抛出异常对象,抛出后,不再向下执行,一般在方法不符合业务逻辑要求时,可以主动使用throw抛出异常,告诉调用方法程序出现问题。
throw和throws的区别:
区别:1.throws一般在方法声明后,throw一般在方法体中。
2.throws可以跟多个异常类名,用逗号隔开,throw只能抛出一个异常对象名。
3.throws:表示抛出异常,由该方法的调用者来处理,throw:表示抛出异常,由该方法体内的语句来处理。
4.throws: throws表示有出现异常的可能性,并不一定出现这些异常, throw:throw则是抛出了异常,执行throw一定出现了某种异常.
public class Demo1 {
public static void main(String[] args) {
// try {
// test1();
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
// }
// public static void test1() throws UnsupportedEncodingException {
test2();
}
public static void test2() throws UnsupportedEncodingException {
"abc".getBytes("utf-8");
}
// throws:此方法不处理异常,调用方法进行处理,可能会存在异常,向上抛出
// throws在方法参数列表后面声明此方法可能出现异常,谁调用此方法,在调用处根据情况对象异常是否处理
// main方法已经是最顶层了,在抛给的话,会抛给虚拟机,此时需要try,catch进行处理,虚拟机不会对异常进行处理
// Expetion体系向下分为:1.编译期异常(检查异常)没有继承RuntimeExpetion,编译期就强制进行处理
// 2.运行期异常,继承RuntimeExpetion,在编译期期间,不需要强制处理
test1();
}
public static void test1() {
test2();
System.out.println("aaaaaa");
}
public static void test2(){
try {
"abc".getBytes("gbk");//utf-8
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}finally {
System.out.println("bbbbbb");
}
}
}
2.throws在方法列表中:
方法重写的要求: 1.返回值、方法名、参数一致 2.访问权限>=父类方法 3.声明异常<=父类方法
注意:不符合规定,系统会自动报错
public class Demo4 {
public Demo4() throws UnsupportedEncodingException {
}
public static void main(String[] args) {
try {
scoreSearch(101);
System.out.println(scoreSearch(96));
} catch (day13.scoreSearchExpetion scoreSearchExpetion) {
scoreSearchExpetion.printStackTrace();
}
}
public static char scoreSearch(int score) throws scoreSearchExpetion {
if(score>=101||score<0){
throw new scoreSearchExpetion("分数输入错误");
}
if (score >= 90 || score <= 100) {
return 'A';
}
if (score >= 80 || score <= 89) {
return 'B';
} else {
return 'c';
}
}
3.自定义异常
●
自定义异常就是自己定义的异常类,也就是API中的标准异常类的直接或间接的。
子类
●
作用:用自定义异常标记业务逻辑的异常,避免与标准异常混淆。
●
自定义异常类
●
基本语法
public class 异常类名 extends Exception/RuntimeException{
public 异常类名(String msg){
super(msg);
}
}
●
自定义异常类中往往不写其他方法,只重载需要使用的构造方法
●
继承Exception,在方法中使用throw抛出后,必须在方法中try-catch或
throws抛出
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
//分数不正确是抛出此异常
//自定义异常:继承Expetion
public class scoreSearchExpetion extends Exception {
public scoreSearchExpetion(String message) {
super(message);
System.out.println("分数输入错误");
}
}
注意:1.自定义异常必须继承Expetion。
2.建议把备注说明。