一、异常

异常有两种选择:throws和catch,一种是抛给调用者,另一种是在本方法中捕获处理。

选择标准:如果知道如何处理就catch,不知道如何处理就throws

异常种类:Throwable是父类, 1⃣️Error子类是系统错误不可控,所以不用抛出、不用处理 2⃣️Exception/RuntimeException是可控的要被控制,我们的代码不应有数组越界等错误 3⃣️Exception/IOException是文件读写错误,类加载错误

1⃣️2⃣️是不需要throws和catech的,3⃣️是需要throws或catch的,并且如果throws要列出所有可能抛出的IOException

public static void func1() throws IOException {//列出所有可能抛出的的IOException
  try{
     //检测代码
  }catch(FileNotFoundException | UnKonwHostException) {
  	// 处理捕获异常
  	throw new ServeletException("xx"); //也可以再次抛出异常
  }finally {
  	//最后一定执行的代码,常做一些关闭文件,释放资源的事情, 对于close也可能爆出异常,对此可以用带资源的try语句,保证最后关闭资源
  }
}

二、日志

将提示信息按照不同级别打印到指定文件中

1.JDK的Logging

import java.io.UnsupportedEncodingException;
import java.util.logging.Logger;
public class Main {
    public static void main(String[] args) 
        Logger logger = Logger.getLogger(Main.class.getName());
        logger.info("Start process...");
        try {
            "".getBytes("invalidCharsetName");
        } catch (UnsupportedEncodingException e) {
            // TODO: 使用logger.severe()打印异常
        }
        logger.info("Process end.");
    }
}

如果要打印到指定文件需要修改配置文件,JVM启动时传递的参数-Djava.util.logging.config.file=config-file-name

2.Commons Logging和Log4j

参考https://www.liaoxuefeng.com/wiki/1252599548343744/1264739436350112

3.SLF4J和Logback

https://www.liaoxuefeng.com/wiki/1252599548343744/1264739155914176


Be Water, My Friend.