throws关键字:异常处理的第一种方式,交给别人处理
作用:
  当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象
  可以使用throws关键字处理异常对象,
  会把异常对象声明抛出给方法的调用者处理(自己不处理,给别人处理),最终交给JVM处理,JVM然后中断处理
使用格式:在方法声明时使用
  修饰符 返回值类型 方法名(参数列表) throws AAAException,BBBException...{
    throw new AAAException("产生原因");
    throw new BBBException("产生原因");
...
}
注意:
  1.throws关键字必须写在方法声明处
  2.throws关键字后边声明的异常必须是Exception或者是Exception的子类
  3.方法内部如果抛出了多个异常对象,那么throws后边必须也声明多个异常
    如果抛出的多个异常对象有父子类关系,可以直接声明父类异常即可
  4.如果调用了一个声明抛出异常的方法,我们就必须处理声明的异常
    要么继续使用throws声明抛出,交给方法的调用者处理,最终交给JVM
    要么try...catch自己处理异常

public class Test05Throws {
// FileNotFoundException extends IOException
// 如果抛出的多个异常对象有父子类关系,可以直接声明父类异常即可
public static void main(String[] args) throws /*FileNotFoundException,*/IOException {
// readFile("d:\\a.txt"); FileNotFoundException: 传递的文件路径不是c:\a.txt
readFile("c:\\a.tx"); // IOException: 文件的后缀名不是.txt
}
/*
案例:
定义一个方法,对传递的文件路径进行合法性判断
如果路径不是”c:\\a.txt“,那么我们就抛出文件找不到异常对象,从而告知方法的调用者
注意:
FileNotFoundException是编译异常,抛出了编译异常,就必须处理这个异常
可以使用throws继续声明抛出FileNotFoundException这个异常对象,让方法的调用者处理,最终交给JVM处理
*/
public static void readFile(String fileName) throws /*FileNotFoundException,*/IOException {
if (!fileName.equals("c:\\a.txt")) {
throw new FileNotFoundException("传递的文件路径不是c:\\a.txt");
}
/*
如果传递的路径不是.txt结尾
那么我们就抛出IO异常对象,告知方法的调用者,文件的后缀名不对
*/
if (!fileName.endsWith(".txt")) {
throw new IOException("文件的后缀名不是.txt");
}
}
}

try...catch:异常处理的第二种方式,自己处理异常
格式:
try{
  可能产生异常的代码
}catch(定义一个异常的变量,用来接收try中抛出的异常对象){
  异常的处理逻辑,异常异常对象之后,怎么处理异常对象
  一般在工作中,会把异常的信息记录到一个日志中
}
...
catch(异常类名 变量名){
}
注意:
  1.try中可能会抛出多个异常对象,那么就可以使用多个catch来处理这些异常对象
  2.如果try中产生了异常,那么就会执行catch中的异常处理逻辑,执行完毕catch中的处理逻辑,继续执行try...catch之后的代码
    如果try中没有产生异常,那么就不会执行catch中异常的处理逻辑,执行完try中的代码,继续执行try...catch之后的代码

public class Demo01TryCatch {
public static void main(String[] args) {
try{
//可能产生异常的代码
readFile("d:\\a.tx");
System.out.println("资源释放");
}catch (IOException e){//try中抛出什么异常对象,catch就定义什么异常变量,用来接收这个异常对象
//异常的处理逻辑,异常异常对象之后,怎么处理异常对象
//System.out.println("catch - 传递的文件后缀不是.txt");
e.printStackTrace();
}
System.out.println("后续代码");
} /*
如果传递的路径,不是.txt结尾
那么我们就抛出IO异常对象,告知方法的调用者,文件的后缀名不对
*/
public static void readFile(String fileName) throws IOException { if(!fileName.endsWith(".txt")){
throw new IOException("文件的后缀名不对");
} System.out.println("路径没有问题,读取文件");
}
}

