﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-java_linux</title><link>http://www.blogjava.net/jjm194/</link><description>java_linux</description><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 09:27:59 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 09:27:59 GMT</pubDate><ttl>60</ttl><item><title>JRE与JDK在启动应用服务器中的作用</title><link>http://www.blogjava.net/jjm194/articles/216189.html</link><dc:creator>java_linux</dc:creator><author>java_linux</author><pubDate>Sun, 20 Jul 2008 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/jjm194/articles/216189.html</guid><wfw:comment>http://www.blogjava.net/jjm194/comments/216189.html</wfw:comment><comments>http://www.blogjava.net/jjm194/articles/216189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjm194/comments/commentRss/216189.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjm194/services/trackbacks/216189.html</trackback:ping><description><![CDATA[<p><span style="color: #0000ff">开始接触Java的时候觉得Java虚拟机很麻烦，不明白JRE与JDK的区别是什么？后来搞清楚JRE是个运行环境，JDK是个开发环境。</span></p>
<p><span style="color: #0000ff">因此写Java程序的时候需要JDK，而运行Java程序的时候就需要JRE。而JDK里面已经包含了JRE，因此对JAVA_HOME设置为JDK的路径时也可以正常运行Java程序，但是JDK比较大包括了许多与运行无关的内容，因此运行普通的Java程序无须安装JDK。</span></p>
<p><span style="color: #0000ff">但是用了Eclipse又有了疑问，为什么这个开发环境JRE就可以正常运行呢？其实在Eclipse中内嵌了Java编译器，并且与JDK中的javac完全相容，因此无须使用JDK也可以直接编译Java程序。</span></p>
<p><span style="color: #0000ff">学习J2EE的时候又开始不明白，为什么Tomcat和Apusic用JRE就可以启动，Weblogic用JDK才能启动呢？原因是Tomcat和Apusic 4都已经包括了一个源代码编译器，而Weblogic没有包括这个编译器包。</span></p>
<p><span style="color: #0000ff">那么为什么需要编译器呢？因为在WEB应用中JSP文件是需要转换成Servlet，这个Servlet文件还需要编译成可以在JRE上执行的class文件，因此必须提供有编译能力的JDK，将JAVA_HOME设置为JDK的路径就可以了。</span></p>
<p><span style="color: #0000ff">那么新出现的Apusic 5.0呢？这个版本为了使大家可以灵活调整JVM的版本，因此不再提供自带的Java编译器，而是通过用户安装的JDK来完成JSP的编译工作，这个也就是为什么Apusic 5.0必须通过JDK启动的原因。</span></p>
<p><span style="color: #0000ff">&nbsp;</span></p>
<img src ="http://www.blogjava.net/jjm194/aggbug/216189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjm194/" target="_blank">java_linux</a> 2008-07-20 16:44 <a href="http://www.blogjava.net/jjm194/articles/216189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java开发者需坚守的十大基本准则</title><link>http://www.blogjava.net/jjm194/archive/2008/07/20/216188.html</link><dc:creator>java_linux</dc:creator><author>java_linux</author><pubDate>Sun, 20 Jul 2008 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/jjm194/archive/2008/07/20/216188.html</guid><wfw:comment>http://www.blogjava.net/jjm194/comments/216188.html</wfw:comment><comments>http://www.blogjava.net/jjm194/archive/2008/07/20/216188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjm194/comments/commentRss/216188.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjm194/services/trackbacks/216188.html</trackback:ping><description><![CDATA[<p><span style="color: red"><span style="color: #0000ff">　　有许多标准和实践准则可适用于Java开发者，但此处要说的，是每个Java开发者需坚守的基本原则。</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　一、为代码加注释。虽然每个人都知道这点，但有时却不自觉忘了履行，今天你&#8220;忘了&#8221;加注释了吗？虽然注释对程序的功能没什么&#8220;贡献&#8221;，但过一段时间，比如说两星期之后或者更长，回过头来看看自己的代码，说不定已经记不住它是干什么的了。如果这些代码是你个人的，那还算是走运了，不幸的是，当然了，大多数时候都是别人的不幸，很多时候大家都是在为公司写代码，写代码的人也许早已经离开了公司，但别忘了一句古话，有来有往嘛，为他人，也为我们自己，请为你的代码加上注释。</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　二、不要让事情复杂化。程序员有时候总是对简单问题想出复杂的解决方案，比如说，在只有五个用户的程序中引入EJB、对程序实现了并不需要的框架（framework），之类的还有属性文件、面向对象解决方案、多线程等等。为什么要这样做呢？也许我们并不知道是否这样会更好，但这样做也许可以学到一些新东西，或者让自己更感兴趣一些。如果是不知道为什么这样做，建议多请教经验丰富的程序员，如果是为了个人的目的，麻烦让自己更专业一点。</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　三、始终牢记——&#8220;少即是好（Less is more）并不总是对的&#8221;。代码效率虽然很重要，但在许多解决方案中，编写更少的代码并不能改善这些代码的效率，请看下面这个简单的例子：</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">if(newStatusCode.equals("SD") &amp;&amp; (sellOffDate == null ||<br />
todayDate.compareTo(sellOffDate)＜0 || (lastUsedDate != null &amp;&amp;<br />
todayDate.compareTo(lastUsedDate)＞0)) ||<br />
(newStatusCode.equals("OBS") &amp;&amp; (OBSDate == null ||<br />
todayDate.compareTo(OBSDate)＜0))){<br />
newStatusCode = "NYP"; <br />
}</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　能看明白if条件语句是干什么的吗？能想出来是谁写的这段代码吗？如果把它分成两段独立的if语句，是不是更容易理解呢，下面是修改后的代码：</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">if(newStatusCode.equals("SD") &amp;&amp; (sellOffDate == null ||<br />
todayDate.compareTo(sellOffDate)＜0 || (lastUsedDate != null &amp;&amp;<br />
todayDate.compareTo(lastUsedDate)＞0))){<br />
newStatusCode = "NYP"; <br />
}else<br />
if(newStatusCode.equals("OBS") &amp;&amp; (OBSDate == null ||<br />
todayDate.compareTo(OBSDate)&lt;0))<br />
{<br />
newStatusCode = "NYP"; <br />
}</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　是不是读起来容易多了呢，在此只是多加了一个if和两个花括号，但代码的可读性与可理解性就一下子提高了一大截。</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　四、请不要硬编码。开发者经常有意&#8220;忘记&#8221;或忽略掉这点，因为有些时候开发日程逼得实在太紧。其实，多写一行定义静态变量的代码能花多少时间呢？</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">public class A {<br />
public static final String S_CONSTANT_ABC = "ABC"; <br />
public boolean methodA(String sParam1){<br />
if (A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){<br />
return true; <br />
}<br />
return false; <br />
}<br />
}</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　现在，每次需要将&#8220;ABC&#8221;与其他变量进行比较时，不必记住实际代码，直接引用A.S_CONSTANT_ABC就行了，而且在今后需要进行修改时，也可在一处修改，不会翻遍整个源代码逐个修改了。</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　五、不要&#8220;创造&#8221;自己的框架（framework）。确切来说，有数以千计的各种框架存在，而且大多数是开源的，这些框架都是优秀的解决方案，可用于日常程序开发中，我们只需使用这些框架的最新版本就行了，至少表面上要跟上形势吧。被大家广为接受的最为明显的一个例子就是Struts了，这个开源web框架非常适合用在基于web的应用程序中。是不是想开发出自己的Struts呢，还是省点力气吧，回头看看第二条——不要让事情复杂化。另外，如果正在开发的程序只有3个窗口，就不要使用Struts了，对这种程序来说，不需要那么多的&#8220;控制&#8221;。 </span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　六、不要使用println及字符串连接。通常为了调试方便，开发者喜欢在可能的所有地方都加上System.out.println，也许还会提醒自己回过头来再来删除，但有些时候，经常会忘了删除或者不愿意删除它们。既然使用System.out.println是为了测试，那么测试完之后，为什么还要留着它们呢，因为在删除时，很可能会删除掉真正有用的代码，所以不能低估System.out.println危害啊，请看下面的代码：</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">public class BadCode {<br />
public static void calculationWithPrint(){<br />
double someValue = 0D; <br />
for (int i = 0; i ＜10000; i++) {<br />
System.out.println(someValue = someValue + i); <br />
}<br />
}<br />
public static void calculationWithOutPrint(){<br />
double someValue = 0D; <br />
for (int i = 0; i ＜ 10000; i++) {<br />
someValue = someValue + i; <br />
}<br />
}<br />
public static void main(String [] n) {<br />
BadCode.calculationWithPrint(); <br />
BadCode.calculationWithOutPrint(); <br />
}<br />
}</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　从测试中可以发现，方法calculationWithOutPrint()执行用了0.001204秒，作为对比，方法calculationWithPrint()执行可是用了10.52秒。</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　要避免浪费CPU时间，最好的方法是引入像如下的包装方法：</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">public class BadCode {<br />
public static final int DEBUG_MODE = 1; <br />
public static final int PRODUCTION_MODE = 2; <br />
public static void calculationWithPrint(int logMode){<br />
double someValue = 0D; <br />
for (int i = 0; i ＜ 10000; i++) {<br />
someValue = someValue + i; <br />
myPrintMethod(logMode, someValue); <br />
}<br />
}<br />
public static void myPrintMethod(int logMode, double value) {<br />
if (logMode ＞ BadCode.DEBUG_MODE) { return; }<br />
System.out.println(value); <br />
}<br />
public static void main(String [] n) {<br />
BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE); <br />
}<br />
}</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　另外，字符串连接也是浪费CPU时间的一个大头，请看下面的示例代码：</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">public static void concatenateStrings(String startingString) {<br />
for (int i = 0; i ＜ 20; i++) {<br />
startingString = startingString + startingString; <br />
}<br />
}<br />
public static void concatenateStringsUsingStringBuffer(String startingString) {<br />
StringBuffer sb = new StringBuffer(); <br />
sb.append(startingString); <br />
for (int i = 0; i ＜ 20; i++) {<br />
sb.append(sb.toString()); <br />
}<br />
}</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　在测试中可发现，使用StringBuffer的方法只用了0.01秒执行完毕，而使用连接的方法则用了0.08秒，选择显而易见了。</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　七、多关注GUI（用户界面）。再三强调，GUI对商业客户来说，与程序的功能及效率同等重要，GUI是一个成功程序的最基本部分，而很多IT经理往往都没注意到GUI的重要性。在现实生活中，许多公司可能为了节省开支，没有雇用那些有着设计&#8220;用户友好&#8221;界面丰富经验的网页设计者，此时Java开发者只能依赖他们自身的HTML基本功及在此领域有限的知识，结果，很多开发出来的程序都是&#8220;计算机友好&#8221;甚于&#8220;用户友好&#8221;。很少有开发者同时精通软件开发及GUI设计，如果你在公司&#8220;不幸&#8221;被分配负责程序界面，就应该遵守下面三条原则：</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　1、 不要再发明一次轮子，即不做无用功。现有的程序可能会有类似的界面需求。<br />
　　2、 先创建一个原型。这是非常重要一步，用户一般想看到他们将使用的东西，而且可以先利用这个原型征求用户的意见，再慢慢修改成用户想要的样子。<br />
　　3、 学会换位思考。换句话来说，就是从用户的角度来审查程序的需求。举例来讲，一个汇总的窗口可以跨页或者不跨页，作为一个软件开发者，可能会倾向于不跨页，因为这样简单一些。但是，从用户的角度来看，可能不希望看到上百行数据都挤在同一页上。</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　八、文档需求不放松。每个商业需求都必须记录在案，这可能听上去像童话，似乎在现实生活中很难实现。而我们要做的是，不管开发时间多紧迫，不管最终期限多临近，对每个商业需求都必须记录在案。</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　 九、单元测试、单元测试、单元测试。关于什么是单元测试的最好方法，在此不便细说，只是强调，单元测试一定要完成，这也是编程中最基本的原则。当然了，如果有人帮你做单元测试自然是最好，如果没有，就自己来做吧，当创建一个单元测试计划时，请遵守以下三条最基本的原则：</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　1、 先于编写类代码之前编写单元测试。<br />
　　2、 记录单元测试中的代码注释。<br />
　　3、 测试所有执行关键功能的公有方法，这里不是指set和get方法，除非它们是以自己独特方式执行set和get方法。</span></span></p>
<p><span style="color: red"><span style="color: #0000ff">　　十、质量，而不是数量。有些时候因为产品问题、期限紧迫、或一些预料之外的事情，导致常常不能按时下班，但一般而言，公司不会因为雇员经常加班而对之表扬和奖励，公司只看重高质量的工作。如果遵守了前九条原则，你会发现自己写出的代码bug少且可维护性高，无形中质量提高了一大步。<br />
</span></span></p>
<img src ="http://www.blogjava.net/jjm194/aggbug/216188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjm194/" target="_blank">java_linux</a> 2008-07-20 16:43 <a href="http://www.blogjava.net/jjm194/archive/2008/07/20/216188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>