﻿<?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/category/4144.html</link><description>我们爱JAVA</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 13:35:29 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 13:35:29 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>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基础测试中异常问题汇总（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>3</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><item><title>字符串中的正则表达式特殊符号</title><link>http://www.blogjava.net/chinajox/archive/2005/10/28/17181.html</link><dc:creator>JAVA牛棚</dc:creator><author>JAVA牛棚</author><pubDate>Fri, 28 Oct 2005 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/chinajox/archive/2005/10/28/17181.html</guid><wfw:comment>http://www.blogjava.net/chinajox/comments/17181.html</wfw:comment><comments>http://www.blogjava.net/chinajox/archive/2005/10/28/17181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinajox/comments/commentRss/17181.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinajox/services/trackbacks/17181.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width=447 border=0>
<TBODY>
<TR>
<TD colSpan=2 height=29><FONT color=#000000 size=2>双面提供　时时整理<BR><BR>问题：<BR></FONT><FONT color=#000000><FONT size=2><STRONG>String s1="111+222+333";<BR>System.out.println(s1.split("+").length);<BR>//输出时提示错误：<BR></STRONG>java.util.regex.PatternSyntaxException: Dangling meta character '+' near index<BR>问题出现在加号附近，查询相关的资料显示，+、*、|、\等符号在正则表达示中有相应的不同意义。<BR><BR><STRONG>正则表达式的基本用法&nbsp;zt</STRONG> </FONT></FONT></TD></TR>
<TR>
<TD style="WORD-BREAK: break-all" colSpan=2><FONT color=#000000 size=2>1、“.”为通配符，表示任何一个字符，例如：“a.c”可以匹配“anc”、“abc”、“acc”；<BR>2、“[]”，在[]内可以指定要求匹配的字符，例如：“a[nbc]c”可以匹配“anc”、“abc”、“acc；<BR>但不可以匹配“ancc”,a到z可以写成[a-z],0到9可以写成[0-9];<BR><BR>3、数量限定符号，表示匹配次数（或者叫做长度）的符号：<BR><BR>包括：“*”——0次或者多次<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“+”——1次或者多次<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“?”——0次或者1次<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“{n}”——匹配n次，n为整数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“{n,m}”——匹配从n到m之间的某个数的次数；n和m都是整数；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“{n,}”——匹配n到无穷次之间任意次数；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“{,m}”——匹配0到m之间任意次数；<BR>他们放到匹配格式的后面：<BR>例如：<BR>电话号码：024－84820482，02484820482(假设前面3或者4位，后面7或者8位，并且中间的减号可有可无)<BR><BR>都是符合规定的，那么可以用如下格式来匹配：[0-9]{3,4}&nbsp;\-?&nbsp;[0-9]{7,8}；<BR>注意：“\”为转义字符，因为“-”在正则表达式用有代表一个范围的意义，例如：前面所说的[0-9]，<BR>所以它需要转义字符“\”进行转义才可使用；<BR><BR>4、“^”为否符号，表示不想匹配的符号，例如：[^z][a-z]+可以匹配所有除“z”开头的以外的所有字<BR><BR>符串（长度大于2，因为“+”表示大于等于1的次数，从第二位开始都是小写英文字符）；<BR>如果^放到[]的外边则表示以[]开头的字符串；^[az][a-z]+表示a或者z开头的长度大于等于2的英文字符串；<BR><BR>5、“|”或运算符，例如：a[n|bc|cb]c可以匹配“abcc”,“anc”,“acbc”；<BR>6、“$”以它前面的字符结尾的；例如：ab+$就可以被“abb”，“ab”匹配；<BR><BR>7、一些简单表示方法：<BR>\d表示[0-9];\D表示[^0-9];\w表示[A-Z0-9];\W表示[^A-Z0-9];\s表示[\t\n\r\f],就是空格字符包括tab，空格等等;\S表示[^\t\n\r\f]，就是非空格字符;<BR><BR><BR>明白了这些以后，我们再返回头看看它们如何被运用呢？一般来讲只需要加[]、或是\\即可。<BR><BR>举例来讲：<BR></FONT><STRONG><FONT color=#000000 size=2>String s1="111+222+333";<BR>System.out.println(s1.split("[+]").length);<BR>或是<BR>String s1="111+222+333";<BR>System.out.println(s1.split("\\+").length);<BR><BR>其他用法类同。</FONT></STRONG></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/chinajox/aggbug/17181.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 15:33 <a href="http://www.blogjava.net/chinajox/archive/2005/10/28/17181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐JAVA书籍</title><link>http://www.blogjava.net/chinajox/archive/2005/10/24/16551.html</link><dc:creator>JAVA牛棚</dc:creator><author>JAVA牛棚</author><pubDate>Mon, 24 Oct 2005 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/chinajox/archive/2005/10/24/16551.html</guid><wfw:comment>http://www.blogjava.net/chinajox/comments/16551.html</wfw:comment><comments>http://www.blogjava.net/chinajox/archive/2005/10/24/16551.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/chinajox/comments/commentRss/16551.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinajox/services/trackbacks/16551.html</trackback:ping><description><![CDATA[<P align=justify>过年提供 时时整理<BR><BR>1、《THINK IN JAVA》JAVA的圣经，我认为JAVA程序员必须看的<BR>2、《JSP 和 SERVLET专辑》此书非常不错，但有难度，仔细看收获不少，但可惜绝版了<BR>3、《精通EJB(第二版)》+《WEBLOGIC宝典》可以学习EJB很不错的<BR>4、《精通HIBERNATE》此书不但讲的非常细致而且讲了很多思想<BR>5、《Effective Java》此书讲了很多经验，建议有开发经验的人看<BR>6、《Java与XML（第二版）》此书讲解了JAVA解析XML的主流工具SAX,DOM4J,JDOM都讲到了<BR><BR>富丽饼干扩充<BR>7、《精通struts》 非常适合入门的一本书，讲得由浅入深。如果英文好的朋友，还是到网上下载国外的电子书吧。其实孙MM的书就是把国外的几本电子书各选一段，拼凑并翻译而成的，连代码都没有变。并不是说这本书不好，只是对这种写书的方式不敢恭维。<BR>8、《JAVA与模式》 很适合中国人的学习思维，强烈推荐。<BR><BR>附部分书目<BR><STRONG>1、THINK  IN  JAVA(群共享中有中文版)<BR></STRONG><BR>第1章 对象入门<BR>第2章 一切都是对象<BR>第3章 控制程序流程<BR>第4章 初始化和清除<BR>第5章 隐藏实施过程<BR>第6章 类再生<BR>第7章 多形性<BR>第8章 对象的容纳<BR>第9章 违例差错控制<BR>第10章 Java IO系统<BR>第11章 运行期类型鉴定<BR>第12章 传递和返回对象<BR>第13章 创建窗口和程序片<BR>第14章 多线程<BR>第15章 网络编程<BR>第16章 设计范式<BR>第17章 项目<BR><BR><STRONG>2、JSP 和 SERVLET专辑<BR></STRONG>      本书首先讲述了JSP和Servlet程序设计所需的所有基本知识。在此基础上向读者介绍更多关于JSP和Servlet的背景知识，读者由此可以深入了解JSP和Servlet的核心组件。然后开始将JSP和Servlet知识应用到各种应用程序中，学习设计各种Java Web应用程序。最后讲述了JSP和Servlet的高级技术。本书既适合web页面设计人员学习使用，也适合web应用程序的软件开发人员使用。<BR>1，web服务器的发展<BR>2，开始学习JSP<BR>3，开始学习servlet<BR>4，创建HTML表单<BR>5，保存请求中的数据<BR>6，调试和错误处理<BR>7，组织应用程序<BR>8，进一步了解数据保存<BR>9，与JavaBean互动<BR>10，性能<BR>11，JSP和Servlet的生命周期<BR>12，浏览器和服务器的交互<BR>13，核心Servlet组件<BR>14，核心JSP组件<BR>15，JSP指示符<BR>16，应用程序体系结构概述<BR>17，浏览器和服务器的交互<BR>18，单级web应用程序<BR>19，创建两级应用程序<BR>20，三级应用程序的设计<BR>21，web应用程序中使用RMI<BR>22，web中使用CORBA<BR>23，web应用程序中使用企业级JavaBean<BR>24，创建XML应用程序<BR>25，添加XSL样式表来提高XML应用程序性能<BR>26，创建无线web应用程序<BR>27，图像传输的创建<BR>28，将JSP应用程序打包<BR>29，使用新标签扩展JSP<BR>30，国际化<BR>31，安全性<BR>32，JSP的XML语法<BR>附录A，JSP语法与API参考<BR>附录B，Servlet API参考<BR>附录C，Apache 和 Tomcat<BR>附录D，JRun<BR>附录E，ServletExec<BR>附录F，Resin  <BR><BR><STRONG>3、精通EJB (第二版) <BR></STRONG>　　本书是关于EJB 2.0开发的经典书籍，是EJB开发者的必备参考书。全书共分为四篇，第一篇是对EJB编程的快速浏览，包括第1章到第3章，主要是针对EJB新手而介绍的基础知识，但是有一定开发经验的老手仍然会发现很多有用的东西。第二篇专门介绍EJB编程，包括第4章到第9章，本部分介绍了三种Bean：实体Bean、会话Bean和消息驱动Bean，讲述了编写每种类型的Bean所需要的基础知识，包括示例和详细的Bean的生命周期图表。第三篇是本书最令人兴奋的部分，包括第10章到第17章，主要讲述了高级EJB概念。第四篇是附录部分，包括附录A到附录E，是EJB主题的辅助部分，供读者参考。 本书非常适合于Java程序员、网站开发人员和系统分析员作为EJB开发的核心参考书。 <BR><BR>第一篇 概述 <BR><BR>第1章 概述 <BR>1.1 EJB的形成动机 <BR>1.2 分而置之的极点 <BR>1.3 组件体系结构 <BR>1.4 Enterprise JavaBeans（EJB）简介<BR>1.5 EJB 社区 <BR>1.6 Java 2平台企业版 <BR><BR>第2章 EJB基础 <BR>2.1 Enterprise Bean <BR>2.2 分布式对象：EJB基础 <BR>2.3 分布式对象和中间件 <BR>2.4 企业级Bean的组成部分 <BR><BR>第3章 编写您的第一个Bean <BR>3.1 怎样开发一个EJB组件 <BR>3.2 远程接口 <BR>3.3 本地接口 <BR>3.4 Home接口 <BR>3.5 本地Home接口 <BR>3.6 Bean类 <BR>3.7 部署描述 <BR>3.8 与供应商相关的特定文件 <BR>3.9 Ejb-jar文件 <BR>3.10 部署Bean <BR>3.11 可选的EJB客户端的Jar文件 <BR>3.12 理解怎样调用Bean <BR>3.13 运行系统<BR>3.14 实现组件接口 <BR><BR>第二篇 3种Bean <BR>第4章 会话Bean介绍 <BR>第5章 实体Bean介绍 <BR>第6章 编写Bean管理的持久实体Bean <BR>第7章 编写容器管理的持久实体Bean <BR>第8章 消息驱动Bean简介 <BR>第9章 给Bean增加功能 <BR><BR>第三篇 高级企业JavaBean概念 <BR>第10章 事务 <BR>第11章 BMP和CMP的关联 <BR>第12章 持久化最优操作 <BR>第13章 EJB最优操作和性能优化 <BR>第14章 集群服务 <BR>第15章 开始EJB项目 <BR>第16章 选择EJB服务器 <BR>第17章 EJB-J2EE的集成：创建一个完整的应用 <BR><BR><STRONG>4、《BEA WebLogic Server宝典</STRONG>》<BR>          本书对WebLogic Server所涉及的方方面面进行了逐一讲解，并提供了大量的真实环境的实例，帮助读者了解WebLogic的功能和如何创建一个高效的WebLogic开发环境。全书共分8部分，主要内容包括：熟悉WebLogic开发环境、学习在WebLogic中使用JDBC、JTA、RMI、JNDI、JMS和JavaMail等API编写和部署简单的程序包、在WebLogic环境中创建、部署和管理Java servlet和JSP部件、在WebLogic环境中创建、部署和管理符合EJB 2．0规范的EJB部件、在WebLogic环境中打包、部署和测试编写Weh应用程序和EJB、解释WebLogic的安全性架构和确保WebLogic应用程序安全的策略、使用WebLogic管理工具管理WebLogic域、服务器、集群和安全性、在WebLogic环境中使用Web服务和SOAP以及使用J2EE连接器结构与已有系统集成。BEA系统(中国)有限公司在译著出版中所做的工作，保证了本书技术上的正确性和权威性。 本书面向具有一定的Java和J2EE基础的初学者或WebLogic专家。 <BR><BR><STRONG>5、精通HIBERNATE</STRONG><BR>      本书深入地介绍了Hibernate实现ORM的关键技术，包括Hibernate的底层技术、Hibernate的实现架构、Hibernate的配置和使用方法、EJB3.0技术和基于Hibernate的开发实例。通过本书，可以全面了解Hibernate的技术和开发方法，深入理解Hibernate的数据持久化设计，掌握数据层应用开发的方法。<BR>本书适合所有想了解、利用Hibernate的技术开发人员阅读和参考，也可作为企业和院校的相关培训教材。 <BR><BR><BR><STRONG>6、Effective Java</STRONG><BR>           本书介绍了在Java编程中57条极具实用价值的经验规则，这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。通过对Java平台设计专家所使用的技术的全面描述，揭示了应该做什么、不应该做什么才能产生清晰、健壮和高效的代码。</FONT><BR>    本书中的每条规则都以简短、独立的小文章形式出现，这些小文章包含了详细而精确的建议，以及对语言中许多细微之处的深入分析，并通过例子代码加以进一步说明。贯穿全书的是通用的语言用法和设计模式，以及一些具有启发意义的技巧和技术。</FONT><BR></FONT><BR>第2章 创建和销毁对象 4</FONT><BR>第3章 对于所有对象都通用的方法    21</FONT><BR>第4章 类和接口       51</FONT><BR>第5章 C语言结构的替代   82</FONT><BR>第6章 方法   100</FONT><BR>第7章 通用程序设计    120</FONT><BR>第8章 异常   144</FONT><BR>第9章 线程   162</FONT><BR>第10章  序列化       182<BR></FONT><BR><STRONG>7、Java与XML（第二版）</STRONG><BR>         一段时间以来，XML已经成为Internet开发人员之间的热门话题。但是怎样深入理解XML并让其工作呢？本书演示了如何使用XML API、工具和各种技巧构建真实世界的应用，并且要求这些代码和数据都是真正可移植的。<BR>Java为编程提供了一种与平台无关的语言，从而导致了一场编程世界的革命。XML为数据交换提供了一种与平台无关的语言，使得这场革命更进一步。对于构建基于Web的企业级应用而言，Java和XML有许多相似的特性，比如平台无关性、可扩展性、可重用性和全球语言（Unicode）的支持。本书展示了如何将两者结合起来构建动态生成内容的Web站点，如何编写具有更低开销的信息共享和数据交换的企业级软件，以及如何对需要可移植数据的其他问题开发简单和高效的解决方案。本书覆盖如下主题：<BR>* XML基础，包括DTD、名字空间、XML Schema、XPath和XSL<BR>* SAX API，包括所有的处理类、SAX2扩展、过滤器和写入器<BR>* DOM API，包括DOM Level 2、Level 3和DOM HTML模块<BR>* JDOM API，包括API核心和XPath支持<BR>* 数据绑定，使用DTD和XML Schema作为约束<BR>* 使用XML-RPC与SOAP开发应用<BR>* 使用Web发布框架，如Apache Cocoon<BR>* 使用SOAP、UDDI和WSDL创建Web服务<BR>* 使用RSS和XSP构建信息频道和动态内容<BR>本书第二版还包括SAX和DOM的高级知识章节，以及关于SOAP和数据绑定的新章节。在介绍XML基础的一章之后，本书的其他部分着眼于如何在Java应用中使用XML。如果你在使用Java进行开发并需要使用XML，或者以后要使用XML，或者你正投身于新的P2P运动、消息收发或Web服务，或者在为电子商务开发软件，本书将是你不可或缺的伴侣。</P><img src ="http://www.blogjava.net/chinajox/aggbug/16551.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-24 11:48 <a href="http://www.blogjava.net/chinajox/archive/2005/10/24/16551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>