﻿<?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牛棚</title><link>http://www.blogjava.net/chinajox/</link><description>我们爱JAVA</description><language>zh-cn</language><lastBuildDate>Tue, 12 May 2026 17:17:32 GMT</lastBuildDate><pubDate>Tue, 12 May 2026 17:17:32 GMT</pubDate><ttl>60</ttl><item><title>java数据类型</title><link>http://www.blogjava.net/chinajox/archive/2005/11/25/21409.html</link><dc:creator>JAVA牛棚</dc:creator><author>JAVA牛棚</author><pubDate>Fri, 25 Nov 2005 04:09:00 GMT</pubDate><guid>http://www.blogjava.net/chinajox/archive/2005/11/25/21409.html</guid><wfw:comment>http://www.blogjava.net/chinajox/comments/21409.html</wfw:comment><comments>http://www.blogjava.net/chinajox/archive/2005/11/25/21409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinajox/comments/commentRss/21409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinajox/services/trackbacks/21409.html</trackback:ping><description><![CDATA[JAVA学习笔记一<BR><BR>1、java定义了8个基本的数据类型：<BR>字节型(byte)，<BR>短整型(short)，<BR>整型(int)，<BR>长整型(long)，<BR>字符型(char)，<BR>浮点型(float)，<BR>双精度型(double)，<BR>布尔型(boolean)。<BR><BR>不管基于什么平台，整型总是32位。整数类型的长度不应该被理解为它占用的存储空间，而应该是该类变量和表达式的行为。事实上，为了提高性能，至少字节型和短整型的存储是32位的。<BR><BR><BR>2、整数类型长度（都为有符号的）<BR>长整型　64<BR>整形　　32<BR>短整型　16<BR>字节型　8　　-128￣127<BR><BR>浮点型<BR>双精度浮点double 　64<BR>单精度浮点float 　　32<BR><BR>字符<BR>char　16　0￣65536　<BR>没有负数。使用unicode码代表字符。<BR><BR>　　它可以被转换为整数进行整数运算。通过将字符包括在单引号之内来表法字符字面量。<BR><BR>3、对于不能直接被包括的字符，有若干转义序列，这样允许你输入你需要的字符，例如‘\’代表单个引号字符本身‘\n’代表换行符字符。<BR>　　为直接得到八进制或十六进制字符的值，对于八进制，使用反斜线加三个阿拉伯数字。如'\141'代表'a''。对于十六进制，使用反斜线和u加四个十六进制阿拉伯数字。如'\u0061'代表'a'，'\ua432'是日文片假名字符。<BR><BR><BR>\ddd　八进制字符<BR>\uxxxx　十六进制字符<BR>\'　单引号<BR>\"　双引号<BR>\\　反斜杠<BR>\r　回车键<BR>\n　换行<BR>\f　换页<BR>\t　水平制表符<BR>\b&nbsp;&nbsp; 退格<BR><BR>4、类型转换和强制型转换<BR>　　把一种类型的值赋给另一个类型的一个变量是相当常见的。如果这2中类型是兼容的，那么JAVA将自动地进行转换。例如，把INT类型的值赋给long类型的变量，总是可行的。然后不是所有的类型的都是兼容的，因此，不是所有的类型转换都是可以隐式实现的。<BR><BR><BR><BR><BR><BR><BR><img src ="http://www.blogjava.net/chinajox/aggbug/21409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinajox/" target="_blank">JAVA牛棚</a> 2005-11-25 12:09 <a href="http://www.blogjava.net/chinajox/archive/2005/11/25/21409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据仓库问题</title><link>http://www.blogjava.net/chinajox/archive/2005/11/07/18581.html</link><dc:creator>JAVA牛棚</dc:creator><author>JAVA牛棚</author><pubDate>Mon, 07 Nov 2005 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/chinajox/archive/2005/11/07/18581.html</guid><wfw:comment>http://www.blogjava.net/chinajox/comments/18581.html</wfw:comment><comments>http://www.blogjava.net/chinajox/archive/2005/11/07/18581.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinajox/comments/commentRss/18581.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinajox/services/trackbacks/18581.html</trackback:ping><description><![CDATA[作者：双面人<BR><BR>数据仓库是一个环境，而不是一件产品，提供用户用于决策支持的当前和历史数据，这些数据在传统的操作型数据库中很难或不能得到。数据仓库技术是为了有效的把操作形数据集成到统一的环境中以提供决策型数据访问，的各种技术和模块的总称。所做的一切都是为了让用户更快更方便查询所需要的信息，提供决策支持。&nbsp;&nbsp;<BR><BR>数据仓库的组成&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;数据抽数据净化&nbsp;数据载入&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;信息发布系统&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;操作型数据和外界数据&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;数据集市&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;报表,查询,&nbsp;EIS工具&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;OLAP&nbsp;工具&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;数据挖掘工具&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;操纵平台&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;元数据&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;管理平台<BR>---------------------------<BR>谢谢<BR>狼即天涯的解答<img src ="http://www.blogjava.net/chinajox/aggbug/18581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinajox/" target="_blank">JAVA牛棚</a> 2005-11-07 14:57 <a href="http://www.blogjava.net/chinajox/archive/2005/11/07/18581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring自动加载配置文件的用法原创</title><link>http://www.blogjava.net/chinajox/archive/2005/11/07/18580.html</link><dc:creator>JAVA牛棚</dc:creator><author>JAVA牛棚</author><pubDate>Mon, 07 Nov 2005 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/chinajox/archive/2005/11/07/18580.html</guid><wfw:comment>http://www.blogjava.net/chinajox/comments/18580.html</wfw:comment><comments>http://www.blogjava.net/chinajox/archive/2005/11/07/18580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinajox/comments/commentRss/18580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinajox/services/trackbacks/18580.html</trackback:ping><description><![CDATA[作者：＋＋<BR><BR>ContextLoder&nbsp;&nbsp;加载WEB.XML里的contextConfigLocation字段<BR>如下：<BR>&lt;web-app&gt;<BR>&nbsp;&nbsp;&lt;display-name&gt;bbscs6&lt;/display-name&gt;<BR>&nbsp;&nbsp;&lt;context-param&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;/WEB-INF/applicationContext.xml&lt;/param-value&gt;<BR>&nbsp;&nbsp;&lt;/context-param&gt;<BR>&nbsp;&lt;/web-app&gt;<BR>&nbsp;<BR>&nbsp;把/WEB-INF/applicationContext.xml加载入ApplicationContext<BR>&nbsp;并用servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,&nbsp;ApplicationContext);加载到容器<BR>用&nbsp;ApplicationContext&nbsp;wac&nbsp;=&nbsp;WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext);来取出ApplicationContext<BR>&nbsp;ApplicationContext通过getBean("xxxx")来取到相应的bean<img src ="http://www.blogjava.net/chinajox/aggbug/18580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinajox/" target="_blank">JAVA牛棚</a> 2005-11-07 14:56 <a href="http://www.blogjava.net/chinajox/archive/2005/11/07/18580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA SCRIPT基础学习笔记(下) </title><link>http://www.blogjava.net/chinajox/archive/2005/11/04/18111.html</link><dc:creator>JAVA牛棚</dc:creator><author>JAVA牛棚</author><pubDate>Fri, 04 Nov 2005 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/chinajox/archive/2005/11/04/18111.html</guid><wfw:comment>http://www.blogjava.net/chinajox/comments/18111.html</wfw:comment><comments>http://www.blogjava.net/chinajox/archive/2005/11/04/18111.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/chinajox/comments/commentRss/18111.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinajox/services/trackbacks/18111.html</trackback:ping><description><![CDATA[时时转帖，感谢作者： rodge_leo<BR><BR>56.JS中的焦点顺序:document.getElementByid("表单元素").tabIndex = 1<BR>57.innerHTML的值是表单元素的值:如
<P id=para>"how are <EM>you</EM>"</P>,则innerHTML的值就是:how are <EM>you</EM><BR>58.innerTEXT的值和上面的一样,只不过不会把<EM>这种标记显示出来.<BR></EM>59.contentEditable可设置元素是否可被修改,isContentEditable返回是否可修改的状态.<BR>60.isDisabled判断是否为禁止状态.disabled设置禁止状态<BR>61.length取得长度,返回整型数值<BR>62.addBehavior()是一种JS调用的外部函数文件其扩展名为.htc<BR>63.window.focus()使当前的窗口在所有窗口之前.<BR>64.blur()指失去焦点.与FOCUS()相反.<BR>65.select()指元素为选中状态.<BR>66.防止用户对文本框中输入文本:onfocus="this.blur()"<BR>67.取出该元素在页面中出现的数量:document.all.tags("div(或其它HTML标记符)").length<BR>68.JS中分为两种窗体输出:模态和非模态.window.showModaldialog(),window.showModeless()<BR>69.状态栏文字的设置:window.status='文字',默认的状态栏文字设置:window.defaultStatus = '文字.';<BR>70.添加到收藏夹:external.AddFavorite("<A href='http://www.dannyg.com","jaskdlf'>http://www.dannyg.com","jaskdlf</A>");<BR>71.JS中遇到脚本错误时不做任何操作:window.onerror = doNothing; 指定错误句柄的语法为:window.onerror = handleError;<BR>72.JS中指定当前打开窗口的父窗口:window.opener,支持opener.opener...的多重继续.<BR>73.JS中的self指的是当前的窗口<BR>74.JS中状态栏显示内容:window.status="内容"<BR>75.JS中的top指的是框架集中最顶层的框架<BR>76.JS中关闭当前的窗口:window.close();<BR>77.JS中提出是否确认的框:if(confirm("Are you sure?")){alert("ok");}else{alert("Not Ok");}<BR>78.JS中的窗口重定向:window.navigate("<A href="http://www.sina.com.cn">http://www.sina.com.cn</A>");<BR>79.JS中的打印:window.print()<BR>80.JS中的提示输入框:window.prompt("message","defaultReply");<BR>81.JS中的窗口滚动条:window.scroll(x,y)<BR>82.JS中的窗口滚动到位置:window.scrollby<BR>83.JS中设置时间间隔:setInterval("expr",msecDelay)或setInterval(funcRef,msecDelay)或setTimeout<BR>84.JS中的模态显示在IE4+行,在NN中不行:showModalDialog("URL"[,arguments][,features]);<BR>85.JS中的退出之前使用的句柄:function verifyClose(){event.returnValue="we really like you and hope you will stay longer.";}}&nbsp; window.onbeforeunload=verifyClose;<BR>86.当窗体第一次调用时使用的文件句柄:onload()<BR>87.当窗体关闭时调用的文件句柄:onunload()<BR>88.window.location的属性: protocol(http:),hostname(<A href='http://www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo'>www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo</A>",指跳转到相应的锚记),href(全部的信息)<BR>89.window.location.reload()刷新当前页面.<BR>90.window.history.back()返回上一页,window.history.forward()返回下一页,window.history.go(返回第几页,也可以使用访问过的URL)<BR>91.document.write()不换行的输出,document.writeln()换行输出<BR>92.document.body.noWrap=true;防止链接文字折行.<BR>93.变量名.charAt(第几位),取该变量的第几位的字符.<BR>94."abc".charCodeAt(第几个),返回第几个字符的ASCii码值.<BR>95.字符串连接:string.concat(string2),或用+=进行连接<BR>96.变量.indexOf("字符",起始位置),返回第一个出现的位置(从0开始计算)<BR>97.string.lastIndexOf(searchString[,startIndex])最后一次出现的位置.<BR>98.string.match(regExpression),判断字符是否匹配.<BR>99.string.replace(regExpression,replaceString)替换现有字符串.<BR>100.string.split(分隔符)返回一个数组存储值.<BR>101.string.substr(start[,length])取从第几位到指定长度的字符串.<BR>102.string.toLowerCase()使字符串全部变为小写.<BR>103.string.toUpperCase()使全部字符变为大写.<BR>104.parseInt(string[,radix(代表进制)])强制转换成整型.<BR>105.parseFloat(string[,radix])强制转换成浮点型.<BR>106.isNaN(变量):测试是否为数值型.<BR>107.定义常量的关键字:const,定义变量的关键字:var <img src ="http://www.blogjava.net/chinajox/aggbug/18111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinajox/" target="_blank">JAVA牛棚</a> 2005-11-04 11:53 <a href="http://www.blogjava.net/chinajox/archive/2005/11/04/18111.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> JAVA SCRIPT基础学习笔记(上) </title><link>http://www.blogjava.net/chinajox/archive/2005/11/04/18109.html</link><dc:creator>JAVA牛棚</dc:creator><author>JAVA牛棚</author><pubDate>Fri, 04 Nov 2005 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/chinajox/archive/2005/11/04/18109.html</guid><wfw:comment>http://www.blogjava.net/chinajox/comments/18109.html</wfw:comment><comments>http://www.blogjava.net/chinajox/archive/2005/11/04/18109.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/chinajox/comments/commentRss/18109.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinajox/services/trackbacks/18109.html</trackback:ping><description><![CDATA[时时转帖<BR><BR>记录JAVA SCRIPT宝典中的内容:<BR>1.document.write(""); 输出语句<BR>2.JS中的注释为//<BR>3.传统的HTML文档顺序是:document->html->(head,body)<BR>4.一个浏览器窗口中的DOM顺序是:window->(navigator,screen,history,location,document)<BR>5.得到表单中元素的名称和值:document.getElementById("表单中元素的ID号").name(或value)<BR>6.一个小写转大写的JS: document.getElementById("output").value = document.getElementById("input").value.toUpperCase();<BR>7.JS中的值类型:String,Number,Boolean,Null,Object,Function<BR>8.JS中的字符型转换成数值型:parseInt(),parseFloat()<BR>9.JS中的数字转换成字符型:(""+变量)<BR>10.JS中的取字符串长度是:(length)<BR>11.JS中的字符与字符相连接使用+号.<BR>12.JS中的比较操作符有:==等于,!=不等于,>,>=,<.<=<BR>13.JS中声明变量使用:var来进行声明<BR>14.JS中的判断语句结构:if(condition){}else{}<BR>15.JS中的循环结构:for([initial expression];[condition];[upadte expression]) {inside loop}<BR>16.循环中止的命令是:break<BR>17.JS中的函数定义:function functionName([parameter],...){statement[s]}<BR>18.当文件中出现多个form表单时.可以用document.forms[0],document.forms[1]来代替.<BR>19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self<BR>20.状态栏的设置:window.status="字符";<BR>21.弹出提示信息:window.alert("字符");<BR>22.弹出确认框:window.confirm();<BR>23.弹出输入提示框:window.prompt();<BR>24.指定当前显示链接的位置:window.location.href="URL"<BR>25.取出窗体中的所有表单的数量:document.forms.length<BR>26.关闭文档的输出流:document.close();<BR>27.字符串追加连接符:+=<BR>28.创建一个文档元素:document.createElement(),document.createTextNode()<BR>29.得到元素的方法:document.getElementById()<BR>30.设置表单中所有文本型的成员的值为空:<BR> var form = window.document.forms[0]<BR> for (var i = 0; i<FORM.ELEMENTS.LENGTH;I++){<BR>     if (form.elements[i].type == "text"){<BR>         form.elements[i].value = "";<BR>     }<BR> }<BR>31.复选按钮在JS中判断是否选中:document.forms[0].checkThis.checked (checked属性代表为是否选中返回TRUE或FALSE)<BR>32.单选按钮组(单选按钮的名称必须相同):取单选按钮组的长度document.forms[0].groupName.length<BR>33.单选按钮组判断是否被选中也是用checked.<BR>34.下拉列表框的值:document.forms[0].selectName.options[n].value (n有时用下拉列表框名称加上.selectedIndex来确定被选中的值)<BR>35.字符串的定义:var myString = new String("This is lightsword");<BR>36.字符串转成大写:string.toUpperCase(); 字符串转成小写:string.toLowerCase();<BR>37.返回字符串2在字符串1中出现的位置:String1.indexOf("String2")!=-1则说明没找到.<BR>38.取字符串中指定位置的一个字符:StringA.charAt(9);<BR>39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6);<BR>40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函数,Math.floor(Math.random()*(n+1))返回随机数<BR>41.定义日期型变量:var today = new Date();<BR>42.日期函数列表:dateObj.getTime()得到时间,dateObj.getYear()得到年份,dateObj.getFullYear()得到四位的年份,dateObj.getMonth()得到月份,dateObj.getDate()得到日,dateObj.getDay()得到日期几,dateObj.getHours()得到小时,dateObj.getMinutes()得到分,dateObj.getSeconds()得到秒,dateObj.setTime(value)设置时间,dateObj.setYear(val)设置年,dateObj.setMonth(val)设置月,dateObj.setDate(val)设置日,dateObj.setDay(val)设置星期几,dateObj.setHours设置小时,dateObj.setMinutes(val)设置分,dateObj.setSeconds(val)设置秒  [注意:此日期时间从0开始计]<BR>43.FRAME的表示方式: [window.]frames[n].ObjFuncVarName,frames["frameName"].ObjFuncVarName,frameName.ObjFuncVarName<BR>44.parent代表父亲对象,top代表最顶端对象<BR>45.打开子窗口的父窗口为:opener<BR>46.表示当前所属的位置:this<BR>47.当在超链接中调用JS函数时用:(javascript:)来开头后面加函数名<BR>48.在老的浏览器中不执行此JS:<!--      //--><BR>49.引用一个文件式的JS:
<SCRIPT src="aaa.js" type=text/javascript></SCRIPT>
<BR>50.指定在不支持脚本的浏览器显示的HTML:<NOSCRIPT></NOSCRIPT><BR>51.当超链和ONCLICK事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例:<A onclick="location.href='b.html';return false" href="a.html">dfsadf</A><BR>52.JS的内建对象有:Array,Boolean,Date,Error,EvalError,Function,Math,Number,Object,RangeError,ReferenceError,RegExp,String,SyntaxError,TypeError,URIError<BR>53.JS中的换行:\n<BR>54.窗口全屏大小:
<SCRIPT>function fullScreen(){ this.moveTo(0,0);this.outerWidth=screen.availWidth;this.outerHeight=screen.availHeight;}window.maximize=fullScreen;</SCRIPT>
<BR>55.JS中的all代表其下层的全部元素 <img src ="http://www.blogjava.net/chinajox/aggbug/18109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinajox/" target="_blank">JAVA牛棚</a> 2005-11-04 11:46 <a href="http://www.blogjava.net/chinajox/archive/2005/11/04/18109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中如何确定浮点数的精度(摘)</title><link>http://www.blogjava.net/chinajox/archive/2005/11/04/18108.html</link><dc:creator>JAVA牛棚</dc:creator><author>JAVA牛棚</author><pubDate>Fri, 04 Nov 2005 03:44:00 GMT</pubDate><guid>http://www.blogjava.net/chinajox/archive/2005/11/04/18108.html</guid><wfw:comment>http://www.blogjava.net/chinajox/comments/18108.html</wfw:comment><comments>http://www.blogjava.net/chinajox/archive/2005/11/04/18108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinajox/comments/commentRss/18108.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinajox/services/trackbacks/18108.html</trackback:ping><description><![CDATA[时时整理<BR><BR>//保留小数点后两位小数<BR>public double Number2(double pDouble)<BR>{<BR>&nbsp; BigDecimal&nbsp; bd=new&nbsp; BigDecimal(pDouble);<BR>&nbsp; BigDecimal&nbsp; bd1=bd.setScale(2,bd.ROUND_HALF_UP);<BR>&nbsp; pDouble=bd1.doubleValue();<BR>&nbsp; long&nbsp; ll = Double.doubleToLongBits(pDouble);<BR>&nbsp; return pDouble;<BR>}<BR><BR>格式化输出数字<BR>翻译：Cherami<BR>email:cherami@163.net<BR>原文：http://developer.java.sun.com/developer/TechTips/2000/tt0411.html<BR> * 格式化输出数字<BR>格式化输出数字<BR>有时我们需要控制输出的数字的格式，如何使用java的类库做到这个呢？<BR>也许你不关心格式，但是你需要关心你的程序可以在全世界通用，像下面的这样一个简单的语句是依赖地区的：<BR>&nbsp;&nbsp;&nbsp; System.out.println(1234.56);<BR>在美国，"." 是小数点，但在其它地方就不一定了。如何处理这个呢？<BR><BR>java.text 包中的一些包可以处理这类问题。下面的简单范例使用那些类解决上面提出的问题：<BR>&nbsp;&nbsp;&nbsp; import java.text.NumberFormat;<BR>&nbsp;&nbsp;&nbsp; import java.util.Locale;<BR>&nbsp;&nbsp;&nbsp; public class DecimalFormat1 {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[]) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 得到本地的缺省格式<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NumberFormat nf1 = NumberFormat.getInstance();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(nf1.format(1234.56));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 得到德国的格式<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NumberFormat nf2 =<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NumberFormat.getInstance(Locale.GERMAN);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(nf2.format(1234.56));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR><BR>如果你在美国，运行程序后输出：<BR>&nbsp;&nbsp;&nbsp; 1,234.56<BR>&nbsp;&nbsp;&nbsp; 1.234,56<BR>换句话说，在不同的地方使用不同的习惯表示数字。<BR><BR>NumberFormat.getInstance()方法返回NumberFormat的一个实例(实际上是NumberFormat具体的一个子类，例如DecimalFormat), 这适合根据本地设置格式化一个数字。你也可以使用非缺省的地区设置，例如德国。然后格式化方法根据特定的地区规则格式化数字。这个程序也可以使用一个简单的形式：<BR>&nbsp;&nbsp;&nbsp; NumberFormat.getInstance().format(1234.56)<BR>但是保存一个格式然后重用更加有效。国际化是格式化数字时的一个大问题。<BR>另一个是对格式的有效控制，例如指定小数部分的位数，下面是解决这个问题的一个简单例子：<BR>&nbsp;&nbsp;&nbsp; import java.text.DecimalFormat;<BR>&nbsp;&nbsp;&nbsp; import java.util.Locale;<BR>&nbsp;&nbsp;&nbsp; public class DecimalFormat2 {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[]) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 得到本地的缺省格式<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DecimalFormat df1 = new DecimalFormat("####.000");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(df1.format(1234.56));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 得到德国的格式<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Locale.setDefault(Locale.GERMAN);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DecimalFormat df2 = new DecimalFormat("####.000");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(df2.format(1234.56));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>在这个例子中设置了数字的格式，使用像"####.000"的符号。这个模式意味着在小数点前有四个数字，如果不够就空着，小数点后有三位数字，不足用0补齐。程序的输出：<BR>&nbsp;&nbsp;&nbsp; 1234.560<BR>&nbsp;&nbsp;&nbsp; 1234,560<BR>相似的，也可以控制指数形式的格式，例如：<BR>&nbsp;&nbsp;&nbsp; import java.text.DecimalFormat;<BR>&nbsp;&nbsp;&nbsp; public class DecimalFormat3 {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[]) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DecimalFormat df = new DecimalFormat("0.000E0000");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(df.format(1234.56));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>输出：<BR>&nbsp;&nbsp;&nbsp; 1.235E0003<BR>对于百分数：<BR>&nbsp;&nbsp;&nbsp; import java.text.NumberFormat;<BR>&nbsp;&nbsp;&nbsp; public class DecimalFormat4 {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[]) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NumberFormat nf = NumberFormat.getPercentInstance();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(nf.format(0.47));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>输出：<BR>&nbsp;&nbsp;&nbsp; 47%<BR>至此，你已经看到了格式化数字的几个不同的技术。另一方面，如何读取并解析包含格式化的数字的字符串？解析支持包含在NumberFormat中。例如：<BR>&nbsp;&nbsp;&nbsp; import java.util.Locale;<BR>&nbsp;&nbsp;&nbsp; import java.text.NumberFormat;<BR>&nbsp;&nbsp;&nbsp; import java.text.ParseException;<BR>&nbsp;&nbsp;&nbsp; public class DecimalFormat5 {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[]) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 本地格式<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NumberFormat nf1 = NumberFormat.getInstance();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object obj1 = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 基于格式的解析<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obj1 = nf1.parse("1234,56");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (ParseException e1) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println(e1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(obj1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 德国格式<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NumberFormat nf2 =NumberFormat.getInstance(Locale.GERMAN);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object obj2 = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 基于格式的解析<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obj2 = nf2.parse("1234,56");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (ParseException e2) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println(e2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(obj2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>这个例子分两部分，都是解析一个字符串："1234,56"。第一部分使用本地格式解析，第二部分使用德国格式解析。当程序在美国运行，结果是：<BR>&nbsp;&nbsp;&nbsp; 123456<BR>&nbsp;&nbsp;&nbsp; 1234.56<BR>换句话说，"1234,56"在美国被认为是一个巨大的整数"123456"而在德国被认为是一个小数"1234.56"。<BR>还有格式化讨论的最后一个问题。在上面的例子中， DecimalFormat 和 NumberFormat 都被使用了。DecimalFormat 常用于获得很好的格式控制，而NumberFormat 常用于指定不同于本地的地区。如何结合两个类呢？<BR><BR>答案围绕着这样的事实：DecimalFormat是NumberFormat的一个子类,其实例被指定为特定的地区。因此，你可以使用NumberFormat.getInstance 指定一个地区，然后将结构强制转换为一个DecimalFormat对象。文档中提到这个技术可以在大多情况下适用，但是你需要用try/catch 块包围强制转换以防转换不能正常工作 (大概在非常不明显得情况下使用一个奇异的地区)。下面是一个这样的例子：<BR>&nbsp;&nbsp;&nbsp; import java.text.DecimalFormat;<BR>&nbsp;&nbsp;&nbsp; import java.text.NumberFormat;<BR>&nbsp;&nbsp;&nbsp; import java.util.Locale;<BR>&nbsp;&nbsp;&nbsp; public class DecimalFormat6 {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[]) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DecimalFormat df = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 得到一个NumberFormat 对象并<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 强制转换为一个 DecimalFormat 对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; df = (DecimalFormat)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NumberFormat.getInstance(Locale.GERMAN);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (ClassCastException e) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println(e);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置格式模式<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; df.applyPattern("####.00000");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // format a number<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(df.format(1234.56));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR><BR>getInstance() 方法获得格式，然后调用applyPattern()方法设置格式模式，输出：<BR>&nbsp;&nbsp;&nbsp; 1234,56000<BR>如果你不关心国际化，可以直接使用DecimalFormat 。<BR><BR><img src ="http://www.blogjava.net/chinajox/aggbug/18108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinajox/" target="_blank">JAVA牛棚</a> 2005-11-04 11:44 <a href="http://www.blogjava.net/chinajox/archive/2005/11/04/18108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA基础测试中异常问题汇总（3）</title><link>http://www.blogjava.net/chinajox/archive/2005/11/02/17766.html</link><dc:creator>JAVA牛棚</dc:creator><author>JAVA牛棚</author><pubDate>Wed, 02 Nov 2005 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/chinajox/archive/2005/11/02/17766.html</guid><wfw:comment>http://www.blogjava.net/chinajox/comments/17766.html</wfw:comment><comments>http://www.blogjava.net/chinajox/archive/2005/11/02/17766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinajox/comments/commentRss/17766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinajox/services/trackbacks/17766.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width=448 border=0>
<TBODY>
<TR>
<TD colSpan=2 height=29>RKIND提供　　时时整理<BR><BR><STRONG>Struts常见错误汇总<BR></STRONG></TD></TR>
<TR>
<TD style="WORD-BREAK: break-all" colSpan=2>以下所说的struts-config.xml和ApplicationResources.properties等文件名是缺省时使用的，如果你使用了多模块，或指定了不同的资源文件名称，这些名字要做相应的修改。<BR><BR>　　1、“No&nbsp;bean&nbsp;found&nbsp;under&nbsp;attribute&nbsp;key&nbsp;XXX”<BR>　　在struts-config.xml里定义了一个ActionForm，但type属性指定的类不存在，type属性的值应该是Form类的全名。或者是，在Action的定义中，name或attribute属性指定的ActionForm不存在。<BR><BR>　　2、“Cannot&nbsp;find&nbsp;bean&nbsp;XXX&nbsp;in&nbsp;any&nbsp;scope”<BR>　　在Action里一般会request.setAttribute()一些对象，然后在转向的jsp文件里（用tag或request.getAttribute()方法）得到这些对象并显示出来。这个异常是说jsp要得到一个对象，但前面的Action里并没有将对象设置到request（也可以是session、servletContext）里。<BR>可能是名字错了，请检查jsp里的tag的一般是name属性，或getAttribute()方法的参数值；或者是Action逻辑有问题没有执行setAttribute()方法就先转向了。<BR>还有另外一个可能，纯粹是jsp文件的问题，例如&lt;logic:iterate&gt;会指定一个id值，然后在循环里&lt;bean:write&gt;使用这个值作为name的值，如果这两个值不同，也会出现此异常。（都是一个道理，request里没有对应的对象。）<BR><BR>　　3、“Missing&nbsp;message&nbsp;for&nbsp;key&nbsp;"XXX"”<BR>　　缺少所需的资源，检查ApplicationResources.properties文件里是否有jsp文件里需要的资源，例如：<BR>　　&lt;bean:message&nbsp;key="msg.name.prompt"/&gt;<BR>　　这行代码会找msg.name.prompt资源，如果AppliationResources.properties里没有这个资源就会出现本异常。在使用多模块时，要注意在模块的struts-config-xxx.xml里指定要使用的资源文件名称，否则当然什么资源也找不到，这也是一个很容易犯的错误。<BR><BR>　　4、“No&nbsp;getter&nbsp;method&nbsp;for&nbsp;property&nbsp;XXX&nbsp;of&nbsp;bean&nbsp;teacher”<BR>　　这条异常信息说得很明白，jsp里要取一个bean的属性出来，但这个bean并没有这个属性。你应该检查jsp中某个标签的property属性的值。例如下面代码中的cade应该改为code才对：<BR>　　&lt;bean:write&nbsp;name="teacher"&nbsp;property="cade"&nbsp;filter="true"/&gt;<BR><BR>　　5、“Cannot&nbsp;find&nbsp;ActionMappings&nbsp;or&nbsp;ActionFormBeans&nbsp;collection”<BR>　　待解决。<BR><BR>　　6、“Cannot&nbsp;retrieve&nbsp;mapping&nbsp;for&nbsp;action&nbsp;XXX”<BR>　　在.jsp的&lt;form&gt;标签里指定action='/XXX'，但这个Action并未在struts-config.xml里设置过。<BR><BR>　　7、HTTP&nbsp;Status&nbsp;404&nbsp;-&nbsp;/xxx/xxx.jsp<BR>　　Forward的path属性指向的jsp页面不存在，请检查路径和模块，对于同一模块中的Action转向，path中不应包含模块名；模块间转向，记住使用contextRelative="true"。<BR><BR>　　8、没有任何异常信息，显示空白页面<BR>　　可能是Action里使用的forward与struts-config.xml里定义的forward名称不匹配。<BR><BR>　　9、“The&nbsp;element&nbsp;type&nbsp;"XXX"&nbsp;must&nbsp;be&nbsp;terminated&nbsp;by&nbsp;the&nbsp;matching&nbsp;end-tag&nbsp;"XXX".”<BR>　　这个是struts-config.xml文件的格式错误，仔细检查它是否是良构的xml文件，关于xml文件的格式这里就不赘述了。<BR><BR>　　10、“Servlet.init()&nbsp;for&nbsp;servlet&nbsp;action&nbsp;threw&nbsp;exception”<BR>　　一般出现这种异常在后面会显示一个关于ActionServlet的异常堆栈信息，其中指出了异常具体出现在代码的哪一行。我曾经遇到的一次提示如下：<BR><BR>　　java.lang.NullPointerException<BR>　　　at&nbsp;org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003)<BR>　　　at&nbsp;org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955)<BR><BR>　　为解决问题，先下载struts的源码包，然后在ActionServlet.java的第1003行插入断点，并对各变量进行监视。很丢人，我竟然把struts-config.xml文件弄丢了，因此出现了上面的异常，应该是和CVS同步时不小心删除的。<BR><BR>　　11、“Resources&nbsp;not&nbsp;defined&nbsp;for&nbsp;Validator”<BR>　　这个是利用Validator插件做验证时可能出现的异常，这时你要检查validation.xml文件，看里面使用的资源是否确实有定义，form的名称是否正确，等等。</TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/chinajox/aggbug/17766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinajox/" target="_blank">JAVA牛棚</a> 2005-11-02 09:42 <a href="http://www.blogjava.net/chinajox/archive/2005/11/02/17766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA基础测试中异常问题汇总（2）</title><link>http://www.blogjava.net/chinajox/archive/2005/11/02/17765.html</link><dc:creator>JAVA牛棚</dc:creator><author>JAVA牛棚</author><pubDate>Wed, 02 Nov 2005 01:37:00 GMT</pubDate><guid>http://www.blogjava.net/chinajox/archive/2005/11/02/17765.html</guid><wfw:comment>http://www.blogjava.net/chinajox/comments/17765.html</wfw:comment><comments>http://www.blogjava.net/chinajox/archive/2005/11/02/17765.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinajox/comments/commentRss/17765.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinajox/services/trackbacks/17765.html</trackback:ping><description><![CDATA[<P>4、JAVA错误：&nbsp;java.lang.Error&nbsp;<BR><BR>原因:&nbsp;<BR><BR>1.对系统所访问外部资源，未执行关闭操作，导致外部资源大量浪费，最终可能导致系统无法正常运行；&nbsp;<BR>2.对系统所访问的外部资源关闭次数太多，外部系统无法正常处理；&nbsp;<BR>3.系统访问的外部资源出现异常情况。&nbsp;<BR>解决方案：&nbsp;<BR><BR>1.访问外部资源前，首先检查该资源(如数据库)是否可正常连接或操作。&nbsp;<BR>2.访问外部资源时，如果进行了连接，一定进行关闭操作，并仅进行一次关闭操作。&nbsp;<BR>3.尽量在同一操作中共享外部资源，以减少该操作对资源的消费，提高程序的执行效率<BR><BR><BR>5、空指针错误&nbsp;：java.lang.NullPointerException&nbsp;<BR><BR>使用基本的JAVA数据类型，变量的值要么已经是默认值，如果没有对其正常赋值，程序便不能通过编译，因此使用基本的JAVA数据类型(double,float,boolean,char,int,long)一般不会引起空指针异常。由此可见，空指针异常主要跟与对象的操作相关。&nbsp;<BR><BR>下面先列出了可能发生空指针异常的几种情况及相应解决方案：&nbsp;<BR><BR>不管对象是否为空就直接开始使用。&nbsp;<BR>(JSP)代码段1：&nbsp;<BR>out.println(request.getParameter("username"));&nbsp;<BR>描述：&nbsp;<BR>代码段1的功能十分简单，就是输出用户输入的表域"username"的值。&nbsp;<BR><BR>说明：&nbsp;<BR>看上去，上面的语句找不出什么语法错误，而且在大多数情况下也遇不到什么问题。但是，如果某个用户在输入数据时并没有提供表单域"username"的值，或通过某种途径绕过表单直接输入时，此时request.getParameter("username")的值为空（不是空字符串，是空对象null。），out对象的println方法是无法直接对空对象操作，因此代码段1所在的JSP页面将会抛出"java.lang.NullPointerException"异常。&nbsp;<BR><BR>即使对象可能为空时，也调用java.lang.Object或Object对象本身的一些方法如toString(),&nbsp;equals(Object&nbsp;obj)等操作。&nbsp;<BR>(JSP)代码段2：&nbsp;<BR><BR>String&nbsp;userName&nbsp;=&nbsp;request.getParameter("username");&nbsp;<BR>If&nbsp;(userName.equals("root"))&nbsp;<BR>{....}&nbsp;<BR><BR><BR>描述：&nbsp;<BR>代码段2的功能是检测用户提供的用户名，如果是用户名称为"root"的用户时，就执行一些特别的操作。&nbsp;<BR><BR>说明：&nbsp;<BR>在代码段2中，如果有用户没有提供表单域"username"的值时，字符串对象userName为null值，不能够将一个null的对象与另一个对象直接比较，同样，代码段2所在的JSP页面就会抛出(java.lang.NullPointerException)空指针错误。&nbsp;<BR><BR>(JSP)代码段3：&nbsp;<BR>String&nbsp;userName&nbsp;=&nbsp;session.getAttribute("session.username").toString();&nbsp;<BR><BR>描述：&nbsp;<BR>代码段3的功能是将session中session.username的值取出，并将该值赋给字符串对象&nbsp;userName。&nbsp;<BR><BR>说明：&nbsp;<BR>在一般情况下，如果在用户已经进行某个会话，则不会出现什么问题；但是，如果此时应用服务器重新启动，而用户还没有重新登录，（也可能是用户关闭浏览器，但是仍打开原来的页面。）那么，此时该session的值就会失效，同时导致session中的session.username的值为空。对一个为null的对象的直接执行toString()操作，就会导致系统抛出(java.lang.NullPointerException)空指针异常。&nbsp;<BR><BR>解决方案：&nbsp;<BR>为了确保进行操作或引用的对象非空，假若我们要对某对象进行操作或引用，我们首先去检查该对象是否已经实例化且不为空；并且在系统中加入针对对象为空时情况的处理。&nbsp;<BR><BR>如：采用String对象保存用户提交的结果；在如果涉及对象的操作时，先检测其是否为空后，检查到对象为空后，可再选择进行以下任一种处理方式：&nbsp;<BR><BR>处理方式&nbsp;1)&nbsp;检查到对象为空时，设置对象值为空字符串或一个默认值；&nbsp;<BR>处理方式&nbsp;2)&nbsp;检测到对象为空时，根本不执行某操作，直接跳转到其他处理中。&nbsp;<BR>处理方式&nbsp;3)&nbsp;检查到对象为空时，提示用户操作有错误。&nbsp;<BR>将代码段2按以上方式进行改写，得到：&nbsp;<BR>方式1：&nbsp;<BR><BR>String&nbsp;userName&nbsp;=&nbsp;request.getParameter("username");&nbsp;<BR>//&nbsp;该变量值为空时，转化为默认空字符串&nbsp;<BR>If&nbsp;(userName&nbsp;==&nbsp;null)&nbsp;<BR>userName&nbsp;=&nbsp;"";&nbsp;<BR>If&nbsp;(userName.equals("root"))&nbsp;<BR>{..........}&nbsp;<BR><BR><BR>方式2：&nbsp;<BR><BR>String&nbsp;userName&nbsp;=&nbsp;request.getParameter("username");&nbsp;<BR>//&nbsp;该变量值为空时，转化为默认空字符串，不执行有关操作。&nbsp;<BR>If&nbsp;(usreName&nbsp;!=&nbsp;null)&nbsp;<BR>{&nbsp;<BR>If&nbsp;(userName.equals("root"))&nbsp;<BR>{..........}&nbsp;<BR>}&nbsp;<BR><BR><BR><BR><BR><BR>方式3：&nbsp;<BR><BR>String&nbsp;userName&nbsp;=&nbsp;request.getParameter("username");&nbsp;<BR>//&nbsp;该变量值为空时，转化为默认空字符串，不执行有关操作。&nbsp;<BR>If&nbsp;(usreName&nbsp;==&nbsp;null)&nbsp;<BR>{&nbsp;<BR>//&nbsp;提示用户输入信息为空&nbsp;<BR>}&nbsp;<BR><BR><BR><BR><BR><BR>实际中，上面提供到三种处理方式也同样适用于其他异常的处理：&nbsp;<BR><BR>异常处理方式&nbsp;1)&nbsp;检查到异常出现，设置对象值为空字符串或一个默认值；&nbsp;<BR>异常处理方式&nbsp;2)&nbsp;检测到异常出现，根本不执行某操作，直接跳转到其他处理中。&nbsp;<BR>异常处理方式&nbsp;3)&nbsp;检查到异常出现，提示用户操作有错误。<BR><BR><BR>（如有错误请指正。）</P><img src ="http://www.blogjava.net/chinajox/aggbug/17765.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinajox/" target="_blank">JAVA牛棚</a> 2005-11-02 09:37 <a href="http://www.blogjava.net/chinajox/archive/2005/11/02/17765.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试报告编写指南</title><link>http://www.blogjava.net/chinajox/archive/2005/11/02/17764.html</link><dc:creator>JAVA牛棚</dc:creator><author>JAVA牛棚</author><pubDate>Wed, 02 Nov 2005 01:33:00 GMT</pubDate><guid>http://www.blogjava.net/chinajox/archive/2005/11/02/17764.html</guid><wfw:comment>http://www.blogjava.net/chinajox/comments/17764.html</wfw:comment><comments>http://www.blogjava.net/chinajox/archive/2005/11/02/17764.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinajox/comments/commentRss/17764.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinajox/services/trackbacks/17764.html</trackback:ping><description><![CDATA[<P><BR>作者： 钟华 （来源：希赛网）&nbsp; </P>
<P>摘要 测试报告是把测试的过程和结果写成文档，并对发现的问题和缺陷进行分析，为纠正软件的存在的质量问题提供依据，同时为软件验收和交付打下基础。本文提供测试报告模板以及如何编写的实例指南。 <BR>关键字 测试报告 缺陷 </P>
<P><BR>正文 <BR>&nbsp;&nbsp;&nbsp; 测试报告是测试阶段最后的文档产出物，优秀的测试经理应该具备良好的文档编写能力，一份详细的测试报告包含足够的信息，包括产品质量和测试过程的评价，测试报告基于测试中的数据采集以及对最终的测试结果分析。<BR>下面以通用的测试报告模板为例，详细展开对测试报告编写的具体描述。<BR>PARTⅠ 首页<BR>0.1页面内容： <BR>密级 <BR>&nbsp;&nbsp;&nbsp; 通常，测试报告供内部测试完毕后使用，因此密级为中，如果可供用户和更多的人阅读，密级为低，高密级的测试报告适合内部研发项目以及涉及保密行业和技术版权的项目。 <BR>XXXX项目/系统测试报告 <BR>报告编号 <BR>&nbsp;&nbsp;&nbsp; 可供索引的内部编号或者用户要求分布提交时的序列号 </P>
<P>部门经理 ______项目经理______ <BR>开发经理______测试经理______ </P>
<P>XXX公司 XXXX单位 （此处包含用户单位以及研发此系统的公司） <BR>XXXX年XX月XX日 <BR>0.2格式要求： <BR>&nbsp;&nbsp;&nbsp; 标题一般采用大体字（如一号），加粗，宋体，居中排列 <BR>副标题采用大体小一号字（如二号）加粗，宋体，居中排列 <BR>其他采用四号字，宋体，居中排列 <BR>0.3版本控制： <BR>版本 作者 时间 变更摘要 <BR>新建/变更/审核 </P>
<P>PARTⅡ 引言部分 </P>
<P>1.1编写目的 <BR>&nbsp;&nbsp;&nbsp; 本测试报告的具体编写目的，指出预期的读者范围。 <BR>实例：本测试报告为XXX项目的测试报告，目的在于总结测试阶段的测试以及分析测试结果，描述系统是否符合需求（或达到XXX功能目标）。预期参考人员包括用户、测试人员、、开发人员、项目管理者、其他质量管理人员和需要阅读本报告的高层经理。 <BR>提示：通常，用户对测试结论部分感兴趣，开发人员希望从缺陷结果以及分析得到产品开发质量的信息，项目管理者对测试执行中成本、资源和时间予与重视，而高层经理希望能够阅读到简单的图表并且能够与其他项目进行同向比较。此部分可以具体描述为什么类型的人可参考本报告XXX页XXX章节，你的报告读者越多，你的工作越容易被人重视，前提是必须让阅读者感到你的报告是有价值而且值得浪费一点时间去关注的。 <BR>1.2项目背景 <BR>&nbsp;&nbsp;&nbsp; 对项目目标和目的进行简要说明。必要时包括简史，这部分不需要脑力劳动，直接从需求或者招标文件中拷贝即可。 <BR>1.3系统简介 <BR>&nbsp;&nbsp;&nbsp; 如果设计说明书有此部分，照抄。注意必要的框架图和网络拓扑图能吸引眼球。 <BR>1.4术语和缩写词 <BR>&nbsp;&nbsp;&nbsp; 列出设计本系统/项目的专用术语和缩写语约定。对于技术相关的名词和与多义词一定要注明清楚，以便阅读时不会产生歧义。 <BR>1.5参考资料 <BR>1．需求、设计、测试用例、手册以及其他项目文档都是范围内可参考的东东。 <BR>2．测试使用的国家标准、行业指标、公司规范和质量手册等等 <BR>PARTⅢ 测试概要 <BR>测试的概要介绍，包括测试的一些声明、测试范围、测试目的等等，主要是测试情况简介。（其他测试经理和质量人员关注部分） <BR>2.1测试用例设计 <BR>&nbsp;&nbsp;&nbsp; 简要介绍测试用例的设计方法。例如：等价类划分、边界值、因果图，以及用这类方法(3-4句)。 <BR>提示：如果能够具体对设计进行说明，在其他开发人员、测试经理阅读的时候就容易对你的用例设计有个整体的概念，顺便说一句，在这里写上一些非常规的设计方法也是有利的，至少在没有看到测试结论之前就可以了解到测试经理的设计技术，重点测试部分一定要保证有两种以上不同的用例设计方法。 <BR>2.2测试环境与配置 <BR>&nbsp;&nbsp;&nbsp; 简要介绍测试环境及其配置。 <BR>&nbsp;&nbsp;&nbsp; 提示：清单如下，如果系统/项目比较大，则用表格方式列出 </P>
<P>数据库服务器配置 <BR>CPU： <BR>内存： <BR>硬盘：可用空间大小 <BR>操作系统： <BR>应用软件： <BR>机器网络名： <BR>局域网地址： <BR>应用服务器配置 <BR>……. <BR>客户端配置 <BR>……. </P>
<P>&nbsp;&nbsp;&nbsp; 对于网络设备和要求也可以使用相应的表格，对于三层架构的，可以根据网络拓扑图列出相关配置。 <BR>2.3测试方法(和工具) <BR>&nbsp;&nbsp;&nbsp; 简要介绍测试中采用的方法(和工具)。 <BR>提示：主要是黑盒测试，测试方法可以写上测试的重点和采用的测试模式，这样可以一目了然的知道是否遗漏了重要的测试点和关键块。工具为可选项，当使用到测试工具和相关工具时，要说明。注意要注明是自产还是厂商，版本号多少，在测试报告发布后要避免大多工具的版权问题。 <BR>PARTⅣ 测试结果及缺陷分析 <BR>整个测试报告中这是最激动人心的部分，这部分主要汇总各种数据并进行度量，度量包括对测试过程的度量和能力评估、对软件产品的质量度量和产品评估。对于不需要过程度量或者相对较小的项目，例如用于验收时提交用户的测试报告、小型项目的测试报告，可省略过程方面的度量部分；而采用了CMM/ISO或者其他工程标准过程的，需要提供过程改进建议和参考的测试报告－主要用于公司内部测试改进和缺陷预防机制－则过程度量需要列出。 <BR>3.1测试执行情况与记录 <BR>描述测试资源消耗情况，记录实际数据。（测试、项目经理关注部分） <BR>3.1.1测试组织 <BR>&nbsp;&nbsp;&nbsp; 可列出简单的测试组架构图，包括： <BR>测试组架构 （如存在分组、用户参与等情况） <BR>测试经理（领导人员） <BR>主要测试人员 <BR>参与测试人员 <BR>3.1.2测试时间 <BR>&nbsp;&nbsp;&nbsp; 列出测试的跨度和工作量，最好区分测试文档和活动的时间。数据可供过程度量使用。 <BR>例如 XXX子系统/子功能 <BR>实际开始时间－实际结束时间 <BR>总工时/总工作日 <BR>任务 开始时间 结束时间 总计 <BR>合计 <BR>&nbsp;&nbsp;&nbsp; 对于大系统/项目来说最终要统计资源的总投入，必要时要增加成本一栏，以便管理者清楚的知道究竟花费了多少人力去完成测试。 <BR>测试类型 人员成本 工具设备 其他费用 </P>
<P>总计 <BR>&nbsp;&nbsp;&nbsp; 在数据汇总时可以统计个人的平均投入时间和总体时间、整体投入平均时间和总体时间，还可以算出每一个功能点所花费的时/人。 <BR>用时人员 编写用例 执行测试 总计 </P>
<P>合计 <BR>&nbsp;&nbsp;&nbsp; 这部分用于过程度量的数据包括文档生产率和测试执行率。 <BR>生产率人员 用例/编写时间 用例/执行时间 平均 </P>
<P>合计 <BR>3.1.3测试版本 <BR>&nbsp;&nbsp;&nbsp; 给出测试的版本，如果是最终报告，可能要报告测试次数回归测试多少次。列出表格清单则便于知道那个子系统/子模块的测试频度，对于多次回归的子系统/子模块将引起开发者关注。 <BR>3.2覆盖分析 <BR>3.2.1需求覆盖 <BR>&nbsp;&nbsp;&nbsp; 需求覆盖率是指经过测试的需求/功能和需求规格说明书中所有需求/功能的比值，通常情况下要达到100％的目标。 <BR>需求/功能（或编号） 测试类型 是否通过 备注 <BR>[Y][P][N][N/A] <BR>根据测试结果 ，按编号给出每一测试需求的通过与否结论。P表示部分通过，N/A表示不可测试或者用例不适用。实际上，需求跟踪矩阵列出了一一对应的用例情况以避免遗漏，此表作用为传达需求的测试信息以供检查和审核。 <BR>需求覆盖率计算 Y项/需求总数 ×100％ <BR>3.2.2测试覆盖 <BR>&nbsp;&nbsp;&nbsp; 需求/功能（或编号） 用例个数 执行总数 未执行 未/漏测分析和原因 </P>
<P>&nbsp;&nbsp;&nbsp; 实际上，测试用例已经记载了预期结果数据，测试缺陷上说明了实测结果数据和与预期结果数据的偏差；因此没有必要对每个编号在此包含更详细的说明的缺陷记录与偏差，列表的目的仅在于更好的查看测试结果。 <BR>测试覆盖率计算 执行数/用例总数 ×100％ </P>
<P>3.2缺陷的统计与分析 <BR>&nbsp;&nbsp;&nbsp; 缺陷统计主要涉及到被测系统的质量，因此，这部分成为开发人员、质量人员重点关注的部分。 <BR>3.3.1缺陷汇总 <BR>&nbsp;&nbsp;&nbsp; 被测系统 系统测试 回归测试 总计 </P>
<P>合计 <BR>按严重程度 <BR>严重 一般 微小 </P>
<P>按缺陷类型 <BR>用户界面 一致性 功能 算法 接口 文档 用户界面 其他 </P>
<P>按功能分布 <BR>功能一 功能二 功能三 功能四 功能五 功能六 功能七 </P>
<P>最好给出缺陷的饼状图和柱状图以便直观查看。俗话说一图胜千言，图标能够使阅读者迅速获得信息，尤其是各层面管理人员没有时间去逐项阅读文章。 </P>
<P>图例 <BR>3.3.2缺陷分析 <BR>&nbsp;&nbsp;&nbsp; 本部分对上述缺陷和其他收集数据进行综合分析 <BR>缺陷综合分析 <BR>缺陷发现效率 ＝ 缺陷总数/执行测试用时 <BR>可到具体人员得出平均指标 <BR>用例质量 ＝ 缺陷总数/测试用例总数 ×100％ <BR>缺陷密度 ＝ 缺陷总数/功能点总数 <BR>缺陷密度可以得出系统各功能或各需求的缺陷分布情况，开发人员可以在此分析基础上得出那部分功能/需求缺陷最多，从而在今后开发注意避免并注意在实施时予与关注，测试经验表明，测试缺陷越多的部分，其隐藏的缺陷也越多。 <BR>测试曲线图 <BR>描绘被测系统每工作日/周缺陷数情况，得出缺陷走势和趋向 </P>
<P>重要缺陷摘要 <BR>缺陷编号 简要描述 分析结果 备注 </P>
<P>3.3.3残留缺陷与未解决问题 <BR>残留缺陷 <BR>编号：BUG号 <BR>缺陷概要：该缺陷描述的事实 <BR>原因分析：如何引起缺陷，缺陷的后果，描述造成软件局限性和其他限制性的原因 <BR>预防和改进措施：弥补手段和长期策略 <BR>未解决问题 <BR>功能/测试类型： <BR>测试结果：与预期结果的偏差 <BR>缺陷：具体描述 <BR>评价：对这些问题的看法，也就是这些问题如果发出去了会造成什么样的影响 <BR>PARTⅤ 测试结论与建议 <BR>报告到了这个部分就是一个总结了，对上述过程、缺陷分析之后该下个结论，此部分为项目经理、部门经理以及高层经理关注，请清晰扼要的下定论。 <BR>4.1测试结论 <BR>1． 测试执行是否充分（可以增加对安全性、可靠性、可维护性和功能性描述） <BR>2． 对测试风险的控制措施和成效 <BR>3． 测试目标是否完成 <BR>4． 测试是否通过 <BR>5． 是否可以进入下一阶段项目目标 <BR>4.2建议 <BR>1．对系统存在问题的说明，描述测试所揭露的软件缺陷和不足，以及可能给软件实施和运行带来的影响 <BR>2．可能存在的潜在缺陷和后续工作 <BR>3．对缺陷修改和产品设计的建议 <BR>4．对过程改进方面的建议 </P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 测试报告的内容大同小异，对于一些测试报告而言，可能将第四和第五部分合并，逐项列出测试项、缺陷、分析和建议，这种方法也比较多见，尤其在第三方评测报告中，此份报告模板仅供参考。</P>
<P><BR>参考文献 <BR>《实用软件测试方法与应用》 电子工业出版社</P><img src ="http://www.blogjava.net/chinajox/aggbug/17764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinajox/" target="_blank">JAVA牛棚</a> 2005-11-02 09:33 <a href="http://www.blogjava.net/chinajox/archive/2005/11/02/17764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA基础测试中异常问题汇总（1）</title><link>http://www.blogjava.net/chinajox/archive/2005/10/28/17204.html</link><dc:creator>JAVA牛棚</dc:creator><author>JAVA牛棚</author><pubDate>Fri, 28 Oct 2005 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/chinajox/archive/2005/10/28/17204.html</guid><wfw:comment>http://www.blogjava.net/chinajox/comments/17204.html</wfw:comment><comments>http://www.blogjava.net/chinajox/archive/2005/10/28/17204.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/chinajox/comments/commentRss/17204.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinajox/services/trackbacks/17204.html</trackback:ping><description><![CDATA[<P><FONT size=2>群友提供　时时整理<BR><BR>1、第一个JAVA例程：hello world</FONT></P>
<P><FONT size=2>执行时的问题：problems Executing Hello</FONT></P>
<P><FONT size=2>如果你看到下面的错误提示:<BR>'java' is not recognized as an internal or external command, ...<BR>or<BR>java: Command not found.<BR>那么你或许没有安装java或者在环境变量中并没有设置path路径java\bin目录。请检查你的java安装以及环境变量的正确设置。</FONT></P>
<P><FONT size=2>如果你看到:<BR>Exception in thread "main" java.lang.NoClassDefFoundError: hello <BR>(wrong name: Hello) ...<BR>那么你很有可能是因为没有注意大小写或是把名称中的字母打错了。如：<BR>java hello<BR>键入正确的命令重新运行即可。</FONT></P>
<P><FONT size=2>如果你看到:<BR>Exception in thread "main" java.lang.NoClassDefFoundError: Hello<BR>/class<BR>那么你需要考虑是否去掉名字中的.class部分。&nbsp;&nbsp;<BR>&nbsp;</FONT></P><FONT size=2>
<P><BR>2、分析出现java.lang.NoClassDefFoundError异常的具体情况</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个问题在上面调试第一个例程出现过，但是如果我们输入的名称是正确的，仍然提示这样的问题时怎么办呢？<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 装了JDK1.4.0版，而且JAVA_HOME，PATH和CLASSPATH都设置好了。如下<BR>JAVA_HOME=/home/jdk<BR>CLASSPATH=$JAVA_HOME/jre/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib/:$JAVA_HOME/lib<BR>PATH=$PATH:$JAVA_HOME/bin</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用JAVAC命令生成了hello.class,当使用java hello时，仍然提示：<BR>Exception in thread "main" java.lang.NoClassDefFoundError:XXX（wrong name:<BR>XXX）</P>
<P>解决提示：<BR>(1)、Add (current directory) to your classpath或类定义前面加public <BR>(2)、path环境变量中设置的路径中是否有另一个java.exe文件，默认执行的是这个目录下的java.exe，虽然版本与JDK下的java.exe一致，但是在此目录下执行就会出错。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方法：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装了JDK的情况下，应该删除winnt下的java.exe，确保默认调用的java.exe是位于jdk中bin目录下的java.exe。</P>
<P>(3)、假如你使用了packet<BR>那么检查你在编译了没有将指定package包在你文件中的java文件。<BR><BR>3、通常异常捕获处理：<BR>JAVA中几个基本异常简单的描述一下：<BR>ArithmeticException&nbsp;&nbsp;当出现异常算术条件时产生&nbsp;<BR>NullPointerException&nbsp;当应用程序企图使用需要的对象处为空时产生&nbsp;<BR>ArrayIndexOutOfBoundsException&nbsp;数组下标越界时产生&nbsp;<BR>ArrayStoreException&nbsp;当程序试图存储数组中错误的类型数据时产生&nbsp;<BR>FileNotFoundException&nbsp;试图访问的文件不存在时产生&nbsp;<BR>IOException&nbsp;由于一般I/O故障而引起的，如读文件故障&nbsp;<BR>NumberFormatException&nbsp;&nbsp;当把字符串转换为数值型数据失败时产生&nbsp;<BR>OutOfMemoryException&nbsp;&nbsp;内存不足时产生&nbsp;<BR>SecurityException&nbsp;&nbsp;当小应用程序（Applet）试图执行由于浏览器的安全设置而不允许的动作时产生&nbsp;<BR>StackOverflowException&nbsp;&nbsp;当系统的堆栈空间用完时产生&nbsp;<BR>StringIndexOutOfBoundsException&nbsp;&nbsp;当程序试图访问串中不存在的字符位置时产生&nbsp;<BR><BR>　　上述出现的异常基本上都是JAVA中我们可能会遇到的异常。<BR><BR>　　类Throwable有两个直接子类：Error和Exception。Exception类对象是Java程序处理或抛弃的对象。Java 提供了两种Exception 的模式，一种是执行的时候所产生的Exception (Runtime Exception)，另外一种则是受控制的Exception (Checked Exception)。所有的Checked Exception 均从java.lang.Exception 继承而来，而Runtime Exception 则继承java.lang.RuntimeException 或java.lang.Error (实际上java.lang.RuntimeException 的上一层也是java.lang.Exception)。它有各种不同的子类分别对应于不同类型的例外。其中类RuntimeException代表运行时由Java虚拟机生成的例外。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序的运作机制上看，Runtime Exception与Checked Exception 不一样，从逻辑上看，Runtime Exception 与Checked Exception 在使用的目的上也不一样。</P>
<P>　　一般而言，Checked Exception 表示这个Exception 必须要被处理，也就是说程序设计者应该已经知道可能会收到某个Exception(因为要try catch住) ，所以程序设计者应该能针对这些不同的Checked Exception 做出不同的处理。</P>
<P>　　而Runtime Exception 通常会暗示着程序上的错误，这种错误会导致程序设计者无法处理，而造成程序无法继续执行下去。<BR><BR>　　Java的可控制异常处理是通过5个关键字来实现的：try，catch，throw，throws，finally。JB的在线帮助中对这几个关键字是这样解释的：<BR>Throws:&nbsp;&nbsp;Lists the exceptions a method could throw.<BR>Throw:&nbsp;&nbsp;&nbsp;Transfers control of the method to the exception handler.<BR>Try：&nbsp;&nbsp;&nbsp;&nbsp;Opening exception-handling statement.<BR>Catch：&nbsp;&nbsp;Captures the exception.<BR>Finally： Runs its code before terminating the program.<BR><BR>·try语句　<BR>try语句用大括号{}指定了一段代码，该段代码可能会抛弃一个或多个例外。<BR><BR>·catch语句　<BR>　　catch语句的参数类似于方法的声明，包括一个例外类型和一个例外对象。例外类型必须为Throwable类的子类，它指明了catch语句所处理的例外类型，例外对象则由运行时系统在try所指定的代码块中生成并被捕获，大括号中包含对象的处理，其中可以调用对象的方法。<BR><BR>　　catch语句可以有多个，分别处理不同类的例外。Java运行时系统从上到下分别对每个catch语句处理的例外类型进行检测，直到找到类型相匹配的catch语句为止。这里，类型匹配指catch所处理的例外类型与生成的例外对象的类型完全一致或者是它的父类，因此，catch语句的排列顺序应该是从特殊到一般。<BR><BR>　　也可以用一个catch语句处理多个例外类型，这时它的例外类型参数应该是这多个例外类型的父类，程序设计中要根据具体的情况来选择catch语句的例外处理类型。　<BR><BR>·&nbsp;finally语句　<BR>　　try所限定的代码中，当抛弃一个例外时，其后的代码不会被执行。通过finally语句可以指定一块代码。无论try所指定的程序块中抛弃或不抛弃例外，也无论catch语句的例外类型是否与所抛弃的例外的类型一致，finally所指定的代码都要被执行，它提供了统一的出口。通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。不管异常是否发生都会执行finally中的语句。<BR><BR>·throws语句　<BR>　　throws总是出现在一个函数头中，用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说，Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是Error或 RuntimeException， 或它们的子类，这个规则不起作用， 因为这在程序的正常部分中是不期待出现的。 如果你想明确地抛出一个RuntimeException，你必须用throws语句来声明它的类型。<BR><BR>·&nbsp;throw语句　<BR>　　throw总是出现在函数体中，用来抛出一个异常。程序会在throw语句后立即终止，它后面的语句执行不到，然后在包含它的所有try块中（可能在上层调用函数中）从里向外寻找含有与其匹配的catch子句的try块。所有的方法都使用“throw”语句来抛出一个异常。Throw语句需要一个单独throwable对象，这个对象是任意Throwable类的子类。<BR><BR>例如：<BR>boolean testEx() throws Exception{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean ret = true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<BR>　&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret = testEx1();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("testEx, catch exception");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret = false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw e;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("testEx, finally; return value="+ret);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ret;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>如有问题请指正。未完</FONT></P><img src ="http://www.blogjava.net/chinajox/aggbug/17204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinajox/" target="_blank">JAVA牛棚</a> 2005-10-28 16:43 <a href="http://www.blogjava.net/chinajox/archive/2005/10/28/17204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>