IO流的前奏. Exception和File类

来源:互联网 发布:java list 排序 编辑:程序博客网 时间:2024/06/04 19:25

Exception

异常类:Throwable,两个具体的子类:Error, Exception

 

Exception子类:

         1)编译时期异常:只要不是RuntimeException中的异常都属于编译时期异常.比如:IOException(IO流中的),ParseException(解析异常)

         出现的原因:要么语法有问题,要么使用的是Sun公司提供的一些类的中的方法,(这个方法本身调用的时候就会异常存在),调用者必须处理,不处理不行,需要编译通过.

         2)运行时期异常:RuntimeException

         可能由于代码的逻辑不够严谨导致的问题. 举例,NullPointerException:空指针异常!需要对对象进行非空判断,来防止该问题的出现!

 

编译时期异常:必须给出处理,否则编译不通过.必须显示处理.

运行时期异常:可以不处理,也可以显示处理

 

处理异常的两种方式:

         1)标准格式: try…catch…finally    捕获异常.

         2)throws 抛出异常

 

         方式1: 处理异常

                   try…catch…finally

                   变形格式:

                            try…catch(常用)

                            try…catch…catch

                            try…finally…

                   使用格式:

                            try{

                                     //可能会出现问题的代码,可能有很多行!

}catch(异常类名变量名){

         输出语句处理

}

         如果存在多个异常,处理的方式:

                   1)针对对个异常分别try…catch.  这种做法很麻烦!

                   2)try{

         可能会出现问题的多个语句

}catch(异常类名1  变量名){

         输出语句处理

}catch(异常类名2  变量名){

输出语句处理

}

         针对多个异常进行处理,第一个异常如果是大异常,那么后面可以不用再给了!

         大异常必须放在小异常的后面

         针对多个异常,Jdk7以后又出现了一种新的处理方式:

                   try{

         可能会出现问题的代码

        

}catch(异常类名1 |异常类名2 … 变量名){

         处理异常

}

注意:

                                      i.             针对多个异常类名之间是一种平级关系

                                    ii.             这种格式在实际开发中,虽然有多个异常,但是根据具体的异常给出具体的处理.

try里面的代码一旦出问题了,那么Jvm java虚拟机就会针对这个问题抛出一个异常,然后和Catch里面的所描述异常进行是否匹配,如果一致就会产生一个异常对象,然后去处理这个异常对象,就会调用异常中的一些方法

常用的方法:

                         public StringgetMessage()

                                   消息字符串

                         public String toString()

                         描述字符串:

                                   1)当前类的全路径名称(指的是当前异常类名所在的包的全路径名称)

                                   2)":"(冒号和一个空格)

  

                         public voidprintStackTrace():

                                            该方法是里面包含了消息字符串以及当前出现错误的异常的时候所描述哪个包下以及代码中具体的错误出现在第几行返回值是void,也就直接在控制台输出

 

异常的第二种处理方式:

         throws:抛出异常

         实际开发中,尽量不要在main()方法中抛出异常,在子方法中可以抛出异常.

面试题(重要):

         throwsthrow的区别:

                   throws:抛出

                                   后面跟的异常类名,可以跟多个异常类名,中间用逗号隔开

                                   throws在方法声明上抛出,表示异常的一种可能性

                                   由调用者去处理

                                    throws表示抛出异常的一种可能性

               throw:抛出

                                   后面跟的异常对象(匿名对象),只能跟具体的一个异常对象

                                   throw在方法中的语句中抛出,表示异常的绝对性

                                   有方法中某些语句处理

         实际开发中:throws要比throw用的多,try...catch...又比throws用的多!

 

try…catch…finally的用法:

         finally经常用在数据库或IO流中,用来释放资源.

         finally中的代码一定会被执行,不执行只有一种情况: Jvm退出了---->System.exit(0);

面试题:

         final,finalizefinally的区别:

                   final:最终,终态的意思

                            修饰类:类不能被继承.

                            修饰成员方法:成员方法不能被重写.

                            修饰成员变量:此变量为常量

                   finalize:它表示通过gc垃圾回收器回收不用的对象或者是变量,System.gc():实质,调用的是重写了Object类中的finalize()方法,表示回收没有更多引用对象或者变量等等...

                   finally:不能单独使用,try...catch...finally中一块使用,(异常,IO,数据库中中使用的),是用来释放资源,finally中的代码一定会执行,并且除非Java虚拟机Jvm退出了,才不会执行!

 

 

  面试题:

                如果catch里面有return语句,那么finally中的代码还会执行吗?如果可以,是在return前执行还是return后执行?

                ----会执行;并且在return前执行!