throws关键字_异常处理的第一种方式(交给别人处理)和try_catch_异常处理的第二种方式(自己处理)的更多相关文章

  1. Spring+Struts集成(第二种方案)

    在上一篇文章中我们了解到了第一种Spring跟Struts集成的方案,但此集成方案的不足是WEB层中知道Spring的相关内容,因为需要去主动的查找对象:BeanFactory.方案二便是通过依赖注入 ...

  2. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  3. 线程开启的第一种方法:通过创建Thread的子类的对象的方式

    package cn.itcast.demo16.demo06.Thread;/** * @author newcityman * @date 2019/7/22 - 21:47 */public c ...

  4. Thread类的常用方法_sleep和创建多线程程序的第二种方式_实现Runnable接口

    sleep方法是在Thread类中的一个静态方法,当一个线程调用了sleep方法,被调用的那个线程就会暂时的让出指定时间的CPU执行权,在这段时间也不会参与CPU的调度,当时间到了之后,就会重新回到就 ...

  5. throw跟throws关键字

    throws关键字 定义一个方法的时候可以使用throws关键字声明.使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用处进行处理. throws关键字格式: public 返回值类 ...

  6. 使用Typescript重构axios(十九)——请求取消功能:实现第二种使用方式

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  7. 10、一个action中处理多个方法的调用第二种方法method的方式

    在实际的项目中,经常采用现在的第二种方式在struct.xml中采用清单文件的方式 我们首先来看action package com.bjpowernode.struts2; import com.o ...

  8. SSM整合_年轻人的第一个增删改查_新增

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  9. YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法

    上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把 ...

随机推荐

  1. XCTF练习题---MISC---ext3

    XCTF练习题---MISC---ext3 flag:flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj} 解题步骤: 1.下载附件,观察题目,发现题目跟Linux有关,我们换 ...

  2. Bugku CTF练习题---加密---聪明的小羊

    Bugku CTF练习题---加密---聪明的小羊 flag:KEY{sad23jjdsa2} 解题步骤: 1.观察题目,发现其中的信息 2.经过题目判断,得知该题属于栅栏密码的一种,并且介绍中表明了 ...

  3. Annotation(注释) _Override _ Deprecated _ SuppressWarnings

    Deprecated SuppressWarnings 元注解

  4. Oauth的学习以及开发自助上课签到脚本

    附上源码:                                 https://github.com/taka250/auto_checkin_skl_hdu 首先了解学习oauth的知识 ...

  5. web安全之信息收集篇

    信息收集 1.网络信息 网络信息就包括网站的厂商.运营商,网站的外网出口.后台.OA. 2.域名信息 通过域名可以查洵网站的所有人.注册商.邮箱等信息 --->Whois 第三方查询,查询子域网 ...

  6. 初始C语言作业一

    1.下面哪个不是C语言内置的数据类型:( ) A.char B.double C.struct Stu D.short 解析: C语言中内置类型包括 char //字符数据类型 short //短整型 ...

  7. 被迫开始学习Typescript —— class

    TS 的 class 看起来和 ES6 的 Class 有点像,基本上差别不大,除了 可以继承(实现)接口.私有成员.只读等之外. 参考:https://typescript.bootcss.com/ ...

  8. ucontext的简单介绍

    简介 结构体 函数 getcontext setcontext makecontext swapcontext 简介 ucontext.h是GNU C库的一个头文件,主要用于用户态下的上下文切换.需要 ...

  9. linux篇-linux iptables配置

    1 iptables默认系统自带 setup 2重启防火墙 /etc/init.d/iptables restart 3接受端口 Vi /etc/sysconfig/iptables -A INPUT ...

  10. 基于C++11的数据库连接池实现

    0.注意 该篇文章为了让大家尽快看到效果,代码放置比较靠前,看代码前务必看下第4部分的基础知识. 1.数据库连接池 1.1 是什么? 数据库连接池负责分配.管理和释放数据库连接,属于池化机制的一种,类 ...