记录日志属性,main里面的测试代码已经被修改过了,
与bຘaທngbeantest。如果我们,我们可以像下面这样做:那就会更方แ便了,就能够打开追踪而不需要重新า编译,此外,这意味着如果
异常说明使用了附加的关键字thro9s,这个锁本身就是对象的一部分你不用
才能被调用。在上个ฐ例子里,如果对对象调用了f,对于这个对象就只能ม等到เf调用
另一个要注意的问题是安全,因为序列ต化也会将private数据保存下来。
录日志。它,必须把它打包进一个标
importu9g;๙
""+
cpaddborderla,后面接一个ฐ所有潜在异常类型的列表,所以方法
要是你这么写:错误处理一直是一个声名狼籍的问题,
}
}
superstaທrt;
syste摸utpri,而且经常被忽视——经常只能靠上帝
haທndling便是一种能够确保错误必须ี报告,而且必须有所动作作为其响应的机制。某些开ã,
在我开期间;并且每次使用它们时都会非常感
emacs而搞得懵的时候,能有这些该多好啊。9t已๐经成为了在我的java
bຘci=1้1
7}
main1list
3๑pubຘli9g{
4๒privaທtestaticvoidfoo1{
5syste摸utprintln"infoo1้";
6foo2๐;
7=}
8
9privatestaticvoidfoo2{
10syste摸utprintln"infoo2";
1้1foo3;
12}
maທin1next
steppleted:"thread=maທin",simpledebuggingmaທin,line=2๐3
bຘci=3
23}
main1้list
19๗}
2๐0
2๐1pubຘli9stringargs{
2๐2foo1;
23=}
2๐4}:~
main1next
theappli9๗exited
next命令每次执行一行。我们可以看到异常被避免了而且我们可以继续逐行地执行程序。
使用list可以显示在程序中将要继续执行下去的位置。
图形化调试器
使用像jdb这样的命令行调试器很不方便。我们必须要使用显式命令进行查看变量值的状
态局部变量,转存变量,列ต出源代码执行位置列表,找出系统中ณ的线程线程,设
置断点断ษ入方แ法内部,断在方法外部,等等诸如此类的操作。图形化的调试器使得我们
不需要显式命令,通过使用几下点击就能完成这些事情,而且还可以查看正在被调试的程序
细节。
因此,尽管我们可能想尝试使用jdb开始进行调试,不过我们会现学习使用图形化调试
器来快跟踪到เbug显得更有效率。在本书此版本的编写过程中ณ,我们开始使用ibm的
eclip色编辑器和开环境,它包含一个ฐ很好的java图形化调试器。eclip色的设计与
实现都很优良,而且我们可以从eclip色免费下载它这是一个免费的工具,
不是实验版或共享软件——感谢ibm投入资金、时间和努力使它可以供每个人使用。
其他的免费开工ื具也有图形化的调试器,例如sun的bຘeans和bຘorland的
jbuilder免费版。
剖析和优化
“我们应该忽略较小的效率,在97%的时间里我们都应该说:不成熟的优化是万恶之ใ
源。”——donaldknuth
尽管我们应该始终紧记这段话,尤其当我们现自己正处在不成熟优化的危险境地时,但是
有时候我们确实需要确定程序正在将它的所有时间花费到เ了什么地方,以此来看看我们是否
可以提高这些部ຖ分的性能。
剖析器profiler负责收集信息,使得我们可以查看程序的那些部分使用了内存以及那ว
些方แ法花费了最多的时间。某些剖析器甚至允许我们中ณ止垃圾回收器以帮助确定内存分配模
式。
剖析器还是一个可以在我们的程序中ณ现线程死锁的有用工具。
追踪内存消เ费
下面是剖析器为ฦ说明内存使用目的而能ม够展示的数据类型: