throws 与 throw

简介: /* * 有些时候,我们是可以对异常进行处理的,但是又有些时候,我们根本就没有权限去处理某个异常。 * 或者说,我处理不了,我就不处理了。 * 为了解决出错问题,Java针对这种情况,就提供了另一种处理方案:抛出。

/*
* 有些时候,我们是可以对异常进行处理的,但是又有些时候,我们根本就没有权限去处理某个异常。
* 或者说,我处理不了,我就不处理了。
* 为了解决出错问题,Java针对这种情况,就提供了另一种处理方案:抛出。
*
* 格式:
*    throws 异常类名
*    注意:这个格式必须跟在方法的括号后面。
*
* 注意:
*    尽量不要在main方法上抛出异常(因为这样就没有意义了)。
*    但是我讲课为了方便我就这样做了(将来实际开发中是弹出页面)。
*
* 小结:
*    编译期异常的抛出,将来调用者必须处理。
*    运行期异常的抛出,将来调用可以不用处理,也可以处理(像处理编译期异常那样处理)。。
*/

示例代码如下:

 1 package cn.itcast_05;
 2 
 3 import java.text.ParseException;
 4 import java.text.SimpleDateFormat;
 5 import java.util.Date;
 6 
 7 /*
 8  * 有些时候,我们是可以对异常进行处理的,但是又有些时候,我们根本就没有权限去处理某个异常。
 9  * 或者说,我处理不了,我就不处理了。
10  * 为了解决出错问题,Java针对这种情况,就提供了另一种处理方案:抛出。
11  * 
12  * 格式:
13  *         throws 异常类名
14  *         注意:这个格式必须跟在方法的括号后面。
15  * 
16  * 注意:
17  *         尽量不要在main方法上抛出异常(因为这样就没有意义了)。
18  *         但是我讲课为了方便我就这样做了(将来实际开发中是弹出页面)。
19  * 
20  * 小结:
21  *         编译期异常的抛出,将来调用者必须处理。
22  *         运行期异常的抛出,将来调用可以不用处理,也可以处理(像处理编译期异常那样处理)。。
23  */
24 public class ExceptionDemo {
25     public static void main(String[] args) {
26         System.out.println("今天天气很好");
27         try {
28             method(); // 调用者也可以继续再把异常抛出给main函数,即把异常抛给虚拟机了,虚拟机会进行异常默认处理,同时将程序停止运行,可是这个方案这不是我想要的!
29         } catch (ParseException e) {
30             e.printStackTrace();
31         }
32         System.out.println("但是就是不该有雾霾");
33 
34         method2(); // 运行期异常的抛出,将来调用可以不用处理,也可以处理(像处理编译期异常那样处理)。
35     }
36 
37     // 运行期异常的抛出(其实运行期异常是不需要抛出的,但是为了演示我依然抛出来,尽管我抛出来了,你调用者可以处理也可以不处理)
38     public static void method2() throws ArithmeticException {
39         int a = 10;
40         int b = 0;
41         System.out.println(a / b);
42     }
43 
44     // 编译期异常的抛出
45     // 在方法声明上抛出,是为了告诉调用者,你注意了,调用这个方法时可能会有问题,又因为是编译期异常,所以调用者必须要处理,否则编译通不过。
46     public static void method() throws ParseException {
47         String s = "2014-11-20";
48         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
49         Date d = sdf.parse(s); // 编译期异常,可以不在方法上进行声明,直接用try...catch对该句进行处理;也可以在方法声明上抛出异常声明,让调用者去用try...catch进行处理。
50         System.out.println(d);
51     }
52 }
程序运行结果为:
今天天气很好 java.text.ParseException: Unparseable date:
"2014-11-20" at java.base/java.text.DateFormat.parse(DateFormat.java:388) at cn.itcast_05.ExceptionDemo.method(ExceptionDemo.java:49) at cn.itcast_05.ExceptionDemo.main(ExceptionDemo.java:28) 但是就是不该有雾霾 Exception in thread "main" java.lang.ArithmeticException: / by zero at cn.itcast_05.ExceptionDemo.method2(ExceptionDemo.java:41) at cn.itcast_05.ExceptionDemo.main(ExceptionDemo.java:34)

