副标题#e#
同步输出目次
在Java开拓进程中,有时候我们要建设一些简朴的类来测试某些成果,测试完成后就从磁盘删除该类的源文件,因为我们不想让该类呈此刻最终的产物中。可是,固然源文件已经被删除,编译好的class文件仍大概留在磁盘上,当有其他的类依赖于该类,就大概导致开拓情况的不不变。
在JBuilder中,我们可以配置一个编译选项来同步(Synchronize)Java的源文件和对应的类,这样,一旦Java源文件被删除,对应的class文件也将被删除。凭据如下步调配置该同步选项:
打开 Project | Project Properties…
选择 Compiler 选项卡,看到如下对话框:
留意Synchronize output dir选项。选中该选项就可以实现输出目次同步,每次编译时JBuilder将担保Java源文件与Java class文件的同步。
输出调试信息
许多时候,我们要向尺度输出设备输出一些简朴的变量值,以便相识措施的运行环境。譬喻,在措施中插手雷同下面的代码:
System.out.println("调试信息: 变量的值是" + value);
当编写和调试代码的事情竣事,接下去就要举办最后的编译和打包,这时就要删除所有上面这些System.out.println代码。为了制止这些贫苦,我们可以引入一个逻辑变量debugMode,把它配置为true,并在输出调试信息之前查抄这个变量的值:
if (debugMode)
System.out.println("调试信息: 变量的值是" + value);
所有调试事情竣事之后,再把debugMode变量配置成false,这样措施运行时就不会再输出调试信息。
可是,这还不是处理惩罚雷同调试信息的最佳步伐,我们可以用Diagnostic类来改造。Diagnostic类有三个与输出流有关的要领,除了尺度的System.err输出流,还可以赋予其他差异的输出流(譬喻文件或URL)。最重要的是,当编写和调试代码的事情竣事之后,我们可以在正式编译时解除Diagnostic类,从而也就解除了对Diagnostic类要领的所有挪用。
#p#副标题#e#
下面是Diagnostic类中可用于输出信息的三个要领:
print(String message):输出信息
println(String message):输出信息,并追加行竣事符。
printlnc(String message):输出带有行竣事符、计数器(它的值不绝递进)和Tab字符的信息。
因此,我们可以把上面的System.out.println替换为:
Diagnostic.printlnc("调试信息:变量的值是:" + value);
这些输出要领的尺度输出设备是System.err,但我们可以用setLogStream(PrintStream log)要领改变它。譬喻,假设要把输出发送到log.txt文件,只需插入如下代码:
Diagnostic.setLogStream(new java.io.PrintStream(new
java.io.FileOutputStream("log.txt")));
最后,在开拓期间,我们只需挪用一个要领就可以封锁所有的输出:
Diagnostic.enable(false);
资源绑缚
在Java中,要把直接嵌入到措施的字符串作为资源利用是很容易的。譬喻,只要把字符串生存到一个独立的文件,我们就可以很利便地通过建设差异的文件实现对多种语言的支持。
为了把“硬编码”的字符串生存到资源绑缚文件,尺度Java API提供两种步伐:
· 把键-值对以属性文件的形式生存到文本文件。
· 把键-值对生存到Java源文件中的String[][]数组工具,该Java源文件从java.util.ListResourceBundle扩展。
第一种要领具有较好的机动性,可以在不从头编译的前提下修改字符串值。第二种要领具有较好的机能,但每次修改字符串值,包括键-值对的Java源代码文件都必需从头编译。JBuilder提供了生存硬编码字符串值的第三种要领,即com.borland.jb.util.ArrayResourceBundle。
ArrayResourceBundle类通过一个String[]数组工具生存键的值,但不包括键,我们可以通过索引会见值,即第一个值的索引为0,第二个值的索引为1,等等。由于可以直接会见值,因此机能相当好。但也有缺点——维护生存值的文件很坚苦,因为值和键之间没有直接的(直观的)接洽。
异常跟踪
在Java中,操作try..catch(..finally)语句可以捕捉和处理惩罚异常,很是利便。catch块的常见异常处理惩罚方法是输出异常,譬喻把异常输出到日志文件。
Exception类有一个printStackTrace()要领,它可以或许从产生异常的要领中输出仓库信息,默认输出位置是System.err。可是,有时候我们要把仓库信息输出到System.err之外的其他处所,譬喻在呈现异常时把仓库信息输出到email,可能用一个对话框显示出来。
printStackTrace()要领有几种差异的范例:
· printStackTrace(),输出到尺度错误流。
· printStackTrace(PrintStream ps),输出到名为ps的PrintStream。
· printStackTrace(PrintWriter pw),输出到名为pw的PrintWriter。
#p#分页标题#e#
我们可以用最后一种printStackTrace()要领把仓库信息生存到String工具。只要在String工具中捕捉了仓库信息,我们就可以利便地在应用的任那里所利用这些信息了。下面的代码片段示范了详细的实现步调:
private String getStackTraceAsString() {
// StringWriter将包括仓库信息
StringWriter stringWriter = new StringWriter();
//必需将StringWriter封装成PrintWriter工具,
//以满意printStackTrace的要求
PrintWriter printWriter = new PrintWriter(stringWriter);
//获取仓库信息
e.printStackTrace(printWriter);
//转换成String,并返回该String
StringBuffer error = stringWriter.getBuffer();
return error.toString();
}
快速查察JavaBean根基信息
在JBuilder中,要查察JavaBean的内部信息长短常利便的。我们可以把JavaBean拖入设计窗口中,通过Object Inspector查察JavaBean的属性和事件。可是,纵然不通过设计器,我们也可以查察JavaBean的信息,这就是利用BeanInsight(菜单:Tools | BeanInsight)。
点击Examine Bean按钮就开始阐明指定的JavaBean,在BeanInsight Result区域可以看到阐明JavaBean的功效。假如要相识更具体的信息,点击“View Details…”按钮。
多个行的属性值
属性文件是生存应用设置信息的好要领。有了属性文件,修改应用参数时只需修改简朴的属性文本文件,无需从头编译整个应用。
属性文件以“键-值”对的形式生存数据。每一个行以键开头,加上一个便是标记,再加上与该键对应的值。键与值必需在同一个行上,这一点很重要。可是,有些时候,值的内容很是多,假如值可以或许分成多行存放,将带来很大的利便。下面我们就来看看如何利用多行的属性值。
首先,下面这个代码片段读取test.properties属性文件:
try {
Properties p = new Properties();
File file = new File("test.properties");
FileInputStream fis = new FileInputStream(file);
p.load(fis);
} catch (IOException ioex) {
ioex.printStackTrace();
}
Properties类的load()要领需要一个输入流作为参数,这里我们向它传入了一个FileInputStream工具。
接下来,我们就可以通过挪用getProperty()要领从Properties工具获取属性值。下面我们来看看test.properties属性文件的内容:
singleline=Single line value
multiline =This example shows how we
can write a property
value over multiple lines in a
properties file
这个属性文件生存了两个属性,键别离是singleline和multiline。singleline的值只有一行,而multiline的值有多行。
假如我们挪用Properties工具的getProperty()要领,并输出属性值,功效将是:
挪用:
System.out.println("singleline? " + p.getProperty("singleline"));
System.out.println("multiline ? " + p.getProperty("multiline"));
功效:
singleline? Single line value
multiline ? This example shows how we
multiline属性只包括了第一行值。那么,如何办理这个问题呢?其实很简朴,只需要在每个行的末端加上转义字符“\”就可以了。修改后的属性文件如下所示:
singleline=Single line value
multiline =This example shows how we \
can write a property \
value over multiple lines in a \
properties file
再次读取属性文件的值,multiline的属性值就可以或许完整地读取出来