Java异常———获取异常的具体信息、获取异常类型、将异常栈转为String字符串

背景:

接口采用定时任务方式向MQ推送数据,每秒推送一条数据记录,因为量太大导致出了异常后无法追溯,于是需要将异常栈信息转为字符串保存到数据库中,这样就可以直接通过数据库知道记录推送失败的原因。

e:异常类型+具体异常信息;

e.getMessage():具体异常信息;

代码:

package sort;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;


public class ExceptionExample {
	@SuppressWarnings("null")
	public static void main(String[] args) {
		String text = null;
		try {
			InputStream is =new ByteArrayInputStream(text.getBytes("UTF-8"));
		} catch (Exception e) {
			System.out.println("引起异常的原因------>"+getExceptionType(e));
			System.out.println("异常信息------>"+getExceptionMessage(e));
			System.out.println("异常跟踪栈------>"+getExceptionSrintStackTrace(e));
		}
	}
	public static Throwable getExceptionType(Exception e) {
		return e;
	}
	public static String getExceptionMessage(Exception e) {
		return e.getMessage();
	}
	public static String getExceptionSrintStackTrace(Exception e) {
		StringWriter sw = new StringWriter();
		PrintWriter pw = new PrintWriter(sw);
		e.printStackTrace(pw);
		return sw.toString();
	}
	public static int number() {
		return 10/0;
	}
}

控制台:

引起异常的原因------>java.lang.NullPointerException
异常信息------>null
异常跟踪栈------>java.lang.NullPointerException
	at sort.ExceptionExample.main(ExceptionExample.java:14)

代码:

package sort;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;

import javax.sound.midi.MidiDevice.Info;

public class ExceptionExample {
	public static void main(String[] args) {
		try {
			int b = number();
		} catch (Exception e) {
			System.out.println("异常类型------>"+getExceptionType(e));
			System.out.println("异常信息------>"+getExceptionMessage(e));
			System.out.println("异常跟踪栈------>"+getExceptionSrintStackTrace(e));
		}
	}
	public static Throwable getExceptionType(Exception e) {
		return e;
	}
	public static String getExceptionMessage(Exception e) {
		return e.getMessage();
	}
	public static String getExceptionSrintStackTrace(Exception e) {
		StringWriter sw = new StringWriter();
		PrintWriter pw = new PrintWriter(sw);
		e.printStackTrace(pw);
		return sw.toString();
	}
	public static int number() {
		return 10/0;
	}
}

控制台:

异常类型------>java.lang.ArithmeticException: / by zero
异常信息------>/ by zero
异常跟踪栈------>java.lang.ArithmeticException: / by zero
	at sort.ExceptionExample.number(ExceptionExample.java:34)
	at sort.ExceptionExample.main(ExceptionExample.java:14)

 

### Java字符串类型换的方法 在 Java 编程语言中,`String` 是一种非常重要的数据结构。为了满足不同的编程需求,Java 提供了多种方式来进行 `String` 和其他数据类型之间的相互换。 #### 1. 将 `String` 换为整数 (`int`) 类型 Java 提供了两种主要方法用于将 `String` 换为 `int` 类型: - **`Integer.parseInt()`**: 这是一个静态方法,能够解析给定的字符串并返回对应的整数值。如果输入的字符串不是有效的数字格式,则会抛出 `NumberFormatException` 异常[^1]。 ```java String str = "123"; int num = Integer.parseInt(str); ``` - **`Integer.valueOf()`**: 此方法不仅返回一个 `Integer` 对象,还具有缓存机制,在某些情况下性能更优。最终可以通过自动拆箱将其转为原始类型 `int`[^5]。 ```java String str = "456"; int num = Integer.valueOf(str).intValue(); ``` #### 2. 基本数据类型换为 `String` 对于从基本数据类型(如 `int`, `double`, `char` 等)到 `String` 的换,有以下几种常见的方式: - **拼接空字符串**:通过简单的字符串连接操作可以完成这种换。这种方式简单直观但不推荐频繁使用因为效率较低[^3]。 ```java int number = 789; String result = number + ""; ``` - **利用 `String.valueOf()` 方法**:这是最通用也是官方推荐的一种做法,适用于所有的基本数据类型及其封装类[^2]。 ```java double dValue = 10.5; String sDouble = String.valueOf(dValue); char cChar = 'A'; String sChar = String.valueOf(cChar); boolean bBool = true; String sBoolean = String.valueOf(bBool); ``` - **调用对象的 `toString()` 方法**:除了部分特殊场景外,大多数时候可以直接依赖于某个实例自身的 `toString()` 实现来获取字符串表示形式。 ```java Double objDbl = new Double(20.75); String strObj = objDbl.toString(); ``` #### 3. 特殊情况——布尔值(`boolean`)与字符串 当涉及到 `boolean` 到 `String` 或反之的情况时需要注意一些细节问题。例如直接尝试把 `"true"` 字符串化为布尔真值可能不会按预期工作除非采用特定逻辑处理[^4]。 - **从 `String` 至 `boolean`** 使用标准库函数 `Boolean.parseBoolean(String)` 可以轻松达成目标;不过它只会识别严格意义上的大小写敏感单词"true"/"false". ```java Boolean boolTrue = Boolean.parseBoolean("true"); Boolean boolFalse = Boolean.parseBoolean("FALSE"); // 注意这里的结果仍将是 false. ``` - **反向过程则相对容易些**, 即使如此也建议始终遵循最佳实践即显式指定意图而非隐含假设. --- ### 总结 上述内容涵盖了大部分日常开发过程中需要用到的各种关于如何有效率地执行不同类型间互相变的知识点, 并且每一点都附带实际例子以便更好地理解掌握这些技巧.^ ^ ^ ^
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值