java SE day16 火推
来源:互联网 发布:我是歌手有网络直播吗 编辑:程序博客网 时间:2024/05/16 17:48
异常处理
异常结构中 表示范围最大的是 Throwable类 , 他有两个子类: Error 和 Exception我们要处理的是 Exception(异常) . Error(错误) 无法处理, 只能尽量避免 !
Exception ***
运行时异常 (非受检异常)(RuntimeException): 程序在执行过程中, 因为逻辑问题, 产生了异常 !非运行时异常(受检异常) : 编译器可检测异常 , 在编写代码进行javac操作时, 提示的异常 !
RuntimeException *****
当程序遇到异常时, 如果不对其进行异常处理, 程序会异常终止 !
try catch语句块 *****
我们可以在异常产生时, 通过try块捕获异常 , 通过catch块处理异常 如果try块捕获的异常, 与catch块声明的接收异常类型都不同, 则与没有异常处理一致!格式: try{ //异常捕获代码块, //在这里的代码 出现异常后, 会自动捕获异常 //忽略try块后续代码, 立即,将异常传递到catch块中进行处理 //如果未产生异常, 则忽略catch块}catch(异常类型1 异常名1){}catch(异常类型2 异常名2){ ...}catch(异常类型n 异常名n){}关于多个catch块中异常声明的规则: 类型越大的(父类异常) , 越靠后 ! 例如: try{ .... }catch(NumberFormatException e){ }catch(Exception e){ }
特殊的判断结构
如果try块的最后一句代码能正确执行 , 则表示try块未产生异常 ! try { int i = Integer.parseInt("0"); System.out.println("如果这里执行了, 表示没有产生异常!"); }catch(Exception e) { System.out.println("如果这里执行了, 表示产生异常!"); }
为什么出现了异常以后, 会在控制台打印异常的堆栈信息
原因在于, 出现了异常后, 我们并未自行进行处理, jvm帮我们执行了输出到控制台的处理方式 !
finally ***
是异常的统一出口 ! 无论在任何的情况下, 只要代码进入了try块中, finally块必然会执行!需要注意: 哪怕在try 或 catch块中执行了return , 也阻挡不了finally的执行----------------------------------------------我们一般在这里执行什么样的操作: 一般用来执行资源释放的操作(硬件软件资源) !格式: try{}catch(){}finally{ // 无论上述的代码块 是否产生了异常, 最后finally都会执行 !}
面试题:*****
观察如下代码,finally中的打印语句 会执行吗 ? public static int numberFormat(String text) { try { int i = Integer.parseInt(text); return i; }catch(NumberFormatException e) { e.printStackTrace(); return 0; }finally { System.out.println("程序执行完毕, 已经转换了一个数字"); }}答: 只要代码执行了try块, 那么finally必然会执行, 无论是否有return操作!
throws **
在程序中, 我们对于异常 并非只能捕获, 还可以将其进行抛出操作 , 留待后续调用时再处理 !异常的抛出, 必须在方法上声明格式: 方法名()throws 抛出的异常类型{ }例如: public static int numberFormat(String text)throws NumberFormatException{ int i = Integer.parseInt(text); return i; }当调用一个抛出了异常的方法时, 如果抛出的类型属于RuntimeException或它的子类, 则不会在调用处提示;如果调用的方法 抛出了一个 受检异常 , 则编译器 会强制我们进行处理 !如果将异常抛出到main方法上, 则表示将异常交给jvm去处理 ! 会造成程序的异常终止 !
主动创建一个异常, 并扔出去**
异常类型 对象名 = new 异常类型();throw 异常对象名;异常的构造方法: 无参构造: 创建一个异常对象, 不包含异常的消息内容一参构造器 , 参数1. 传入的是字符串类型的值, 表示异常的消息 !案例: public void setAge(int age)throws RuntimeException { /** * 如果传入 的年龄范围不在0-150之间, 则抛出异常 */ if(age<0||age>150) { // 创建一个异常对象, 将其扔出去 AgeExceptionNiFengLe e = new AgeExceptionNiFengLe("你是不是萨 , 年龄传入的有问题, 请检查"); throw e; } this.age = age; }
继承一个异常类, 实现自定义异常*
继承异常类后, 不建议重写任何方法! 仅编写两个构造方法即可, 一个是无参构造器, 一个是一参字符串的构造器 !案例: public class AgeExceptionNiFengLe extends RuntimeException { public AgeExceptionNiFengLe() { super(); } public AgeExceptionNiFengLe(String message) { super(message); } }
关于方法的重写 与异常的问题
父接接口中的方法, 或 父类中的方法声明的抛出异常, 子类在进行重写时, 子类扔出的异常 不能大于 父类扔出的异常 !并且 子类扔出的异常 ,不能是额外的异常 (不属于父类声明范围内的)总结: 只能扔出 父类声明异常的类型, 或父类声明异常类型的子类 !
IO
File类
文件或文件夹 在JAVA 中的抽象表示形式在创建对象时, 文件可以是不存在的 !
常用构造方法
1. File(File parent,String child); *** 参数1. 表示父文件夹File对象 参数2. 表示子文件的文件名称(包含后缀名)2. File(String parent,String child); * 参数1. 表示父文件夹的路径 参数2. 表示子文件的文件名称(包含后缀名)3. File(String pathName); ***** 参数1. 表示文件的路径
常用方法
booolean createNewFile() 当对象表示的文件不存在时, 创建文件且返回true , 如果文件已存在, 不会执行操作 ,直接返回falseboolean mkdir() 创建一层目录 boolean mkdirs() *** 创建此对象表示的目录 , 包括所有目录中必须有,但不存在的父路径 !boolean delete(); 删除此对象表示的文件或文件夹 boolean exists()* 测试此文件或者文件夹是否存在 , 存在则返回true, 不存在则返回falseString getAbsolutePath(); ** 获取文件或目录的绝对路径long length():* 获取文件的大小长度 (byte为单位)long lastModified(): 文件最后一次被修改的时间String getName()*** 返回文件或文件夹的名称(如果是文件,包含后缀名)String getPath() 返回文件的路径boolean isFile()* 判断当前对象表示的是否是文件, 是文件则返回true, 文件夹则返回falseString[] list() 返回当前文件夹中所有的直接子文件与直接子文件夹的文件名!File[] listFiles() *** 返回当前文件夹中, 所有的直接子文件/直接子文件夹的 File对象File getParentFile() 获取直接父文件夹的file对象renameTo(File newFile)给一个文件重新命名, 可以通过这个方式, 对其实现剪切的操作
练习:
扫描电脑的D盘 , 输出盘下的所有的文件与文件夹! 使用递归来完成设计一个方法 , 这个方法 具备如下功能: 形式参数, 要求传入一个File数组, 我们对这个File数组进行遍历 , 判断每一个File对象是否是文件, 如果是文件, 则输出其文件名称 , 文件最后修改时间, 文件的大小如果是文件夹, 则输出文件夹名称, 并通过文件夹的listFiles方法 获取所有子文件与子文件夹public static void printFiles(File[] files){ for(File file:files){ if(file.isFile()){ //这是一个文件 System.out.println("发现一个文件:文件名称:"+file.getName()+",最后一次修改:"+file.lastModified()+",文件的大小:"+file.length()); }else{ //这是一个文件夹 System.out.println("发现了一个文件夹, 文件夹的名称:"+file.getName()+",正在准备遍历内部文件"); File[] files2 = file.listFiles(); printFiles(files2); } }}
阅读全文
0 0
- java SE day16 火推
- java se day12 火推
- java SE Day13 火推
- java SE day14 火推
- java SE day15火推
- java SE 18 火推
- java SE 17 火推 IO流
- java学习day16
- java学习day16
- day16/MapDemo1.java
- day16/MapDemo2.java
- day16/MapDemo.java
- day16/MapTest1.java
- day16/MapTest2.java
- day16/MapTest3.java
- day16/MapTest4.java
- day16/MapTest.java
- [Java视频笔记]day16
- 精通有状态和无状态(Stateful vs Stateless)
- Spring中jdbcTemplate实现增删改查操作
- mysql数据库练习题
- 【LeetCode】464.Can I Win(Medium)解题报告
- Linux系统学习导图整理
- java SE day16 火推
- 160个CrackMe-第九个
- AC自动机
- css样式总结
- 图形程序设计swing概述
- uva 11582 Colossal Fibonacci Numbers! (斐波那契模除周期性)
- 抓包工具Fiddler的使用说明
- 玩转SpringCloud
- Toast加强版Toasty简单使用