目录
异常
作用
异常的处理方式
JVM(虚拟机)默认的处理方式
自己处理(捕获异常)
抛出异常(也就是交给调用者处理)
自定义异常
file
File中常见成员方法
判断和获取
创建和删除
获取并遍历
异常
异常就是代表程序出现的问题。
异常在java.lang.Throwable这个包里,包含Error异常和Exception异常。
Error:代表的系统级别错误(属于严重问题)
系统一旦出现问题,sun公司会把这些错误封装成Error对象。
Error是给sun公司自己用的,不是给我们程序员用的。
因此我们开发人员不用管它。
Exception:叫做异常,代表程序可能出现的问题。
我们通常会用Exception以及他的子类来封装程序出现的问题。
运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。
运行时出现的异常(如:数组索引越界异常)
其他异常(也就是编译时异常):编译阶段就会出现异常提醒的。(如:日期解析异常)没有继承RuntimeExcpetion的异常,直接继承于Excpetion。编译阶段如果编译错误就会有错误提示
异常体系的最上层父类是Exception,并且异常分为两类:编译时异常、运行时异常
作用
1、是用来查询bug的关键参考信息。
2、可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况。如下:
之前写法:
现在:
age赋值-2,运行main方法,控制台输出 :
异常的处理方式
JVM(虚拟机)默认的处理方式
把异常的名称,异常原因以及异常出现的位置等信息输出在了控制台。
程序停止执行,下面的代码不会再执行了。
自己处理(捕获异常)
主要目的:当代码出现异常时,可以让代码继续往下执行。
格式:
try{可能出现异常的代码;}catch(异常类名 变量名){异常处理的代码;}
如果try中没有遇到问题,把try里面所有的代码执行完,并且往后执行,但是不会执行catch里面的代码。
如果try中可能会遇到多个问题,在try里面,执行遇到的第一个问题就会创建它对应的异常对象,try后面的代码就不会执行了,直接把这个创建的异常对象与catch里面作比较。
如果try中可能会遇到多个问题,我们也会写多个catch与之对应,如果这些异常存在父子关系,那么父类一定要写在下面。(比如Exception与ArithmeticException就是父类子类的关系)
控制台输出:
如果try中遇到的问题没有被捕获,相当于try...catch代码没有任何作用和没写一样,就是把当前创建的异常对象交给虚拟机默认处理(异常处理方式的第一种方式)。
异常的常用方法:
对于以上catch中的异常处理我只写了一个输出语句,但是这样是不规范的。
Throwable的成员方法:
public String getMessage():返回此 throwable 的详细消息字符串(异常简短信息)
public String toString():返回此可抛出的简短描述(异常简短信息以及异常名字)public void printStackTrace():把异常的错误信息输出在控制台(异常简短信息以及异常名字以及异常出现的位置)(最常用)
ctrl+Alt+t快捷键idea自动生成。
抛出异常(也就是交给调用者处理)
主要目的:告诉调用者出错了
throws:写在方法定义处,表示声明一个异常,告诉调用者,使用本方法可能会有哪些异常。(如果是编译时的异常那么必须要写,如果是运行时异常那么可以不写)
throw:写在方法内,表示结束方法;手动抛出异常对象,把异常对象交给调用者,方法中下面的代码不再执行了。
自定义异常
主要目的:为了让控制台的报错信息更加见名知意。
1、定义异常类
2、写继承关系(如果定义的是运行时的异常继承RuntimeException,但是如果是编译时的异常直接继承Exception)
3、空参构造和带参构造
Alt+insert在idea自动生成
file
文件保存的位置:路径(file)
file对象就表示一个路径,可以是文件的路径、也可以是文件夹的路径。
这个路径可以是存在的,也允许是不存在的。
public File(String pathname):根据文件路径创建文件对象
public File(String parent, String child):根据父路径名字符串和子路径名字符串创建文件对象
public File(File parent, String child):根据父路径对应文件对象和子路径名字符串创建文件对象
相对路径:不带盘符,默认到当前项目下去找。是相对当前项目下的路径
绝对路径:带盘符
File中常见成员方法
判断和获取
public boolean isDirectory():判断此路径名表示的File是否为文件夹
public boolean isFile():判断此路径名表示的File是否为文件
public boolean exists):判断此路径名表示的File是否存在
public long length():返回文件的大小(字节数量,只能获取文件的大小)
public String getAbsolutePath():返回文件的绝对路径
public String getPath():返回定义文件时使用的路径
public String getName():返回文件的名称,带后缀(如果调用者是文件夹,那么返回的就是文件夹的名字)
public long lastModified():返回文件的最后修改时间(时间毫秒值)
这里说一个idea的快捷键:如果在idea要改变一个变量的名称,并且用这个变量的所有变量,都要改为改变之后的变量名那么就用shift+F6来改变。
在这个文件的属性我们可以看见大小为21个字节,1字节=8bit,而这个文件的内容是:我们都应该坚持,说明一个汉字占三个字节24个比特位。
创建和删除
public boolean createNewFile():创建一个新的空的文件(创建的一定是个文件,如果没有后缀,那么创建的文件也没有后缀,反正不可能创建文件夹)
public boolean mkdir():创建单级文件夹
public boolean mkdirs():创建多级文件夹,同时也能创建单级文件夹,所以mkdir方法不常用
public boolean delete():删除文件、空文件夹(删除不会经过回收站,直接删)
获取并遍历
public File[] listFiles():获取当前该路径下所有内容。
当调用者File表示的路径不存在时,返回null
当调用者File表示的路径是文件时,返回null
当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
当调用者File表示的路径是需要权限才能访问的文件夹时,返回null