【零基础学Java】—throw关键字(四十六)

一、throw关键字

public class demo {public static void main(String[] args) {//创建int类型的数组 并且赋值int[] arr=new int[3];int e= getElement(arr,3);System.out.println(e);//ArrayIndexOutOfBoundsException}/*定义一个方法,获取数组指定索引处的元素参数:int[] arrint index以后工作中我们首先需要对方法传递过来的参数进行合法性的校验,如果参数不合法,那么我们必须使用抛出异常的方式,告知方法的调用者,传递的参数有问题*/public static  int getElement(int[] arr,int index){if(arr==null){throw new NullPointerException("传递的数组是null");}if(index<0||index>arr.length-1){throw new ArrayIndexOutOfBoundsException("传递的索引超出了数组使用的范围");}int ele=arr[index];return ele;}
}

二、Objects非空判断

查看源码发现这里对为null的进行了抛出异常操作:

Objects类中的静态方法:
public static <T> T requireNonNull(T obj):查看指定引用对象是不是null*/
public class demoObjects {public static void main(String[] args) {method(null);}public static void method(Object obj){//对传递过来的参数进行合法性判断,判断是否为null/*if(obj==null){throw new NullPointerException("传递的对象的值是null");}*/// Objects.requireNonNull(obj);Objects.requireNonNull(obj,"传递的对象的值是:null");}
}

三、throws关键字异常处理方式一

throws关键字:异常处理的第一种方式,交给别人处理

作用:当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象,可以使用throws关键字处理异常对象,会把异常对象声明抛出给方法的调用者 处理(自己不处理,给别人处理),最终交给JVM处理,中断处理

使用格式:在方法声明时使用

修饰符 返回值类型 方法名(参数列表)throws AAAException,throw new BBBException……{throw new AAAException("产生原因");
throw new BBBException("产生原因");
……
}

注意:

  • throws关键字必须写在方法声明处

  • throws关键字后边声明的异常必须是Exception或者是Exception的子类

  • 方法内部如果抛出了多个异常的对象,那么throws后边必须也声明多个异常,如果抛出的多个异常对象有子父关系,那么直接声明父类异常即可。

  • 调用了一个声明抛出异常的方法,我们就必须处理声明的异常,要么继续使用throws声明抛出,交给方法的调用者处理,最终交给JVM,要么try……catch自己处理异常

public class demoThrows {public static void main(String[] args) throws FileNotFoundException {readFile("d:\\a.txt");}public static  void readFile(String fileName) throws FileNotFoundException {if(!fileName.equals("c:\\a.txt")){throw new FileNotFoundException("传递的文件路径不是c:\\a.txt");}}
}

四、try……catch异常处理方式二

try……catch:异常处理的第二种方式,自己处理异常

格式:

try{可能产生的代码}catch(定义一个异常的变量 用来接收try中抛出的异常对象){异常的处理逻辑,产生异常对象之后怎么处理异常对象一般在工作中,会把异常的信息记录到一个日志中}……catch(异常类名 变量名){}

注意事项:

  • try中可能会抛出多个异常对象,那么就可以使用多个catch来处理这些异常对象

  • 如果try中产生了异常,那么就会执行catch中的异常处理逻辑,执行完毕catch中的处理逻辑

  • 继续执行try……catch之后的代码,如果try中能够没有产生异常, 那么就不会执行catch中异常的处理逻辑,执行完try中的代码,继续执行try……catch之后的代码

import java.io.FileNotFoundException;/*** @author :CaiCai* @date : 2022/4/14 19:45*//*
try……catch:异常处理的第二种方式,自己处理异常
格式:
try{可能产生的代码}catch(定义一个异常的变量 用来接收try中抛出的异常对象){异常的处理逻辑,产生异常对象之后怎么处理异常对象一般在工作中,会把异常的信息记录到一个日志中}……catch(异常类名 变量名){}注意事项:try中可能会抛出多个异常对象,那么就可以使用多个catch来处理这些异常对象如果try中产生了异常,那么就会执行catch中的异常处理逻辑,执行完毕catch中的处理逻辑继续执行try……catch之后的代码,如果try中能够没有产生异常
那么就不会执行catch中异常的处理逻辑,执行完try中的代码,继续执行try……catch之后的代码*/
public class demoCatch {public static void main(String[] args) throws FileNotFoundException {try{readFile("c:\\a.txt");}catch(FileNotFoundException F){//try中抛出异常对象System.out.println("catch-传递的路径不对");}System.out.println("后续代码");}public static  void readFile(String fileName) throws FileNotFoundException {if(!fileName.equals("c:\\a.txt")){throw new FileNotFoundException("传递的文件路径不是c:\\a.txt");}System.out.println("路径没有问题,读取文件");}
}

【零基础学Java】—throw关键字(四十六)相关推荐

  1. 【零基础学Java】—final关键字与四种用法(二十九)

