java编程自学记录(day15)

来源:互联网 发布:苹果能ghost windows 编辑:程序博客网 时间:2024/04/27 13:47
Exception类
 1)Java异常结构中定义有Throwable类,Exception和Error是其派生的两个子类。
 Exception表示由于网络故障、文件损坏、用户输入非法等情况导致的异常。是程序级别的错误
 Error表示系统级别的错误,比如内存溢出。这是我们处理不了的
 2)异常处理语句是try-catch语句,catch块可以出现很多次
   try{
    可能发生异常的片段代码
   }catch(NullPointerException e){ //列举代码中可能出现的异常类型
    当出现了列举的一场类型后,在这里处理
   }catch(StringIndexOutOfBoundsException e){
   
   }... ...
  在异常捕获机制的最后书写catch(Exception e)捕获未知的错误(或不需要针对处理的错误),这样可以捕获没有想要
  针对性处理的异常。
  catch捕获是从上到下,即从第一个catch检测,直到最后一个catch块,当检测到catch并响应后,退出try中的语句
 3)throw关键字:用于主动抛出异常
  使用环境:在方法中主动抛出异常,但不是什么情况下我们都应该抛出异常。原则上,自身决定不了的应该抛出
  问:方法中什么时候该自己处理异常,什么时候该抛出?
  答:方法通常有参数,调用者在调用我们的方法帮助解决问题时通常会传入参数,若方法的逻辑是因为参数的错误而引发的
 异常,则应该抛出,若是我们自身的原因则应该自己处理。
 4)throws关键字:
  声明方法时,我们可以同时声明可能抛出的异常种类,通知调用者强制捕获。可以类比:“丑话说前头”。
  原则上throws声明的异常,一定要在该方法中抛出,否则没有意义,相反的,若方法中主动通过throw抛出一个异常,应该
 在throws中声明该种类异常,通知外界捕获。
  main方法不要抛出异常,因为main方法抛出的异常是被jvm捕获,jvm捕获后直接会kill掉
 5)finally关键字
  finally块定义在catch块的最后,只能出现一次。(只能出现0-1次),无论程序是否出错都会执行的块!
 
java抛出异常的机制:
 1)java虚拟机(jvm)在运行程序时,一旦在某行代码运行时出现了错误,jvm会创建这个错误的实例并抛出。这时jvm会检查出错
 代码所在的方法是否有try捕获,若有,则检查catch块是否有可以处理该异常的能力。若没有,则将该异常抛给该方法的调用者
 。以此类推,直到抛至main方法外仍没有解决,那么jvm会中止该程序。
 2)java异常Exception分为:
  运行时异常:编译时不检查异常
  可检查异常:编译时检查
 RuntimeException及其子类:运行时异常
  若方法中抛出该类异常或其子类,那么声明方法时可以不在throws中列举该类异常的抛出
 RuntimeException的子类:NullPointerException、ArraysIndexOutOfBoundsException、
 ClassCastException、IllegalArgumentException等,不要去刻意记住。

重写方法时的异常处理注意事项
 若使用继承时,在父类的某个方法上宣告了throws某些异常,而在子类中重写该方法时,可以按如下方法处理:
 1)不处理异常(重新定义时不设定throws)
 2)可仅throws父类别中被重写的方法上的某些异常
 3)可throws被重写的方法上的异常的子类
 但是不可以按照如下方式处理:
 1)throws出额外的异常
 2)throws被重新定义的方法上的异常的父类

File 文件类
 java使用File类表示操作系统上文件系统中的文件或目录,我们可以使用File操作磁盘上的文件或目录。
 File可以描述文件或目录的名字,大小等信息,但是不能对文件内容进行操作。
 1)使用File类可以创建文件和目录,创建File实例时,要向构造方法传递路径参数(以字符串形式),路径可以是绝对路径,
 也可以是相对路径。相对路径:“.”代表当前目录的路径,即本程序所在工程目录的路径。
 eg: File file = new File("."+File.separator+"readme.txt");
 2)由于windows和linux描述目录所用的分隔符不同,因此在描述路径时应该使用File.separator这个常量。
 3)File类常用方法
  a.exist()
  检查file实例的文件或目录是否存在。
  b.createNewFile()
  在file实例的路径下创建新文件
  c.mkdir()
  在file实例路径下创建新目录(单级目录),只能在已有的目录基础上再创建一个目录
  d.mkdirs()
  与mkdir()方法对应,可以创建多级目录,可以在已有目录的基础上建立一个目录,并在此目录的基础上再创建一个目录..
 可以创建很多级目录
  e.File(File dir, String file)
  新的构造方法,在已经创建的目录之上创建一个文件或目录
  f.File[] listFiles()
  返回目录下所有子目录及文件,如果调用过程中出错了,则会返回一个null
  g.boolean delete()
  删除文件及目录,返回删除成功与否。删除目录的前提:目录下不能有任何子项
  h.toString()
  返回文件或者路径名,会以全路径的方式返回
 4)在写路径时,通常可以省略“./”,直接写文件或目录路径,这时File默认是在当前目录进行操作

良好的编程习惯:
 1)在异常捕获机制的最后书写catch(Exception e)捕获未知的错误(或不需要针对处理的错误)
 2)在自定义方法时,一定要在开头对传进来的参数做一个安全检查。
 3)不到万不得已,尽量不要使用递归,因为这样非常小号资源。
 
其他方面的知识:
 1)一说到工具类,就要知道其里面实现的都是静态方法,随时可以调取
 2)对于try-catch-finally语句中存在return语句的总结。
  a.三者之中都有return语句,则只执行finally中的return,且finally中的语句是在return之前完成的。
  b.若finally中没有return语句,触发了异常就执行catch中的return语句,没有触发就执行try中的语return。
 但是finally中的语句执行在return之前。
  c.若finally语句中发生错误或者异常,则会直接退出程序,自然也执行不到return语句了


0 0
原创粉丝点击