第三周 1. 异常 (1) 概念: ① 编译或者运行时出现的错误 (2) 体系结构: ① Throwable(最顶层) 1) Error:出现的不能够处理的严重问题 2) Exception:可以处理的问题 (3) 异常的处理方式: ① 捕获处理: 1) Try...catch语句 Try{ 有可能出现的问题代码 }catch(ArithmeticException ae){//产生异常对象后,会将异常对象试着去 //赋值给对应变量 处理异常 } 2) Finally a. 应用场景:释放资源,清理垃圾,因为finally里面肯定会执行 b. 用法:放在catch最后 c. 用处:组合try...catch使用,用于释放资源等收尾工作,无论try...catch语句如何执行,finally的代码一定会执行 ② 抛出异常 1) 当我们不想处理异常,或者能力处理的时候,我们可以选择跑出异常,谁调用方法谁吹了异常,使用关键字throws ③ Jvm的处理异常的方式(默认处理): 1) 如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行并且还会种植程序,异常后面的代码将不再执行 ④ 如何处理多个异常 1) 可以使用多个try...catch语句 2) 使用一个try和多个catch a. 多个catch之间的顺序 a) 父类异常要放在最后 ⑤ Throwable的常用方法: 1) 用catch里面的异常名.方法 a. String getmessage():原因 b. String toString():类型和原因 c. Void printStackTrace():类型原因和位置 (4) 异常分类: ① 运行时期异常 1) RuntimeException的子类就是运行时期异常,在编译时期可以选择处理或者不处理 ② 编译时期异常 1) 是Exception的子类,非RuntimeException的子类,在编译时期必须处理 (5) 自定义异常 ① 为何要自定义异常:自己编写代码给别人使用,那么如果使用有问题,那么需要给出错误信息,这个时候可以选择抛出异常,如果想名字见名知意,就可以自定义异常 ② 怎么定义:定义类,继承Exception或者RuntimeException,定义两个构造,一个无参,一个带一个字符串参数 2. 递归 (1) 概念:把大问题拆成很多小问题,然后再把小问题拆成更多的小问题,当我们把更多的小问题解决了,小问题也解决了,随着小问题的解决,大问题也随之解决了。方法本身不断的调用方法自己 (2) 注意事项 ① 递归一定要有出口,内存溢出 ② 递归次数不宜过多,内存溢出 3. file类 (1) 概念:文件和目录路径名的抽象表示形式,file类的实例不可改变 (2) 构造方法: ① file(File parent, String child)格局指定的父路径对象和文件路径创建File对象 ② file(String pathname)将制定的路径名转换成一个File对象 ③ file(String parent,String child)根据指定的父路径和文件路径创建File对象 (3) 常用功能:太多了,详见APIε=(´ο`*)))唉 ① 创建功能 1) boolean createNewFile()创建文件 2) boolean mkdir()创建文件夹 3) boolean mkdirs() 创建多个文件夹 ② 删除功能 1) boolean delete()删除指定的文件夹 ③ 获取功能 1) File getAbsoluteFile()获取绝对路径 ④ 判断功能 1) boolean exists() (4) 重要的获取功能: ① String[] list():返回当前路径下所有的文件和文件夹名称 ② File[] listFiles():返回file数组, ③ static File[] listRoots:返回所有盘符 4. IO流体系 (1) 流向 ① 输入流:读数据 FileReader 父类是Reader ② 输出流:写出数据 FileWriter 父类是Writer (2) 数据类型 ① 字节流 1) 字节输入流: 读取数据 父类:InputStream 2) 字节输出流: 写出数据 父类:OutputStream ② 字符流 1) 字符输入流: 读取数据 父类:Reader 2) 字符输出流: 写出数据 父类:Writer 5. 其他: (1) .lenth()不能直接统计文件夹的大小,只能将文件夹内的的所有文件大小加起来 day101. IO流: (1) 数据流 ① 数据源:键盘 ② 目的地 (2) 不同IO流区别:操作的数据类型、效率、数据源和目的地不一样 (3) 案例 ① System.in 是一个字节输入流,指向的数据源来自键盘录入 1) Scanner只是将System.in进行了包装 ② System.out 是一个字节输出流,目的地指向控制台 (4) OutputStreamWriter(OutputStream out):输出转换流,把字节输出流转换成字符输出流 (5) InputStreamReader(InputStream in):输入转换流 2. 打印流 (1) PrintStream (2) PrintWriter ① 可以自动换行,println ② 不能输出字节,但是可以输出其他任意类型 ③ 通过某些配置,可以实现自动刷新(只有在调用println,printf,format才有用) ④ 也是包装流,不具备写出功能 ⑤ 可以把字节输出流转换成字符输出流 (3) 注意:只能输出 3. 对象操作流:可以用于读写任意类型的对象 (1) ObjectOutputStream ① writerobject (2) ObjectInputStream ① readobject (3) 注意: ① 使用对象输出流,只能用对象输入流来读写 ② 只能支持java.io.Serializable接口的对象写入流中(操作的接口必须实现serializable) 4. IO流的各种常用的创建格式:未完成 (1) 高效输出流:BufferedWriter bw=new BufferedWriter(new FileWriter(“路径”)); (2) 高效输入流:BufferedReader br=new BufferedReader(new FileReader(“路径”)); (3) 字符打印流:PrintWriter pw=new PrintWriter(new FileWriter("路径"),true); (4) 字节打印流:PrintReader pr=new PrintReader(new FileReader("路径"),true); (5) 高效字节输入流:BufferedInputStream bis=new BufferedInputStream(new FileInputStream(“路径”)); (6) 高效字节输出流:BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(“路径”)); 5. Properties:比较重要,用法类似于Map,但是泛型用String就好,两个重要的方法1.load:相当于read,需要传入一个read对象。2.store:相当于writer,需要传入一个writer对象 day111. 进程:当前正在运行的程序,一个应用程序在内存中的执行区域 (1) 一个进程可以有一个线程,也可以有多个线程 ① 单线程:安全性高,效率低 ② 多线程:安全性低,效率高 2. 线程:进程中的一个执行控制单元,执行路径 3. 多线程 (1) 实现方式1: ① 定义类,继承Thread ② 重写run方法 ③ 创建Tread子类对象 ④ 调用start()方法 注意:不是调用run方法 (2) 实现方式2: ① 定义类,实现runnable接口 1) class 类名 implement Runnable ② 重写run方法 ③ 创建runnable实现类对象 1) 类名 变量名 =new 类名; ④ 创建Thread的对象,将Runnable实现类对象传递进去 1) Thread t=new Thread(类名); ⑤ Thread的对象,调用start()启动线程 1) t.start(); 4.注意:继承Thread的时候,多线程共享数据的时候要加static,synchronized (this)不能再用this最好用类名.class
|