JAVA 笔记(三)

来源:互联网 发布:mac osx系统下载 编辑:程序博客网 时间:2024/05/18 02:13
java中的异常
Throwable类 java中错误的定级父类

其下有两大子类
ErrorJRE出现的错误。程序员无能为力,我们不能通过代码的方式解决这类错误

Exception程序级别的错误。我们可以通过代码捕获该类异常,并可以解决

java中使用try catch来完成对异常的捕获和解决的

try{
   可能出现错误的代码片段
}
try语句块:由try关键字和一组大括号{}构成。
在大括号中编写可能出现错误的代码。
try块可以独立存在。
try块后通常会紧跟1-n个catch块,catch块是用来捕获并解决出现的这类异常的。catch块可以有若干个。

catch(SomeException e){
  异常的解决代码片段
}

通常情况下try后面都要写catch

java中异常抛出的机制
jvm在运行我们的程序时,若出现了一个异常,jvm会创建一个该类异常的实例并抛出,这时jvm会检查出现异常的代码外是否有try块包围,若有则检查try后面的所有catch块。将创建的异常实例顺序调用catch,将调用兼容该异常实例的catch块进行异常处理。

catch定义捕获类型的顺序应该是子类异常在前,父类异常在后。

为了防止我们程序出现catch中未列举的异常而导致程序非正常结束,我们应在最后一个catch中捕获Exception异常。

jvm创建异常实例并通过catch块将该异常交给我们。对于异常我们有几个常用方法。
getMessage():用来获取有关异常事件的信息

printStackTrace():输出异常的堆栈内容

throw关键字,用于主动抛出异常

throows关键字
在声明方法时声明该方法可能抛出的异常。一旦声明了,调用该方法的调用者就需要强制捕获该异常。

通常情况,方法中抛出什么异常就应该在方法声明时声明这种异常的抛出!
有一个例外,RuntimeException及其子类在方法中被抛出时,不需要在方法声明时声明该类异常的抛出

RuntimeException的常见子类:
NullPointerException
  空指针异常

NumberFormatException:
  数字格式异常

ArrayIndexOutOfBoundsException
  数组下标越界 

ClassCastException
  类造型异常

RuntimeException属于非检查期异常,也就是说在编译过程中,会忽略检查该类异常在方法声明中定义的抛出。

finally关键字
finally块出现在异常捕获机制的最后catch块后。或try块后。
finally块无论程序是否出错都将强制执行。
finally块只能写一次,
finally中不应该书写return语句,否则方法的正常返回值都不能得到返回了。

子类继承父类并重写父类方法时,若父类声明了异常抛出throws
子类重写方法时可以:
不处理异常(不设定throws)
仅抛出父类定义的部分异常,抛出父类定义的异常的子类异常

不可以:
throws父类没有的异常
throws父类方法声明的异常的父类异常

throw是抛出异常,当方法中遇到该语句时,方法结束,并抛出异常。所以throw后面不要再有必然会执行的语句,否则编译错误。

File类
用于描述文件系统中的一个文件或目录。
File的一个实例就代表一个目录和
文件。
通过File实例我们可以得知它所表示的文件或目录的名字,大小,修改日期等等信息。但是不能对文件内容进行操作。

编写一个方法。
public void deleteFile(File dir){

}
传入的File是一个目录,要做到成功将该目录删除,前提是该目录内部有多级目录和文件
FileFilter文件过滤器,FileFilter是一个接口,里面必须实现一个抽象方法accept()用来定义过滤文件的规则。    

文件过滤器用在File的重载方法listFiles(FileFilter filter)
用于获取当前目录下的部分子项

RandomAccessFile,可以读写文件内容的类。

java文件模型,硬盘中存储的一切都是字节。byte by byte,使用RandomAccessFile可以打开一个文件并对文件进行读写操作。

打开文件可分为只读和读写形式。打开文件操作完毕后要关掉,释放资源。

java的IO I/O  input/output

输入流和输出流

输入流:用于读取数据的流输出流:用于写出数据的流,流的方向是基于程序定的

流根据处理单位分为:字节流字符流
字节流:以字节为单位读写数据
字符流:以字符为单位读写数据

流分为:
低级流:节点流
高级流:处理流,过滤流

低级流:数据有明确来源和去向
高级流:高级流不能独立存在,需要处理另一个流。

文件输入、输出流
FileInputStream:文件输入流
FileOutputStream:文件输出流

缓冲字节输入流与缓冲字节输出流
BufferedInputStream
BufferedOutputStream

BIS&BOS是高级流

内部维护着一个缓冲区。可以进行高效的读写操作。

区分高级流的最显著特点是看构造方法,若需要传入其他流,那么这个流就是一个高级流。

高级流不能独立存在,因为没有意义,高级流的作用就是对它处理的流中的数据进行加工方便我们读写的。
净水器就是典型的现实中的高级流
DIS & DOS
DataInputStream
DataOutputStream
可以方便的对基本类型数据进行读写。

字符流
以字符为单位读写数据的流
从类的命名上就很容易区分字节流和字符流
字符输入流以Reader结尾
字符输出流以Writer结尾

流其实都是以字节进行读写的,字符流只是在字节流的基础上以字符为单位进行读写数据,所以字符流都是高级流

字符输入流:
InputStreamReader

字符输出流
OutputStreamWriter

字符流可以使用重载构造方法,在创建流的时候指定编码集,这样可以以指定的编码集进行读写数据

InputStreamReader(InputStream in,String charset)

OutputStreamWriter(OutputStream out,String charset)

缓冲字符输入输出流
BufferedReader
BufferedWriter
为单位进行读写数据。

FileReader与FileWriter
文件字符输入流和文件字符输出流
用于读写文本文件的流
可以方便的读取文本文件,但是也有缺点,不支持设定字符集

PrintWriter
另一种缓冲字符输出流

构造方法:
PrintWriter(File file):创建向给定文件写字符的字符输出流

PrintWriter(OutputStream out):
创建一个基于字节输出流的缓冲字符输出流

PrintWriter(Writer writer):
字符输出流转换为缓冲字符输出流

PrintWriter(String fileName):
创建给定路径的文件的字符输出流

0 0
原创粉丝点击