Programming Clojure学习笔记——与Java一起工作

3.4  异常处理
异常处理的目的:
(1) 包装检查异常
(2) 使用finally块清理非内存资源如文件或网络句柄
(3) 响应问题:忽略异常,重新操作,转换异常为非异常结果

简化异常处理
在Clojure中,检查异常不是必须进行try..catch处理,如果不处理则直接忽略异常

资源清理
如果需要是否的资源有close方法,则可以使用with-open宏:
(with-open [name init-form] & body)
Clojure内部,with-open创建一个try块,将init-form的结果赋给name,然后运行body,最后在finally块中是否绑定到name的资源。如:
(defn spit [f content]
  (with-open [#^PrintWriter w (writer f)]
    (.print w content)))
(spit "hello.out" "hello, world")
将字符串"hello, world"写入文件hello.out

如果需要在finally块中做close以外事情,可以使用如下形式:
(try expr* catch-clause* finally-clause?)
; catch-clause -> (catch classname name expr*)
; finally-clause -> (finally expr*)

响应异常
最常见的情况是在catch块中响应异常。
示例:验证类是否可以
(defn class-available? [class-name]
   (try
      (Class/forName class-name) true
      (catch ClassNotFoundException _ false)))
如果类找不到,则抛出ClassNotFoundException异常,返回false

你可能感兴趣的:(java,工作,网络,clojure)