throws,throw,try···catch···finally

throws—声明异常

  • 使用throws关键字对外声明该方法有可能发生异常
    这样调用者在调用方法时,就明确地知道该方法有异常,并且必须在程序中对异常进行处理,否则编译无法通过。

格式为
返回值类型 方法名( )或类名 throws Exception1,Exception2·····
:如果有多个异常类,它们之间用逗号分隔

/**
 * throws 声明异常
 */

class Math {
    //定义除法方法
    //在方法后加throws声明该方法可能抛出异常
    public int Division(int i,int j) throws Exception{
        //由于result是int型,所以很有可能出现异常
        int result = i/j;
        System.out.println("i/j= "+result);
        return result;
    }
}

public class throwsDemo {
    public static void main(String[] args) {
        Math math = new Math();
        try
        {
            math.Division(10,2);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("除法错误");
        }
    }
}
  • 类继承代码中要注意,子类在重写父类带 throws 子句的方法时,子类的方法声明中的 throws 子句不能出现父类对应方法的 throws 子句中没有的异常类型
  • main函数也能用throws抛出异常给JVM

try···catch···finally—处理异常

  • 使用try catch 语句来捕获异常并处理

格式为

try {
//把可能引发异常的语句封装在try语句块
//一旦发生异常,那么一个相应的异常对象就会被拋出
    逻辑代码块;
} catch(ExceptionType e) {
//catch 语句就会依据所拋出异常对象的类型进行捕获,并处理
    处理代码块;
} finally{
//finally中的语句不管是否发生异常都会执行
}

:发生异常后,程序会跳过 try 语句块中剩余的语句,转到 catch 语句块后面的第一条语句开始执行

/**
 * try catch finally 捕捉异常
 */

import java.util.Scanner;

public class trycatchDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("-----信息登记表-----");
        String name;
        int age;
        try {
            System.out.println("请输入姓名:");
            name = scanner.next();
            System.out.println("请输入年龄:");
            age = scanner.nextInt();
        } catch(Exception e) {
            e.printStackTrace();
            System.out.println("输入错误,请重新输入");
        }
    }
}

在这里插入图片描述

  • 如果一个 catch 语句的异常类型参数是多个异常类型的父类,那么她可以同时捕捉这几个异常类型
  • finally需要和try联系在一起使用

throw—抛出对象

  • throw 语句用来直接拋出一个异常,后接一个可拋出的异常类对象

格式为throw ExceptionObject
:ExceptionObject 必须是 Throwable 类或其子类的对象

/**
 * throw 抛出异常
 */
import java.util.Scanner;

class userName {
    public boolean namingRule(String username){
        boolean sign =false;
        //用户名要少于8个字符
        if (username.length()<8) {
            for (int i = 0;i<username.length();i++) {
                //获取用户名中的每个字符
                char c = username.charAt(i);
                //用户名只能是字母
                if ((c >= 'a'&& c <= 'z') || (c >= 'A'&&c <= 'Z')) {
                    sign = true;
                } else {
                    //在用户名有字母之外的字符时抛出异常
                    throw new IllegalArgumentException("用户名只能由字母组成");
                }
            }
        } else {
            //IllegalArgumentException
            //非法参数异常,当方法接收到不符合参数列表的参数时,就会报这个异常
            throw new IllegalArgumentException("用户名长度不能多于8位");
        }
        return sign;
    }
}
public class throwDemo {
    public static void main(String[] args) {
        userName user = new userName();
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = scanner.next();
        try {
            boolean sign = user.namingRule(username);
            if (sign) {
                System.out.println("用户名输入正确!");
            }
        } catch (IllegalArgumentException e) {
            System.out.println(e);
        }
    }
}

异常茶话会

一、异常分类

  1. 编译时异常(受控)
    在Java 中,Exception类中除了RuntimeException 类及其子类外都是编译时异常
  2. 运行时异常(非受控)
    RuntimeException 类及其子类运行异常
  3. 自定义异常
    Java中允许用户自定义异常,自定义的异常类继承自Exception则为编译时异常,继承自Runtimeexception则为运行时异常

二、Exception 和 error

  1. 异常Exception可处理,而错误error不可处理

三、新线程

  1. 异常由一条新线程执行,与main函数并非同一线程
  2. 所以异常出现的位置可能与main函数中的代码的位置不对应
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: try catch finally throw throws 是Java中的关键字用于处理异常try用于包含可能会抛出异常的代码块。 catch用于捕获try块中抛出的异常,并进行相应的处理。 finally:无论try块中是否抛出异常finally块中的代码都会被执行。 throw用于手动抛出异常throws:用于声明方法可能会抛出的异常类型。 ### 回答2: trycatchfinallythrowthrows都是Java用于处理异常关键字trytry异常处理语句的开始,用于包裹可能会抛出异常的代码块。在try块中,可以放置可能会出现异常的代码逻辑。 catchcatch用于捕获try块中可能抛出的异常。如果try块中出现了异常,会检查catch块中是否有能够处理该异常的代码块。如果有匹配的catch块,程序会进入该catch块并执行异常处理逻辑。 finallyfinally用于定义无论是否发生异常,都必须执行的代码。即使try块中出现了异常finally块中的代码仍然会被执行。finally块通常用于资源的释放,例如关闭文件或数据库连接。 throwthrow用于手动抛出异常。可以使用throw关键字在代码中显式地抛出某个具体的异常对象。一旦throw语句执行,程序将立即跳转到最近的catch块进行异常处理。 throws:throws关键字用于声明方法可能抛出的异常列表。在方法声明中使用throws关键字,表明该方法可能会引发某些异常,调用该方法的代码需要对其进行异常处理或向上一层抛出。如果方法内的异常没有在catch块中处理,那么会根据throws所声明异常列表传递给该方法的调用者。 总之,try用于尝试执行可能抛出异常的代码块,catch用于捕获和处理异常finally用于定义无条件执行的代码块,throw用于手动抛出异常throws用于声明方法可能抛出的异常列表。这些关键字的使用可以有效地处理异常,提高程序的鲁棒性和可靠性。 ### 回答3: try catch finally throw throws 是Java中的异常处理机制。 try-catch语句用于捕获并处理异常try块中放置可能产生异常的代码,如果产生异常,则由catch块捕获并处理异常catch块中的代码是用于处理异常的,可以在其中编写特定的逻辑来处理异常情况。 finally块是可选的,用于try-catch块之后执行一段无论是否发生异常都会执行的代码。finally块通常用于释放资源或进行清理操作,确保代码执行完毕后资源得到正确的释放。 throw关键字用于在代码中手动引发异常。通过throw语句,我们可以自定义异常并将其抛出,从而通知调用者发生了错误或特定情况。 throws关键字用于声明方法可能抛出的异常类型。在方法声明中使用throws关键字可以告诉调用者需要处理的可能出现的异常类型以便进行适当的异常处理。 总之,try-catch-finally语句用于处理可能发生异常throw用于手动引发异常throws用于方法声明中指定可能抛出的异常类型。异常处理是保证程序健壮性的重要一环,能够更好地应对异常情况,提高代码的可靠性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值