Java基础之异常机制学习&分析--(二)

简介: 调试技巧

调试技巧


1.可以用下面的方法打印或记录任意变量的值

System.out.print("x="+x)

或者

Logger.getGlobal().info("x="+x)

2.为每个类添加 main 方法,后期要删除

3.单元测试

4.日志代理是一个子类对象,他可以截获方法调用,并进行日志记录,然后调用超类中的方法,例如:

如果在调用Random类的nextDouble方法时出现了问题,就可以按照下面的方式,以匿名子类实例的形式创建一个代理对象。

Random generator=new Random(){
public double nextDouble(){
    double result=super.nextDouble();
    Logger.getGlobal().info("nextDouble:"+result);
    return result;
}
};


当调用 nextDouble 方法时,就会产生一个日志消息。要想知道谁调用了这个方法,就要生成一个堆栈轨迹。


5.利用 Throwable 类提供的 printStackTrace方法,可以从任何一个异常对象中获得堆栈情况。下面的代码将捕获任何异常,打印异常

对象和堆栈轨迹,然后重新抛出异常,以便能够找到相应的处理器。

try{
 ...
}catch(Throwable t){
t.printStackTrace;
throw t;
}


不一定要通过捕获异常类生成堆栈轨迹,只要在代码的任何位置插入下面这条语句就可以获得堆栈轨迹;

Thread.dumpStack()


6.一般来说,堆栈轨迹显示在 System.err 上。也可以利用 printStackTrace(PrintWriter s) 方法将它发送到一个文件。

另外,如果要记录或显示堆栈轨迹,就可以采用下面的方式,将它捕获到一个字符串:


StringWriter out = new StringWriter();
new Throwable().printStackTrace(new PrintWriter(out));
String description = out.toString();


7.要想观察类的加载过程,可以用 -verbose 标志启动Java 虚拟机,这种方法有助于诊断由于类路径引发的问题。

8.-Xlint 选项告诉编译器对一些普通容易出啊先的代码问题进行检查。例如,如果使用下面这条命令编译:

javac -Xlint:fallthrough

当switch语句中缺少break语句时,编译器就会给出报告。


9.Java虚拟机增加了对Java应用程序进行监控和管理的支持。它允许利用虚拟机中的代理装置跟踪内存消耗,线程使用,类加载等情况。这个功能对于

像应用程序服务器这样大型的、长时间运行的Java程序来说特别重要。


找出运行虚拟机的炒作系统进程的ID。在UNIX/Linux环境中,运行ps实例工具,在Windows环境中,使用任务管理器,然后运行jconsole 程序:

jconsole processID


10.可以使用 jmap 实用工具获得一个堆的转储,其中显示了堆的转储,其中显示了堆中的每个对象。使用命令如下:

jmap -dump:format=b,file=dumpFileName processID

然后,通过浏览器进入 localhost:7000,将会运行一个网络应用程序,借此可以探查转储对象时堆的内容。


相关文章
|
6天前
|
Java 数据库连接 开发者
Java的Shutdown Hook机制:优雅地关闭应用程序
Java的Shutdown Hook机制:优雅地关闭应用程序
17 1
|
8天前
|
Java 程序员 开发者
深入理解Java并发编程:线程同步与锁机制
【4月更文挑战第30天】 在多线程的世界中,确保数据的一致性和线程间的有效通信是至关重要的。本文将深入探讨Java并发编程中的核心概念——线程同步与锁机制。我们将从基本的synchronized关键字开始,逐步过渡到更复杂的ReentrantLock类,并探讨它们如何帮助我们在多线程环境中保持数据完整性和避免常见的并发问题。文章还将通过示例代码,展示这些同步工具在实际开发中的应用,帮助读者构建对Java并发编程深层次的理解。
|
1天前
|
存储 Java 开发者
探索Java开发中触发空指针异常的场景
作为一名后端开发者在Java编程的世界中,想必大家对空指针并不陌生,空指针异常是一种常见而又令人头疼的问题,它可能会在我们最不经意的时候突然出现,给我们的代码带来困扰,甚至导致系统的不稳定性,而且最可怕的是有时候不能及时定位到它的具体位置。针对这个问题,我们需要深入了解触发空指针异常的代码场景,并寻找有效的方法来识别和处理这些异常情况,而且我觉得空指针异常是每个Java开发者都可能面临的挑战,但只要我们深入了解它的触发场景,并采取适当的预防和处理措施,我们就能够更好地应对这个问题。那么本文就来分享一下实际开发中一些常见的触发空指针异常的代码场景,并分享如何有效地识别和处理这些异常情况。
9 1
探索Java开发中触发空指针异常的场景
|
2天前
|
Java 数据库连接 开发者
Java中的异常处理机制详解
Java异常处理是确保程序健壮的关键,涉及Throwable的Error和Exception子类。Error由JVM抛出,不建议捕获;Exception分为检查异常(需要捕获)和未检查异常。处理异常的关键字有try、catch、finally、throw和throws。最佳实践包括捕获具体异常、不吞没异常、释放资源和避免滥用异常。示例展示了如何在main方法中处理IOException,并在finally块中进行资源清理。
|
2天前
|
SQL 网络协议 Java
Java异常详解
Java异常详解
7 1
|
6天前
|
缓存 NoSQL Java
17:缓存机制-Java Spring
17:缓存机制-Java Spring
21 5
|
6天前
|
存储 前端开发 搜索推荐
13:Session机制实现用户登录与注销功能-Java Web
13:Session机制实现用户登录与注销功能-Java Web
22 3
|
9天前
|
Java
JAVA循环结构分析与设计
JAVA循环结构分析与设计
15 1
|
9天前
|
算法 Java 大数据
Java从入门到精通学习报告
Java从入门到精通学习报告
18 1
|
9天前
|
消息中间件 监控 安全
【JAVAEE学习】探究Java中多线程的使用和重点及考点
【JAVAEE学习】探究Java中多线程的使用和重点及考点