△异常
1.生活中总会遇到这样那样的状况,比如感冒发烧,上班堵车,电脑蓝屏、死机等。在程序运行的过程中,也会发生各种状况,针对这些状况,Java语言中引入了异常这个概念,通过异常处理机制对程序运行时发生各种问题进行处理。
对于异常的处理确实是每个程序猿不得不面对的问题。
比如:
public class Test1 {
public static void main(String args[]){
int a = 10;
int b = 0;
int result = a/b;
System.out.println(result);
}
}
结果:Exception in thread "main" java.lang.ArithmeticException: / by zero由运行结果可以知道,程序发生了算数异常,这个异常是由于result对象是一个除法方式,而除法中除数不能为0,在编译时候,由于b传入了参数0,使运算出现被0除的错误。在这个异常产生后,程序会立即结束,无法继续向下执行。
在此需要注意的是,在Throwable类中有两个子类Error、Exception,Error用来表示编译时和系统错误,是比较严重的。Exception是可以被抛出的基本类型,在运行时故障中都可能抛出异常,值得一提的是在Exception类的子类中有一个特殊的RuntimeException类,用于表示运行时异常,除此之外,Exception的其他子类都用于表示编译时异常。当然我们可以用一些方法来获取异常信息。
比如:void printStackTrace()...
2.关于try...catch和finally
1)
public class Test2 {
public static void main(String args[]){
int a = 10;
int b = 0;
try{
int result = a/b;
System.out.println(result);}
catch(Exception e){
System.out.println("异常信息为:"+e.getMessage());
}
System.out.println("程序继续向下执行");
}
}
结果为:异常信息为:/ by zero程序继续向下执行
try...catch是一种对异常进行处理的方式,也叫异常捕获。在try代码块中编写可能发生异常的Java语句,catch代码块中编写针对异常进行处理的代码。当try中程序发生异常,系统会将这个异常的信息传递给catch。从Test2中可以看出,catch对异常处理完毕后,程序仍会向下执行,而不会异常终止。需要注意的是,在try中,发生异常的语句后面代码是不会被执行的。
2)有时候我们希望有些语句无论程序是否发生异常都要执行,这时就可以在try...catch语句后加一个finally代码块。
如:
public class Test1 {
public static void main(String args[]){
int a = 10;
int b = 0;
try{
int result = a/b;
System.out.println(result);
}
catch(Exception e){
e.getStackTrace();
System.out.println("异常信息为:"+e.getMessage());
return;
}finally {
System.out.println("进入finally");
}
System.out.println("程序继续向下执行");
}
}
结果是:异常信息为:/ by zero进入finally
在catch中加了一个return语句,用于结束当前方法,此时“System.out.println("程序继续向下执行");”就不会执行了,而finally中的代码仍会执行,并不会被return影响,也就是说不论程序是发生异常还是使用return语句结束,finally中的语句都会执行,所以今后程序设计时,可以用finally代码块来完成必须要做的事情。
3)要想知道方法中是否有异常,可以在方法后使用throws关键字对外声明该方法有可能发生的异常。
△File
File类是java.io包中唯一代表磁盘文件本身的对象。它定义了一些与平台无关的方法操作文件,可以通过调用File类中 的方法,实现创建、删除、重命名文件等操作。这个类的对象主要用来获取文件本身的一些信息,比如文件所在目录、文件长度等。所以需要记住一些方法即可。需要注意的是,如果路径名称中分隔符用\\。
如:
import java.io.File;
public class Test3 {
public static void main(String args[]){
//创建File文件对象,表示一个文件
File f = new File("C:\\Users\\jane\\Desktop\\test.txt");
//获取文件名称
System.out.println(f.getName());
//获取文件相对路径
System.out.println(f.getPath());
//获取文件觉得路径
System.out.println(f.getAbsolutePath());
//获取文件的父路径
System.out.println(f.getParent());
//获取文件大小
System.out.println(f.length()+"bytes");
//判断是否可读
System.out.println(f.canRead());
//判断是否可写
System.out.println(f.canWrite());
//判断是否是一个文件
System.out.println(f.isFile());
//判断是否是一个目录
System.out.println(f.isDirectory());
//判断是否是一个绝对路径
System.out.println(f.isAbsolute());
//是否成功删除文件
System.out.println(f.delete());
}
}
结果为:test.txtC:\Users\jane\Desktop\test.txt
C:\Users\jane\Desktop\test.txt
C:\Users\jane\Desktop
26bytes
true
true
true
false
true
true
△io流
I/O(input/output),即输入/输出。硬件来说就是每个设备都会有一个专用的I/O地址,用来处理自己设备的输入输出信息。比如电脑设备输入端口为键盘和鼠标,输出端口为显示屏。软件来说就是I/O即不同存储机制上的数据的读入写出。比如内存读写硬盘中的数据或者U盘中的数据。就比方说,我们写了一个程序后,当我们关闭程序,或者关闭电脑后,这些数据就没有了,它其实是存储在内存里了,在内存里进行运算。再比如,我创建了一个txt文件,写了一篇文章,写完以后,没保存就是没了,但我们点了保存,这些数据就从内存存到硬盘了,当我们关机再开机后,它仍然存在,这就是设备间的数据传输。
流是指一定的介质按照一定的方向流动的行为,在软件开发中指的是存储的数据的流动过程,这个数据源可以是硬盘中的文件、内存或者是网络中的某个URL
输入流:把数据从其他存储机制读入到当前内存机制当中
输出流:把内存当中的数据写出到其他存储机制当中
1)字节流和字符流
字节流:读取和写入数据的时候,以字节为最小单元进行读取和写入操作
字符流:读取和写入数据的时候,以字符为最小单元进行读取和写入操作,因为每个字符根据编码不同,所占用的字节个数不同,每次读取和写入字符时候,是不定长的字节个数写入读取。
字节输入流抽象基类:Inputstream
字节输出流抽象基类:OutputStream
字符输入流抽象基类:Reader
字符输出流抽象基类:Writer
文件字符输入流 FileReader
文件字符输出流 FileWriter
2)缓冲流
缓冲是I/O的一种性能优化,缓冲流自带缓冲区域,IO的缓冲区的存在就是为了提高效率,减少硬盘访问次数,提高读取文件效率,把要操作的数据放进缓冲区,然后一次性把缓冲区的内容写到目的地,而不是写一次就往目的地写一次。
字节缓冲输入/输出流:BufferedInputStream/BufferedOutputStream
字符缓冲输入/输出流:BufferedReader/BufferedWriter