throw/throws 关键字

发布时间:2026/10/12 5:50:31
throw/throws 关键字 一、throws 作用throws写在方法声明处用于声明该方法有可能抛出某种异常把异常交给调用这个方法的人去处理。一句话区分throws 是声明异常自己不捕获抛给上层调用者。 和 try-catch 的区别try-catch 是当场捕获处理throws 是甩锅交给调用方处理。二、语法格式修饰符 返回值 方法名(参数列表) throws 异常类名1,异常类名2...{ // 方法体 }多个异常逗号隔开写的是异常类名。三、代码示例public class ThrowsDemo { // 在方法上声明本方法可能抛出算术异常 public static void test() throws ArithmeticException { int a 10; int b 0; int res a / b; // 发生异常不在这里捕获抛给调用者 } public static void main(String[] args) { // 方式1main方法继续throws异常交给JVM不推荐程序直接崩溃 // public static void main(String[] args) throws ArithmeticException // 方式2调用处用try-catch捕获推荐 try { test(); } catch (ArithmeticException e) { System.out.println(捕获到test方法抛出来的除零异常); } } }四、受检异常编译期异常和运行时异常 throws 区别运行时异常RuntimeException 及其子类如空指针、算术异常方法上写 throws 可以省略编译不报错运行才会抛出。受检异常编译异常IOException 等代码必须处理要么 try-catch 捕获要么方法上加 throws 声明否则编译直接报错。示例受检异常必须 throws 或者捕获import java.io.FileReader; import java.io.IOException; public class ThrowsCheckedDemo { // IOException是受检异常必须声明throws或者内部try-catch public static void readFile() throws IOException { FileReader fr new FileReader(test.txt); } public static void main(String[] args) { try { readFile(); } catch (IOException e) { e.printStackTrace(); } } }五、方法重写时 throws 规则重点子类重写父类方法时throws 有严格限制子类抛出的异常不能比父类更大可以抛出更少、更小的异常父类方法没有 throws子类重写时不能抛出受检异常运行时异常不受这条限制。六、throws 注意事项throws 只是声明可能性不会主动产生异常真正异常还是代码执行出错才产生仅仅声明 throws不会自动捕获和修复 bug调用带有 throws 的方法调用者二选一继续往上 throws使用 try-catch 捕获处理不要在 main 方法滥用 throws会让异常直接交给 JVM程序直接终止。七、throws 与 throw 前置对比下一节学 throwthrows方法声明上声明可能抛出异常后跟异常类可多个throw方法体内手动创建并抛出异常对象后跟异常对象一次只能抛一个。八、核心口诀throws 写在方法头声明异常往外丢 调用方要做选择要么捕获要么丢 编译异常强制管运行异常随便留 子类重写有约束异常不能放大流。Java 学习笔记throw 关键字一、throw 作用throw在方法内部手动创建一个异常对象主动抛出这个异常。适用场景业务逻辑不符合预期手动抛出异常比如传入参数非法。二、语法格式throw new 异常类名(异常提示信息);throw 后面必须是异常对象一次只能抛出 1 个异常。三、代码示例public class ThrowDemo { public static void checkAge(int age) { if(age 0 || age 120){ // 手动创建异常对象并抛出 throw new RuntimeException(年龄不合法必须在0~120之间); } System.out.println(年龄校验通过); } public static void main(String[] args) { try { checkAge(-10); } catch (RuntimeException e) { System.out.println(捕获异常 e.getMessage()); } } }四、throw throws 组合使用手动 throw 受检异常方法上必须用 throws 声明否则编译报错public class ThrowThrowsDemo { public static void test() throws Exception { throw new Exception(手动抛出编译期异常); } public static void main(String[] args) { try { test(); } catch (Exception e) { e.printStackTrace(); } } }五、throw 关键点throw 是主动抛出代码执行到这里立刻抛出后面代码不再执行抛出受检异常必须配合 throws 声明或者内部 try-catch抛出运行时异常不需要 throws 声明throw 一次只能抛出一个异常对象六、throws 和 throw 对比表关键字书写位置作用后跟内容数量throws方法声明后面声明方法可能出现异常异常类名逗号分隔多个多个throw方法体内部主动抛出一个异常实例new 出来的异常对象只能 1 个七、易错点throw 不要和 throws 混淆throw 抛出异常后本行之后代码不会执行业务校验场景大量使用 throw自定义异常也会用到。八、核心口诀throw 写在方法内手动抛出异常体 一旦抛出就终止后续代码不执行 受检异常要声明throws 配套写方法。