java基础day17

Day17
一、异常(在程序运行的时候发生的错误,Throwable是异常的一个超类)

1、异常的体系结构:Error,Exception是Throwable的直接子类;

  • Error很严重的错误,一般是jvm报的错误,需要修改源代码;
  • Exception不是很严重的错误,但必须解决;
  • RuntimeException运行时异常是Exception的一个重要的直接子类,但不需要开发人员处理,由jvm处理;

2、jvm自带处理异常机制:

  • 将异常的信息(时间、地点等)打印出来;
  • 将程序终止;
如果程序发生异常,没有任何方法或类去处理这个异常,最后交由jvm来处理  

3、手动处理异常
(1)抛出异常,让调用者去处理异常(捕获或抛出)
(2)程序员自己处理异常(关键字try、catch、finally、throw、throws):

第一种方法:try{ 有可能发生异常的代码 }catch(异常类型 异常对象){ 一般打印异常信息 }  
  • 执行的流程:没有发生异常,执行try里的代码==>执行完毕(不执行catch),发生异常后,从异常处直接跳到catch代码块
  • 处理多个异常:try{ 有可能发生异常的代码 }catch(异常类型1 异常对象){ 代码块1 }……catch(异常类型n 异常对象){ 代码块n }(满足catch异常类型才执行catch的代码块,且异常类型由小及大)
第二种方法(最常用):try{ 有可能发生异常的代码 }catch(异常类型 异常对象){ 一般打印异常信息 }finally{ 不管发不发生异常都会执行这个代码块 }  
  • 如果遇到return,先执行完finally里的代码,然后执行return,只有System.exit(0)杀死jvm才能不执行finally
  • finally代码块一定会执行的特点,所以在关闭与释放资源有很大作用(IO流的关闭)
  • 在jdk1.7之后,catch()括号里可以存在多个异常,使用“|”链接
  • 在开发中,如果有多个异常,最后都会捕获一个最大异常Exception
  • 捕获异常,如果具体到某一种类型的异常,尽量具体,方便解决问题
第三种方法(不常用):try{ 可能发生异常的代码 }finally{ 不管发不发生异常都会执行的代码 }  
  • 并没有具体捕获异常,只是让代码分离,结构比较清晰

(3)异常分类:

  • 编译时异常:也就是在代码运行之前就会报错;
  • 运行时异常:RuntimeException在.class文件在运行时jvm发出的异常,是Exception的直接子类;
  • 常见的一些异常:rithmeticException算术异常;ParseException格式转化异常错误;java.lang.NullPointerException空指针异常;

(4)Throwable异常常规方法(子类没有特别的方法):

  • public StackTraceElement[] getStackTrace():打印其堆栈信息(也就异常信息);
  • public String getMessage():返回此异常的详细消息字符串;
  • public String toString():返回此异常的简短描述;

(5)throw:异常的声明(可以在方法里声明自己想声明的异常)

  • 声明异常格式:throw(关键字)+具体的异常类型
  • 声明的异常必须写在方法里,必须是Exception类或其子类,如果是运行时异常可以不处理,其他的都要处理

(6)throws:抛出异常(格式:throws+异常类型),必须写在方法括号后,必须是Exception或其子类

throw和throws的区别:  
  • throw是声明,后面处理异常或抛出;throws就是抛出异常
  • throw声明确实会发生的异常,throws抛出的不一定会发生异常
  • throw后面只能声明一个异常,throws可以抛出多个异常

(7)自定义异常,继承父类一般分两种情况:继承Exception(常用)或继承RuntimeException

二、File(文件类)是一个文件对象和目录路径的抽象表现形式,在java.io包下

1、路径:绝对路径(具体到盘符),相对路径(相对参照物)
2、Windows的根路径是盘符,Unix的根路径是斜杠(\)

注意点:File类的实例是不可变的,一旦创建,对象表示的抽象路径名不可改变,因为只能通过构造器给对象路径  

3、File对象的构造方法:

  • public File(String pathname):通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例;
  • public File(String parent,String child):parent表示父级目录路径(字符串),child 表示子目录(字符串);
  • public File(File parent,String child):parent表示父级目录路径(文件对象),child 表示子目录(字符串);
注意点:只要存在父子关系,必须父目录存在  

4、常规方法:
(1)创建:

  • createNewFile():创建文件的方法;
  • public boolean mkdir():创建一个文件夹;
  • public boolean mkdirs():如果父目录不存在,一同创建父目录;
  • public boolean delete():删除一个文件或空的文件夹(删除的文件不会进入电脑垃圾回收站);
  • public boolean renameTo(File dest):重命名文件(如果在同一个目录下,是修改其名字,如果不在同一个的目录下是剪切+修改名字);

(2)判断:

  • public boolean exists():判断这个文件是否存在;
  • public boolean isDirectory():判断是否是文件夹;
  • public boolean isFile();是否是一个文件;

(3)获取:

  • public String getAbsolutePath():获取文件的其绝对路径;
  • public String getPath():获取构造方法传递的那个参数的路径(new File(“d:\1.txt”));
  • public String getName():获取文件的名称;
  • public String getParent():返回上一级目录;
  • public long length():文件内容的的长度(字节数);
  • public String[] list();返回的是改目录下的第一级的所有文件包括文件夹;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值