QQ泡沫乐园 · 免费提供游戏辅助,破解软件,活动资讯,喜欢记得收藏哦!
综合软件_线报活动_游戏辅助_最新电影_最优质的的辅助分享平台

java中常见的异常和日志处理.暑假充电计划开启

网络 2022-12-22 06:01

非常详尽! 记录 java 中的异常日志处理. 假期充电计划开启中------------------- 异常/ 日志: 异常: java 中常见的异常: 简单捕获异常: 多个 catch 语句捕获异常: finally 语句,一定会执行的句子: 抛出异常: 关于 NullPointerException 的处理: 断言: 日志: JDK Logging: Commons Logging: 异常: java 中常见的异常: ———— 错误 ——————- OutOfMemoryError :内存用尽 NoClassDefFoundError :无法加载某个 Class StackOverflowError :栈溢出 常见异常图表 常见异常图表: Exception │ ├─ RuntimeException │ │ │ ├─ NullPointerException 对某个`null`的对象调用方式或数组 │ │ │ ├─ IndexOutOfBoundsException 字段索引越界 │ │ │ ├─ SecurityException │ │ │ └─ IllegalArgumentException 参数检测不合法 ││ │└─ NumberFormatException 数值类型的格式错误 │ ├─ IOException │ │ │ ├─ UnsupportedCharsetException │ │ │ ├─ FileNotFoundException 未找到文件 │ │ │ └─ SocketException 读取网路失败 │ ├─ ParseException │ ├─ GeneralSecurityException │ ├─ SQLException │ └─ TimeoutException Java 规定: 规定: 必须捕获的异常,包括 Exception 及其泛型,但不包括 RuntimeException 及其泛型,这种类型的异常称为 Checked Exception。