    [零基础学Java]-final关键字与四种用法(二十九) 一.final关键字 final关键字代表最终.不可改变的 常见的四种用法: 可以用来修饰一个类 可以用来修饰一个方法 可以用来修饰一个局部 ...

  2. 【零基础学Java】—自定义异常(四十八)

    [零基础学Java]-自定义异常(四十八) 自定义异常类:java提供的异常类,不够我们使用,需要自己定义一个异常类 格式: public class XXXException extends Exc ...

  3. 【零基础学Java】—static关键字概述(十六)

    [零基础学Java]-static关键字概述(十六) 一.static关键字 二.static关键字修饰成员变量 /*** @author :CaiCai* @date : 2022/4/8 11:1 ...

  4. 【零基础学Java】—TCP通信(五十四)

    [零基础学Java]-TCP通信(五十四) TCP通信:面向连接的通信,客户端和服务器端必须经过三次握手,建立逻辑连接,才能通信(安全). 通信的步骤: 服务器端先启动 服务器端不会主动的请求客户端, ...

  5. 【零基础学Java】—多线程(四十九)

    [零基础学Java]-多线程(四十九) 一.并发与并行 并发:指两个或多个事件在同一时间段内发生 并行:指两个或多个事件在同一时刻发生(同时发生) 二.进程和线程

  6. 【零基础学Java】—LinkedList集合(四十)

    [零基础学Java]-LinkedList集合(四十) java.util.linkedList集合implements list接口 linkedList 集合的特点: 底层是一个链表结构,查询慢, ...

  7. 【零基础学Java】—Calendar类(三十四)

    [零基础学Java]-Calendar类(三十四) java.util.Calendar日历类 Calendar类是一个抽象类,里面提供了很多操作日历字段的方法 Calendar类无法直接创建对象,里 ...

  8. 【零基础学Java】—ArrayList集合概述和基本使用(十四)

    [零基础学Java]-ArrayList集合概述和基本使用(十四) 一.什么是ArrayList类以及注意事项 java.util.ArrayList是大小可变的数组的实现,存储在内的数据称为元素,此 ...

  9. 【零基础学Java】—继承父类并实现多个接口(二十五)

    [零基础学Java]-继承父类并实现多个接口(二十五) 一.使用接口的注意事项 1️⃣接口是没有静态代码块或者构造方法的 2️⃣一个类的直接父类是唯一的,但是一个类可以同时实现多个接口 3️⃣如果实现 ...

最新文章

  1. 链表问题19——合并两个有序的单链表
  2. 【Flutter】Icons 组件 ( 加载 Flutter 内置的图标 | 材料设计图标完整展示 )
  3. Qt中的QRadioButton
  4. 攻防世界(Pwn) forgot---栈溢出;(方法二)
  5. MySQL数据库SQL层级优化
  6. uart ttl通讯测试可以短接吗_精讲!UART、RS232、RS422、RS485,绝了
  7. 程序员伪装 AI 编程,竟骗来 2 亿的投资!
  8. android测试测试什么,1,web测试,Android测试,Ios测试的共同点与
  9. FreeMarker中获取Map内容
  10. php 字体设计,时尚前沿:15个创意的3D字体设计艺术作品欣赏
  11. php的一些编码问题
  12. SiO2 介孔二氧化硅纳米颗粒的明胶包裹/二氧化硅杂化凝胶固定化醇脱氢酶/白蛋白和壳聚糖包裹的二氧化硅微球/二氧化硅包覆的量子点荧光编码微球
  13. 猎人华为单机离线版(一键启动增强版+扩展工具箱2022) | 猎人维修大师免加密狗单机永久版 | 华为线刷工具(MRT HW Flash Tool) | 华为工具(MRT HW Tool_V3.3)
  14. 信噪比(dB)换算公式
  15. Chromium OS开启Android ADB调试、进入安卓开发者模式
  16. Linux电脑怎么接入arm开发板,PC机与ARM开发板之间实现NFS共享
  17. 快去抢票!今天开始!2020元旦春节火车票购票日程攻略来了
  18. DES(Detection with Enriched Semantics)算法详解
  19. 零基础入门学习Python 011列表:一个打了激素的数组2
  20. OpenCV中的归一化

热门文章

  1. WiFi(网络)调试Android手机
  2. 【Spark Summit EU 2016】Spark的性能,过去、现在与未来
  3. 和思科Boss四年后重逢
  4. 西交利物浦大学企业协同平台案例分享
  5. 在VMware workstation 9.0中安装Windows server 2012 和 Hyper-v(虚拟机中安装虚拟机)
  6. 设计模式——工厂方法
  7. Excel文字输入技巧
  8. 满分的项目经理,个人觉得很有道理,所以[转载]
  9. Hibernate--fetch=FetchType.LAZY
  10. C程序设计语言现代方法07:基本类型