/*
* throw:如果在功能方法内部出现了异常情况,程序不能继续运行,需要进行跳转时,我们可以把该异常抛出,这个时候的抛出的是该异常的对象。
*
* throws和throw的区别(面试题)
  throws
    用在方法声明后面,跟的是异常类名,
    可以跟多个异常类名,用逗号隔开,
    表示抛出异常,由该方法的调用者来处理,
    throws表示出现异常的一种可能性,并不一定会发生这个异常。
  throw
    用在方法体内,跟的是异常对象名,
    只能抛出一个异常对象名,
    表示抛出异常,由方法体内的语句处理,
    throw则是抛出了异常,执行throw则一定抛出了某种异常。
*
*/

示例代码如下:

 1 package cn.itcast_06;
 2 
 3 /*
 4  * throw:如果在功能方法内部出现了异常情况,程序不能继续运行,需要进行跳转时,我们可以把该异常抛出,这个时候的抛出的是该异常的对象。
 5  * 
 6    throws和throw的区别(面试题)
 7       throws
 8           用在方法声明后面,跟的是异常类名,
 9           可以跟多个异常类名,用逗号隔开,
10           表示抛出异常,由该方法的调用者来处理,
11           throws表示出现异常的一种可能性,并不一定会发生这个异常。
12       throw
13           用在方法体内,跟的是异常对象名,
14           只能抛出一个异常对象名,
15           表示抛出异常,由方法体内的语句处理,
16           throw则是抛出了异常,执行throw则一定抛出了某种异常。
17  *
18  */
19 public class ExceptionDemo {
20     public static void main(String[] args) {
21         // method();  // 运行期异常,用throw抛出,我们没有做处理,则会使用JVM的异常默认处理机制:即将该异常进行处理,将该异常的名称、异常的信息和异常出现的位置打印在了控制台上,同时将程序停止运行。
22                       // 运行期异常的抛出,将来调用可以不用处理,也可以处理(像处理编译期异常那样处理)
23         try {
24             method2(); // 编译期异常的抛出,将来调用者必须处理(前提是这个异常要在方法上声明抛出给调用者,如果你直接在方法里就处理,那跟调用者就没有关系了)。
25         } catch (Exception e) {
26             e.printStackTrace();
27         }
28         
29         System.out.println("over");
30     }
31 
32     // throw是在方法功能内部抛出异常的对象,若是运行期异常,一般不用在方法上进行声明(也可以声明哦,但不管你声不声明,作为调用者可以处理也可以不处理)
33     public static void method() {
34         int a = 10;
35         int b = 0;
36         if (b == 0) {
37             throw new ArithmeticException(); // 运行期异常,使用JVM的一个默认的异常处理机制:即将该异常进行处理,将该异常的名称、异常的信息和异常出现的位置打印在了控制台上,同时将程序停止运行。
38         } else {
39             System.out.println(a / b);
40         }
41     }
42     
43     // throw是在方法功能内部抛出异常的对象,若是编译期异常,一般在方法上进行声明,交给调用者处理
44     public static void method2() throws Exception {
45         int a = 10;
46         int b = 0;
47         if (b == 0) {
48             throw new Exception(); // 编译期异常,这是一条正常的语句,而该正常的语句出现了编译期异常,必须要处理否则编译就不通过。
49         } else {                   // 可以不在方法上进行声明,直接用try...catch对该句进行处理;也可以在方法声明上抛出异常声明,让调用者去用try...catch进行处理。
50             System.out.println(a / b);
51         }
52     }
53 }
程序运行结果为:
java.lang.Exception at cn.itcast_06.ExceptionDemo.method2(ExceptionDemo.java:
48) at cn.itcast_06.ExceptionDemo.main(ExceptionDemo.java:24) over

 

我的GitHub地址: https://github.com/heizemingjun
我的博客园地址: http://www.cnblogs.com/chenmingjun
我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
相关文章
|
2天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
13天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1284 5
|
12天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1313 87
|
1天前
|
弹性计算 安全 数据安全/隐私保护
2025年阿里云域名备案流程(新手图文详细流程)
本文图文详解阿里云账号注册、服务器租赁、域名购买及备案全流程,涵盖企业实名认证、信息模板创建、域名备案提交与管局审核等关键步骤,助您快速完成网站上线前的准备工作。
174 82
2025年阿里云域名备案流程(新手图文详细流程)
|
1天前
|
自然语言处理 前端开发
基于Electron38+Vite7.1+Vue3+Pinia3+ElementPlus电脑端admin后台管理模板
基于最新版跨平台框架Electron38整合Vite7+Vue3+ElementPlus搭建轻量级客户端中后台管理系统解决方案。
152 86