:

         publicstatic void main(String[] args) {

                   System.out.println(getInt());

         }

         //方法

         privatestatic int getInt() {

                   inta = 10 ;

                   try{

                            System.out.println(a/0);

                            a= 20 ;

                   }catch(ArithmeticExceptione){

                            a= 30 ;

                            returna ;

                            /**

                             * 代码走到这里,return a,return 30 ,在这里形成了一个方法返回路径

                             * 但是,finally中代码只有在Jvm退出了,才不会执行,所以a = 40 ;

                             * 但是,由于之前已经返回路径,代码就要执行到return;

                             */

                   }finally{

                            a= 40 ;

                   }

                   returna;

                   }

自定义异常类:

         自定义一个类,继承自Exception或者RuntimeException.

异常的注意事项:

         1) 子类在重写父类的方法的时候,如果父类中方法有抛出异常,那么子类重写的这个方法,抛出异常不能比父类中该方法的异常大,(最起码应该保持一致).

         2) 子类继承父类,要重写父类方法的时候,如果父类中该方法没有异常,那么子类在重写该方法的时候,不能抛出异常,只能捕获异常.

 

File类

File: 是用来描述文件或者目录(文件夹)的路径的抽象表现形式.

 

常用构造方法:

         publicFile(String pathname): 给定路径名以字符串来表示当前这个文件或者文件夹(推荐第一种构造方法)

         publicFile(String parent,String child): 根据parent路径名字符串和child路径名字符串创建一个新的File对象.

         PublicFile(File parent,String child): 根据parent 抽象路径名和 child 路径名字符串创建一个新 File 实例

         例:File f =new File(“d:\\work\\a.txt”);

           File f2 = new File(“d:\\work”,”a.txt”);

           File f3 = new File(“d:\\work”);

           File f4 = new File(f3,”a.txt”);

使用File对象创建文件或文件夹:

         publicboolean mkdir() 创建此抽象路径名指定的目录(文件夹).如果当前某个盘符下已经有了这个目录(文件夹),就不会在创建了.

         publicboolean createNewFile() 创建文件,如果已经有了这个文件,不在创建并且该方法本身就会编译时期异常throws IOException

         publicBoolean mkdirs() 创建此路径名指定的目录,包括所有必需但是不存在的父目录. (创建文件夹,文件夹不存在,才开始创建).

 

         注意:

                        i.             清除自己要创建的是文件夹还是文件,方法不一样!

                      ii.             没有带盘符,默认到当前项目下创建文件或者文件夹.

 

File类的删除功能:

         PublicBoolean delete() 删除此抽象路径名表示的文件或目录(文件夹)

                   注意:

                                                    i.             删除方法不能删除带有目录或者文件的文件夹.

                                                  ii.             删除多个目录,必须逐一删除.

File类的重命名功能:

         PublicBoolean renameTo(File dest) 重新命名此抽象路径名代表的文件.

                   注意: 当两个抽象路径一致,那么只是重命名,当这两个抽象路径不一致时,那么剪切并且改名.

 

File类中的判断功能:

         PublicBoolean isDirectory() 判断是否是文件夹.

         PublicBoolean ifFile() 判断是否是一个标准文件.

         PublicBoolean canRead() 判断是否可读.

         PublicBoolean canWriter() 判断是否可写.

         PublicBoolean isHidden() 判断是否是隐藏文件.

         PublicBoolean isAbsolute() 判断此路径名是否是绝对路径.

File类中的获取功能:

         PublicFile getAbsolutePath() 获取当前文件或文件夹的绝对路径.

         PublicString getPath() 获取相对路径

         Publiclong length() 返回此路径名表示的文件的长度.

         Publiclong lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间.

         PublicString getName() 获取名称.

File类的高级获取功能:

         publicString[] list():返回对象是一个字符串数组,当前哪个一盘符下的所有的文件以及文件夹的字符串名称数组

         public File[]listFiles():返回对象是一个File数组,当前哪个盘下的所有的文件以及文件夹的File数组