不需要捕获的异常,包括 Error 及其泛型, RuntimeException 及其泛型。 简单捕获异常: 使用 try ... catch ... 进行捕获 public class error {public static void main(String[] args) {byte[] bs = toGBK("中文");System.out.println(Arrays.toString(bs));}static byte[] toGBK(String s) {try {return s.getBytes("GB");} catch (UnsupportedEncodingException e) {// 如果系统不支持 GBK 编码,会捕获到 UnsupportedEncodingException:// 异常的找寻 查看 getBytes 源码, 看看会抛出哪些异常, 就晓得这儿接受哪些异常// 实在不是很清楚异常是哪些, 直接用 Exception 接受, 这也是最后办法。System.out.println(e);e.printStackTrace(); // 打印异常栈return s.getBytes(); // 返回默认编码}} } 在 在 Java 中,凡是可能抛出异常的句子,都可以用 try ... catch 捕获。

把可能发生异常的句子置于 try { ... } 中,然后使用 catch 捕获对应的 Exception 及其泛型。 类。 多个 catch 语句捕获异常: 可以使用多个 catch 语句,每个 catch 分别捕获对应的 Exception 及其泛型。捕获到异常后,会从上到下匹配 catch 语句,匹配到某个 catch 后,执行 catch 代码块,然后不再继续匹配。 简单地说就是:多个 catch 语句只有一个能被执行 这儿注意一点, 多个 catch 语气的时侯, 顺序很重要, 异常的泛型必须写在上面,否则异常捕获不到。 例如: public static void main(String[] args) {try {process1();process2();process3();} catch (UnsupportedEncodingException e) {System.out.println("Bad encoding");} catch (IOException e) {System.out.println("IO error");} } // UnsupportedEncodingException 是 IOException 异常的泛型 , 所以须要置于上面 这儿须要考虑一点, 如果异常不是泛型的关系,那我们在编撰多个 catch 语句的时侯, 如果下方代码是一样的, 就可以用 | 把这二个句子合并上去,就像这样 catch (IOException | NumberFormatException e) ,就可以少编撰一些相同的代码, 避免引起冗余。

finally 语句,一定会执行的句子: 句子 – -- – -- 不管有没有形成异常,或者异常有没有被捕获, 规定finally 下的句子一定会被执行. 例如: public static void main(String[] args) {try {System.out.println("捕获异常")} catch (UnsupportedEncodingException e) {System.out.println("Bad encoding");} catch (IOException e) {System.out.println("IO error");}finally{System.out.println("我一定会被执行的!")} } 注意几点 注意几点: 1 finally 语句不是必须的,可写可不写; 2 finally 最后执行。 3. finally 总是确保一些句子一定会被执行 抛出异常: 简单的抛出异常: throw Exception e — (Exception 代表异常类型) 异常的多级传播,以及怎样正确的抛出而且捉住: public class throwError {public static void main(String[] args){try {fun1();}catch (Exception e){e.printStackTrace();}}static void fun1(){try {fun2();}catch (NullPointerException e){throw new IllegalStateException(e);}}static void fun2(){throw new NullPointerException();} } // 这样模拟了,异常是怎样转换的, 我们在 fun1 中调入函数 fun2 抛出了一个异常, 然后又 fun1, 去接受而且转换这个异常类型, // 但这儿要注意点, 在 fun1 中, 如果不把这个原始异常向下抛出的话, 那么复印异常栈 就可能会出错, 就找不到错误的最终诱因。

idea抛出异常快捷键_php try catch 抛出异常后不停止_记录日志的时候不要抛出异常

捕获到异常并再度抛出时 捕获到异常并再度抛出时,**一定要留住原始异常 ! ** 异常栈 是最后复印的, 如果有 finally 也是先复印 finally 之后,在复印异常栈。 关于 NullPointerException 的处理: 假如我们操作的对象中,存在空值, 那都会抛出这个异常, 他是异常中很常见的, 也是我们最要去防止的。 在 java 中, 尤其要谨慎使用 Null 值, 能用 空字符串 或者空链表返回最好,尽量不要用 null 值 来返回参数. 如果形成了怎样去捕获这个异常 : // 比如我们在这个背面代码中, 我们定义了 a b 空值。 这一定会报错。 public class throwError { public static void main(String[] args) {ss a = new ss();System.out.println(a.b.toUpperCase()); } } class ss{ String a; String b; } return Exception in thread "main" java.lang.NullPointerExceptionat random.throwError.main(throwError.java:6) // 这个异常栈难以判定到底是谁形成了空值。

在 JDK14 中, 我们可以开启一个新的功能,就能捕获这些异常: 如下: return Exception in thread "main" java.lang.NullPointerException:Cannot invoke "String.toUpperCase()" because "a.b" is nullat random.throwError.main(throwError.java:6) 再 那再 IDEA 中,如何向 JDK 添加参数呢? 添加参数呢? 这个方式我也是寻问他人才晓得的, 哎。 第一步: 第二步: 参数: -XX:+ShowCodeDetailsInExceptionMessages断定: 断言(Assertion)是一种调试程序的形式。在 Java 中,使用 assert 关键字来实现断定。 呃呃, 基本没啥好处, 懒得写笔记了, 最气人的还是这个功能如今默认都是关掉的, 代码运行到 assert 就会直接忽视掉。 日志: 日志拿来记录程序中出现的各类错误, 一般在容易出问题的代码下边加上日志句子,java 中关于日志的类好多, 我总结一下。

idea抛出异常快捷键_记录日志的时候不要抛出异常_php try catch 抛出异常后不停止

好处: 1 可以设置输出款式,避免自己每次都写 "ERROR: " + var ; 2 设置输出级别,禁止个别级别输出。例如,只输出错误日志; 3 被重定向到文件,这样可以在程序运行结束后查看日志; 4. 可以按包名控制日志级别,只输出个别包打的日志; JDK Logging : public class Hello {public static void main(String[] args) {Logger logger = Logger.getGlobal();System.out.println("The main is starting!")logger.info("start process...");// logger.warning("warning ");// logger.fine("ignored.");// logger.severe("severe...");} } return ---> The main is starting!信息: start process JDK 的 Logging 定义了 7 个日志级别,从严重到普通: SEVERE WARNING INFO CONFIG R FINEST 默认级别是 INFO,因此,INFO 级别以下的日志,不会被复印下来。

使用日志级别的用处在于,调整级别,就可以屏蔽掉好多调试相关的日志输出, 但是这个 Loggging 是由局限性的,反正不是挺好用, 这里介绍一下,作为一个了解就行了,使用其他方式更好! Commons Logging : Commons Logging 是一个第三方日志库,它是由 Apache 创建的日志模块。 Commons Logging 的特色是,它可以挂接不同的日志系统,并通过配置文件指定挂接的日志系统。默认情况下,Commons Loggin 自动搜索并使用 Log4j(Log4j 是另一个流行的日志系统),如果没有找到 Log4j,再使用 JDK Logging. 这个库须要安装 ! Commons Logging 定义了 6 个日志级别: FATAL ERROR WARNING INFO DEBUG TRACE 引用方式: import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; // 实例方式引用 public class Person {protected final Log log = LogFactory.getLog(getClass());// 实例方式使用 getClass() 承继的基类可以直接使用该 log, 直接能够是用 log 的形式void fun() {log.info("The error tell me !");} } // 静态方式引用 class Animal{static final Log logs = LogFactory.getlog(Animal.Class);// 静态方法只能使用 类 . Class 的方法去调用类名static void fun(){logs.info("The error not tell me!")} } Commons Logging 是使用最广泛的日志模块; Commons Logging 的 API 非常简单; Commons Logging 可以手动检查并使用其他日志模块。

上一篇:SCRM与传统CRM的不同呢?系统帮你解决 下一篇:没有了