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,将会运行一个网络应用程序,借此可以探查转储对象时堆的内容。


相关文章
|
2月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
326 0
|
2月前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
337 7
|
2月前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
238 1
|
2月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
234 1
|
2月前
|
存储 Java Go
【Java】(3)8种基本数据类型的分析、数据类型转换规则、转义字符的列举
牢记类型转换规则在脑海中将编译和运行两个阶段分开,这是两个不同的阶段,不要弄混!
216 2
|
3月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
87 5
|
3月前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
167 1
Java基础异常-自定义异常
Java基础异常-自定义异常
Java基础异常-自定义异常
|
Java 程序员 编译器
Java异常——throw、throws及自定义异常
Java异常——throw、throws及自定义异常
250 0
|
Java 编译器
Java中的异常(抛出异常、自定义异常等)
Java中的异常(抛出异常、自定义异常等)
550 1