Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 289|回复: 0

java异常和throw和throws的区别

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-3 17:13:00 | 显示全部楼层 |阅读模式

    之前在编程中编译完成后,运行时,会遇见一些常见的错误,如NullPointerException,ArrayIndexOutOfBoundsException等等

    在今天重新回顾学习了java异常,总结了一些异常的学习,和大家一起分享一下!!!

     

     

    java中异常处理是通过:try、catch、finally、throw和throws这5个关键词来实现的

     

    简单介绍一下:try、catch、finally 3个关键词,java处理异常中,把可能出现的异常代码放入到try块中,由catch来进行捕获异常,而将必须输出的信息,放到的final语句中,因为是否发生异常final中的语句都会输出,除非在catch中使用System.exit(1)。 注:执行System.exit(1),将推出jvm虚拟机

     

    好的,介绍了一下try、catch、finally 3个关键词,接下来说一下throw和throws!!

     

    声明异常——throws

    java中通过关键词throws声明某个方法可能抛出的各种异常类,可以同时声明多个异常类,但需用逗号隔开。

    有两种方式进行处理throws:

    1.使用try-catch捕获异常

    2.使用throws继续声明,如果调用者不打算处理此异常,可以继续通过throws声明异常,让上一级调用者处理异常。main()方法声明的异常将由Java虚拟机来处理

    下面通过两个小Demo给大家看一下:

    处理方式throws1:

    import java.util.Scanner;

    public class DemoOneTest {
    /**
    * 通过try—catch捕获并处理异常
    * @param args
    */
    public static void main(String[] args){
    try {
    divide();
    } catch (Exception e) {
    System.err.println("error:被除数和除数不能为零!!!");;
    e.printStackTrace();
    }
    }

    /**
    * throws进行异常的声名
    * @throws Exception
    */
    public static void divide() throws Exception{
    Scanner input = new Scanner(System.in);
    System.out.print("请输入被除数:");
    int num1 = input.nextInt();
    System.out.println("请输入除数:");
    int num2 = input.nextInt();
    System.out.println(num1/num2);
    }

    }

    输出结果:错误

     

     
    

     

     输出结果:正确

     

     

     




    处理方式throws2:

    import java.util.Scanner;

    public class DemoOneTest {

    /**
    * 通过throws继续声明异常
    * @param args
    * @throws Exception
    */
    public static void main(String[] args) throws Exception {
    divide();
    }

    /**
    * throws进行异常的声名
    * @throws Exception
    */
    public static void divide() throws Exception{
    Scanner input = new Scanner(System.in);
    System.out.print("请输入被除数:");
    int num1 = input.nextInt();
    System.out.println("请输入除数:");
    int num2 = input.nextInt();
    System.out.println(num1/num2);
    }
    }

    输出结果:正确

     

    输出结果:错误

     

     

     

     



    抛出异常——throw

    java中也可以使用throw关键词,来进行自行抛出异常,来处理系统无法自动发现并解决的问题,将它由调用者来进行决解

     

    Demo

     

    Me.class

    /**
    * 使用throw在方法内抛出异常
    */
    public class Me {
    private int age = 0;

    /**
    * 设置年龄
    * @param age
    */
    public void setAge(int age) throws Exception {
    if (age >= 0 && age <= 100) {
    this.age = age;
    }else{
    throw new Exception("年龄必须在1到100之间");
    }
    }

    public int getAge(){
    this.age = age;
    return age;
    }

    /**
    * 信息
    */
    public void print(){
    System.out.println("年龄为:"+this.age);
    }
    }



    DemoTwoTest.class
    /**
    * 捕获throw抛出的异常
    */
    public class DemoTwoTest {
    public static void main(String[] args) {
    Me me = new Me();
    try {
    me.setAge(99);
    } catch (Exception e) {
    e.printStackTrace();
    }
    me.print();
    }
    }

    输出结果:正确
    me.setAge(99);


    输入结果:错误
    me.setAge(101);

     

     

     

    以上是throw和throws的使用和示例代码,接下来说一下throw和throws的区别:

    1.作用不同:throw用于在程序中抛出异常

                         throws用于声明在该方法内抛出了异常

    2.使用位置不同:throw位于方法体内部,用于单独语句使用

                               throws需要跟在方法参数列表后面,不能单独使用

    3.内容不同:throw抛出一个异常对象,且只能有一个

                         throws后面跟异常类,且可以跟多个异常类

     

    异常的分类:

    Throwable类:所有异常类型都是Throwable类的子类,它有两个派生类,分别是Error和Exception

    Error类:表示仅靠程序本身无法恢复的严重错误,如内存溢出、虚拟机错误。应用程序不应该抛出这种类型的对象(一般由虚拟机抛出)

    Exception类:由java应用程序抛出和处理的非重要错误,如数组下标越界、类型转换等。它的不同的子类分别对应不用类型的异样

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-1 11:52 , Processed in 0.060873 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表