﻿<?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-生命是一种过程</title><link>http://www.blogjava.net/love-java/</link><description>事情的结果尽管重要，但是做事情的过程更加重要，因为结果好了我们会更加快乐，但过程使我们的生命充实！</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 18:55:50 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 18:55:50 GMT</pubDate><ttl>60</ttl><item><title>在b/s开发中经常用到的javaScript技术</title><link>http://www.blogjava.net/love-java/archive/2006/04/28/43715.html</link><dc:creator>隐语者</dc:creator><author>隐语者</author><pubDate>Fri, 28 Apr 2006 01:47:00 GMT</pubDate><guid>http://www.blogjava.net/love-java/archive/2006/04/28/43715.html</guid><wfw:comment>http://www.blogjava.net/love-java/comments/43715.html</wfw:comment><comments>http://www.blogjava.net/love-java/archive/2006/04/28/43715.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-java/comments/commentRss/43715.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-java/services/trackbacks/43715.html</trackback:ping><description><![CDATA[
		<font color="#000000" size="2">
				<span id="ArticleContent1_ArticleContent1_lblContent">
						<p>转自 <a id="ArticleContent1_ArticleContent1_AuthorBlogLink" href="http://blog.csdn.net/arcow/" target="_blank">http://blog.csdn.net/arcow/</a></p>
						<p>在b/s开发中经常用到的javaScript技术  <br />一、验证类<br />1、数字验证内<br />  1.1 整数<br />  1.2 大于0的整数 （用于传来的ID的验证)<br />  1.3 负整数的验证<br />  1.4 整数不能大于iMax<br />  1.5 整数不能小于iMin<br />2、时间类<br />  2.1 短时间，形如 (13:04:06)<br />  2.2 短日期，形如 (2003-12-05)<br />  2.3 长时间，形如 (2003-12-05 13:04:06)<br />  2.4 只有年和月。形如(2003-05,或者2003-5)<br />  2.5 只有小时和分钟,形如(12:03)<br />3、表单类<br />  3.1 所有的表单的值都不能为空<br />  3.2 多行文本框的值不能为空。<br />  3.3 多行文本框的值不能超过sMaxStrleng<br />  3.4 多行文本框的值不能少于sMixStrleng<br />  3.5 判断单选框是否选择。<br />  3.6 判断复选框是否选择.<br />  3.7 复选框的全选，多选，全不选，反选<br />  3.8 文件上传过程中判断文件类型<br />4、字符类<br />  4.1 判断字符全部由a-Z或者是A-Z的字字母组成<br />  4.2 判断字符由字母和数字组成。<br />  4.3 判断字符由字母和数字，下划线,点号组成.且开头的只能是下划线和字母<br />  4.4 字符串替换函数.Replace();<br />5、浏览器类<br />  5.1 判断浏览器的类型<br />  5.2 判断ie的版本<br />  5.3 判断客户端的分辨率<br />  <br />6、结合类<br />  6.1 email的判断。<br />  6.2 手机号码的验证<br />  6.3 身份证的验证<br />  </p>
						<p>二、功能类</p>
						<p>1、时间与相关控件类<br />  1.1 日历<br />  1.2 时间控件<br />  1.3 万年历<br />  1.4 显示动态显示时钟效果（文本，如OA中时间）<br />  1.5 显示动态显示时钟效果 (图像，像手表) <br />2、表单类<br />  2.1 自动生成表单<br />  2.2 动态添加，修改，删除下拉框中的元素<br />  2.3 可以输入内容的下拉框<br />  2.4 多行文本框中只能输入iMax文字。如果多输入了，自动减少到iMax个文字（多用于短信发送)<br />  <br />3、打印类<br />  3.1 打印控件<br />4、事件类<br />  4.1 屏蔽右键<br />  4.2 屏蔽所有功能键<br />  4.3 --&gt; 和&lt;-- F5 F11,F9,F1<br />  4.4 屏蔽组合键ctrl+N<br />5、网页设计类<br />  5.1 连续滚动的文字，图片（注意是连续的，两段文字和图片中没有空白出现）<br />  5.2 html编辑控件类<br />  5.3 颜色选取框控件<br />  5.4 下拉菜单<br />  5.5 两层或多层次的下拉菜单<br />  5.6 仿IE菜单的按钮。（效果如rongshuxa.com的导航栏目)<br />  5.7 状态栏，title栏的动态效果（例子很多，可以研究一下）<br />  5.8 双击后，网页自动滚屏<br />6、树型结构。<br />  6.1 asp+SQL版<br />  6.2 asp+xml+sql版<br />  6.3 java+sql或者java+sql+xml<br />7、无边框效果的制作<br />8、连动下拉框技术<br />9、文本排序</p>
						<p>
								<br />一、验证类<br />1、数字验证内<br />  1.1 整数<br />      /^(-|+)?d+$/.test(str)<br />  1.2 大于0的整数 （用于传来的ID的验证)<br />      /^d+$/.test(str)<br />  1.3 负整数的验证<br />      /^-d+$/.test(str)<br />2、时间类<br />  2.1 短时间，形如 (13:04:06)<br />      function isTime(str)<br />      {<br />        var a = str.match(/^(d{1,2})(:)?(d{1,2})2(d{1,2})$/);<br />        if (a == null) {alert('输入的参数不是时间格式'); return false;}<br />        if (a[1]&gt;24 || a[3]&gt;60 || a[4]&gt;60)<br />        {<br />          alert("时间格式不对");<br />          return false<br />        }<br />        return true;<br />      }<br />  2.2 短日期，形如 (2003-12-05)<br />      function strDateTime(str)<br />      {<br />         var r = str.match(/^(d{1,4})(-|/)(d{1,2})2(d{1,2})$/); <br />         if(r==null)return false; <br />         var d= new Date(r[1], r[3]-1, r[4]); <br />         return (d.getFullYear()==r[1]&amp;&amp;(d.getMonth()+1)==r[3]&amp;&amp;d.getDate()==r[4]);<br />      }<br />  2.3 长时间，形如 (2003-12-05 13:04:06)<br />      function strDateTime(str)<br />      {<br />        var reg = /^(d{1,4})(-|/)(d{1,2})2(d{1,2}) (d{1,2}):(d{1,2}):(d{1,2})$/; <br />        var r = str.match(reg); <br />        if(r==null)return false; <br />        var d= new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]); <br />       
return
(d.getFullYear()==r[1]&amp;&amp;(d.getMonth()+1)==r[3]&amp;&amp;d.getDate()==r[4]&amp;&amp;d.getHours()==r[5]&amp;&amp;d.getMinutes()==r[6]&amp;&amp;d.getSeconds()==r[7]);<br />      }<br />  2.4 只有年和月。形如(2003-05,或者2003-5)<br />  2.5 只有小时和分钟,形如(12:03)<br />3、表单类<br />  3.1 所有的表单的值都不能为空<br />      &lt;input onblur="if(this.value.replace(/^s+|s+$/g,'')=='')alert('不能为空!')"&gt;<br />  3.2 多行文本框的值不能为空。<br />  3.3 多行文本框的值不能超过sMaxStrleng<br />  3.4 多行文本框的值不能少于sMixStrleng<br />  3.5 判断单选框是否选择。<br />  3.6 判断复选框是否选择.<br />  3.7 复选框的全选，多选，全不选，反选<br />  3.8 文件上传过程中判断文件类型<br />4、字符类<br />  4.1 判断字符全部由a-Z或者是A-Z的字字母组成<br />      &lt;input onblur="if(/[^a-zA-Z]/g.test(this.value))alert('有错')"&gt;<br />  4.2 判断字符由字母和数字组成。<br />      &lt;input onblur="if(/[^0-9a-zA-Z]/g.test(this.value))alert('有错')"&gt;<br />  4.3 判断字符由字母和数字，下划线,点号组成.且开头的只能是下划线和字母<br />      /^([a-zA-z_]{1})([w]*)$/g.test(str)<br />  4.4 字符串替换函数.Replace();<br />5、浏览器类<br />  5.1 判断浏览器的类型<br />      window.navigator.appName<br />  5.2 判断ie的版本<br />      window.navigator.appVersion<br />  5.3 判断客户端的分辨率<br />      window.screen.height;  window.screen.width;<br />  <br />6、结合类<br />  6.1 email的判断。<br />      function ismail(mail)<br />      {<br />        return(new RegExp(/^w+((-w+)|(.w+))*@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$/).test(mail));<br />      }<br />  6.2 手机号码的验证<br />  6.3 身份证的验证<br />      function isIdCardNo(num)<br />      {<br />        if (isNaN(num)) {alert("输入的不是数字！"); return false;}<br />        var len = num.length, re; <br />        if (len == 15)<br />          re = new RegExp(/^(d{6})()?(d{2})(d{2})(d{2})(d{3})$/);<br />        else if (len == 18)<br />          re = new RegExp(/^(d{6})()?(d{4})(d{2})(d{2})(d{3})(d)$/);<br />        else {alert("输入的数字位数不对！"); return false;}<br />        var a = num.match(re);<br />        if (a != null)<br />        {<br />          if (len==15)<br />          {<br />            var D = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);<br />            var B = D.getYear()==a[3]&amp;&amp;(D.getMonth()+1)==a[4]&amp;&amp;D.getDate()==a[5];<br />          }<br />          else<br />          {<br />            var D = new Date(a[3]+"/"+a[4]+"/"+a[5]);<br />            var B = D.getFullYear()==a[3]&amp;&amp;(D.getMonth()+1)==a[4]&amp;&amp;D.getDate()==a[5];<br />          }<br />          if (!B) {alert("输入的身份证号 "+ a[0] +" 里出生日期不对！"); return false;}<br />        }<br />        return true;<br />      }</p>
						<p>3.7 复选框的全选，多选，全不选，反选<br />&lt;form name=hrong&gt;<br />&lt;input type=checkbox name=All onclick="checkAll('mm')"&gt;全选&lt;br/&gt;<br />&lt;input type=checkbox name=mm onclick="checkItem('All')"&gt;&lt;br/&gt;<br />&lt;input type=checkbox name=mm onclick="checkItem('All')"&gt;&lt;br/&gt;<br />&lt;input type=checkbox name=mm onclick="checkItem('All')"&gt;&lt;br/&gt;<br />&lt;input type=checkbox name=mm onclick="checkItem('All')"&gt;&lt;br/&gt;<br />&lt;input type=checkbox name=mm onclick="checkItem('All')"&gt;&lt;br/&gt;&lt;br/&gt;</p>
						<p>
								<br />&lt;input type=checkbox name=All2 onclick="checkAll('mm2')"&gt;全选&lt;br/&gt;<br />&lt;input type=checkbox name=mm2 onclick="checkItem('All2')"&gt;&lt;br/&gt;<br />&lt;input type=checkbox name=mm2 onclick="checkItem('All2')"&gt;&lt;br/&gt;<br />&lt;input type=checkbox name=mm2 onclick="checkItem('All2')"&gt;&lt;br/&gt;<br />&lt;input type=checkbox name=mm2 onclick="checkItem('All2')"&gt;&lt;br/&gt;<br />&lt;input type=checkbox name=mm2 onclick="checkItem('All2')"&gt;&lt;br/&gt;</p>
						<p>&lt;/form&gt;</p>
						<p>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />function checkAll(str)<br />{<br />  var a = document.getElementsByName(str);<br />  var n = a.length;<br />  for (var i=0; i&lt;n; i++)<br />  a[i].checked = window.event.srcElement.checked;<br />}<br />function checkItem(str)<br />{<br />  var e = window.event.srcElement;<br />  var all = eval("document.hrong."+ str);<br />  if (e.checked)<br />  {<br />    var a = document.getElementsByName(e.name);<br />    all.checked = true;<br />    for (var i=0; i&lt;a.length; i++)<br />    {<br />      if (!a[i].checked){ all.checked = false; break;}<br />    }<br />  }<br />  else all.checked = false;<br />}<br />&lt;/SCRIPT&gt;</p>
						<p>3.8 文件上传过程中判断文件类型<br />&lt;input type=file onchange="alert(this.value.match(/^(.*)(.)(.{1,8})$/)[3])"&gt;</p>
						<p>画图:<br />&lt;OBJECT <br />id=S <br />style="LEFT: 0px; WIDTH: 392px; TOP: 0px; HEIGHT: 240px" <br />height=240 <br />width=392 <br />classid="clsid:369303C2-D7AC-11D0-89D5-00A0C90833E6"&gt;<br />&lt;/OBJECT&gt;<br />&lt;SCRIPT&gt;<br />S.DrawingSurface.ArcDegrees(0,0,0,30,50,60);<br />S.DrawingSurface.ArcRadians(30,0,0,30,50,60);<br />S.DrawingSurface.Line(10,10,100,100);<br />&lt;/SCRIPT&gt;</p>
				</span>
		</font>
<img src ="http://www.blogjava.net/love-java/aggbug/43715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-java/" target="_blank">隐语者</a> 2006-04-28 09:47 <a href="http://www.blogjava.net/love-java/archive/2006/04/28/43715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux(文件压缩与解压缩)</title><link>http://www.blogjava.net/love-java/archive/2006/01/25/29198.html</link><dc:creator>隐语者</dc:creator><author>隐语者</author><pubDate>Wed, 25 Jan 2006 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/love-java/archive/2006/01/25/29198.html</guid><wfw:comment>http://www.blogjava.net/love-java/comments/29198.html</wfw:comment><comments>http://www.blogjava.net/love-java/archive/2006/01/25/29198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-java/comments/commentRss/29198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-java/services/trackbacks/29198.html</trackback:ping><description><![CDATA[



  压缩解压 <br>linux下怎么解后缀名是gzip的文件？ <br>1.以.a为扩展名的文件: <br>#tar xv file.a <br><br>2.以.z为扩展名的文件: <br>#uncompress file.Z <br><br>3.以.gz为扩展名的文件: <br>#gunzip file.gz <br><br>4.以.bz2为扩展名的文件: <br>#bunzip2 file.bz2 <br><br>5.以.tar.Z为扩展名的文件: <br>#tar xvZf file.tar.Z <br>或 #compress -dc file.tar.Z | tar xvf - <br><br>6.以.tar.gz/.tgz为扩展名的文件: <br>#tar xvzf file.tar.gz <br>或 gzip -dc file.tar.gz | tar xvf - <br><br>7.以.tar.bz2为扩展名的文件: <br>#tar xvIf file.tar.bz2 <br>或 bzip2 -dc file.tar.bz2 | xvf - <br><br>8.以.cpio.gz/.cgz为扩展名的文件: <br>#gzip -dc file.cgz | cpio -div <br><br>9.以.cpio/cpio为扩展名的文件: <br>#cpio -div file.cpio <br>或cpio -divc file.cpio <br><br>10.以.rpm为扩展名的文件安装: <br>#rpm -i file.rpm <br><br>11.以.rpm为扩展名的文件解压缩： <br>#rpm2cpio file.rpm | cpio -div <br><br>12.以.deb为扩展名的文件安装： <br>#dpkg -i file.deb <br><br>13.以.deb为扩展名的文件解压缩: <br>#dpkg-deb --fsys-tarfile file.deb | tar xvf - ar p <br>file.deb data.tar.gz | tar xvzf - <br><br>14.以.zip为扩展名的文件: <br>#unzip file.zip <br>在linux下解压Winzip格式的文件 <br>　　要是装了jdk的话，可以用jar命令；还可以使用unzip命令。 <br>直接解压.tar.gz文件 <br>　　xxxx.tar.gz文件使用tar带zxvf参数，可以一次解压开。XXXX为文件名。 例如： <br>$tar zxvf xxxx.tar.gz 各种压缩文件的解压（安装方法） <br><br>文件扩展名 解压（安装方法） <br><br>.a ar xv file.a <br>.Z uncompress file.Z <br>.gz gunzip file.gz <br>.bz2 bunzip2 file.bz2 <br>.tar.Z tar xvZf file.tar.Z <br>compress -dc file.tar.Z | tar xvf - <br>.tar.gz/.tgz tar xvzf file.tar.gz <br>gzip -dc file.tar.gz | tar xvf - <br>.tar.bz2 tar xvIf file.tar.bz2 <br>bzip2 -dc file.tar.bz2 | xvf - <br>.cpio.gz/.cgz gzip -dc file.cgz | cpio -div <br>.cpio/cpio cpio -div file.cpio <br>cpio -divc file.cpio <br>.rpm/install rpm -i file.rpm <br>.rpm/extract rpm2cpio file.rpm | cpio -div <br>.deb/install dpkg -i file.deb <br>.deb/exrtact dpkg-deb --fsys-tarfile file.deb | tar xvf - <br>ar p file.deb data.tar.gz | tar xvzf - <br>.zip unzip file.zip <br><br>bzip2 -d myfile.tar.bz2 | tar xvf <br><br>tar xvfz myfile.tar.bz2 <br><br>x 是解压 <br>v 是复杂输出 <br>f 是指定文件 <br>z gz格式 <br><br>gzip <br>gzip[选项]要压缩（或解压缩）的文件名 <br>-c将输出写到标准输出上，并保留原有文件。 <br>-d将压缩文件压缩。 <br>-l对每个压缩文件，显示下列字段：压缩文件的大小，未压缩文件的大小、压缩比、未压缩文件的名字 <br>-r递归式地查找指定目录并压缩或压缩其中的所有文件。 <br>-t测试压缩文件是正完整。 <br>-v对每一个压缩和解压缩的文件，显示其文件名和压缩比。 <br>-num-用指定的数字调整压缩的速度。 <br>举例： <br>把/usr目录并包括它的子目录在内的全部文件做一备份，备份文件名为usr.tar <br>tar cvf usr.tar /home <br>把/usr 目录并包括它的子目录在内的全部文件做一备份并进行压缩，备份文件名是usr.tar.gz <br>tar czvf usr.tar.gz /usr <br>压缩一组文件，文件的后缀为tar.gz <br>#tar cvf back.tar /back/ <br>#gzip -q back.tar <br>or <br>#tar cvfz back.tar.gz /back/ <br>释放一个后缀为tar.gz的文件。 <br>#tar zxvf back.tar.gz <br>#gzip back.tar.gz <br>#tar xvf back.tar<br><b><br>

tar的使用方法：</b> <br><br>1：压缩一组文件为tar.gz后缀 <br>tar cvf backup.tar /etc <br>或gzip -q backup.tar.gz <br><br>2:释放一个后缀为tar.gz的文件 <br>gunzip backup.tar.gz <br>或tar xvf backup.tar <br><br>3:用一个命令完成压缩 <br>tar cvf -/etc | gzip -qc &gt; backup.tar.gz <br><br>4:用一个命令完成释放 <br>gunzip -c backup.tar.gz | tar xvf - <br><br>5:如何解开ta.Z的文件 <br>tar xvfz backup.tar.Z <br>或uncompress backup.tar.Z <br>tar xvf backup.tar <br><br>6:如何解开.tgz文件 <br>gunzip backup.tgz <br><br>7:如何压缩和解压缩.bz2的包 <br>bzip2 /etc/smb.conf 这将压缩文件smb.conf成smb.conf.bz2 <br>bunzip2 /etc/smb.conf.bz2 在当前目录下还原smb.conf.bz2为smb.conf<br><img src ="http://www.blogjava.net/love-java/aggbug/29198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-java/" target="_blank">隐语者</a> 2006-01-25 14:28 <a href="http://www.blogjava.net/love-java/archive/2006/01/25/29198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux学习(网络配置) </title><link>http://www.blogjava.net/love-java/archive/2006/01/25/29184.html</link><dc:creator>隐语者</dc:creator><author>隐语者</author><pubDate>Wed, 25 Jan 2006 03:36:00 GMT</pubDate><guid>http://www.blogjava.net/love-java/archive/2006/01/25/29184.html</guid><wfw:comment>http://www.blogjava.net/love-java/comments/29184.html</wfw:comment><comments>http://www.blogjava.net/love-java/archive/2006/01/25/29184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-java/comments/commentRss/29184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-java/services/trackbacks/29184.html</trackback:ping><description><![CDATA[<P><STRONG># /etc/hosts</STRONG> ：“hosts”文件，定义了主机名和ip地址的对应，其中也有将要运行dns这台电脑的ip地址和主机名。内容： <BR>127.0.0.1 localhost.localdomain localhost </P>
<P><STRONG>#/etc/host.conf</STRONG> ：“host.conf”文件，"order hosts bind"语句，指定了对主机名的解析顺序是先到hosts中查找，然后到dns服务器的记录里查找。“multi on”则是允许一个主机名对应多个ip地址。内容： <BR>order hosts, bind <BR>multi on <BR>nospoof on </P>
<P><STRONG>#/etc/resolv.conf</STRONG>：“resolv.conf”文件，“nameserver 11.0.0.1”指定了DNS服务器的地址。注意，这个文件对普通非dns服务器的电脑（非windows的系统；Windows系统是在“网络属性”中设置这项的）来说，是必不可少的。你如果没有设置本机为dns服务器，你又要能够解析域名，就必须指定一个dns服务器的地址。你可以最多写上三个地址，作为前一个失败时的候选dns服务器。“domain honston.com”指定默认的域。文件内容： <BR>domain 21php.com <BR>nameserver 11.0.0.1 </P>
<P>网关配置文件：</P>
<P><STRONG>#/etc/sysconfig/network-scripts/ifcfg-eth0</STRONG>(第一块网卡的网络配置文件)。文件内容：</P>
<P>DEVICE=eth0<BR>BOOTPROTO=none<BR>BROADCAST=192.168.0.255<BR>HWADDR=00:50:FC:76:51:DB<BR>IPADDR=192.168.0.2<BR>NETMASK=255.255.255.0<BR>NETWORK=192.168.0.0<BR>ONBOOT=yes<BR>TYPE=Ethernet<BR>USERCTL=no<BR>PEERDNS=yes<BR>IPV6INIT=no<BR>GATEWAY=192.168.0.1</P>
<P>网络配置命令： ifconfig 具体用法使用， ifconfig --help命令查询。</P>
<P>down掉网关： ifconfig eth0 down(关掉第一块网卡)</P>
<P>激活网关： ifconfig eth0 up(激活第一块网卡)</P><img src ="http://www.blogjava.net/love-java/aggbug/29184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-java/" target="_blank">隐语者</a> 2006-01-25 11:36 <a href="http://www.blogjava.net/love-java/archive/2006/01/25/29184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat5与tomcat4的连接池配置区别.</title><link>http://www.blogjava.net/love-java/archive/2005/12/29/25903.html</link><dc:creator>隐语者</dc:creator><author>隐语者</author><pubDate>Thu, 29 Dec 2005 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/love-java/archive/2005/12/29/25903.html</guid><wfw:comment>http://www.blogjava.net/love-java/comments/25903.html</wfw:comment><comments>http://www.blogjava.net/love-java/archive/2005/12/29/25903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-java/comments/commentRss/25903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-java/services/trackbacks/25903.html</trackback:ping><description><![CDATA[tomcat5的连接池配置:<br>&nbsp;&nbsp;&nbsp; &lt;Resource name="jdbc/testDB" auth="Container" type="javax.sql.DataSource"<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; factory="org.apache.commons.dbcp.BasicDataSourceFactory"<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxActive="10"<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxIdle="10"<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxWait="10"<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; username="sa"<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; password=""<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; driverClassName="com.jnetdirect.jsql.JSQLDriver"<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; defaultAutoCommit="true"<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; url="jdbc:JSQLConnect://localhost/testDB"<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; removeAbandoned="true"<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; removeAbandonedTimeout="10"<br>&nbsp;&nbsp;&nbsp; /&gt;<br>tomcat4的连接池配置:<br>&nbsp;&nbsp;&nbsp; &lt;Resource name="jdbc/testDB" auth="Container" type="javax.sql.DataSource"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;ResourceParams name="jdbc/testDB"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;factory&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;maxActive&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;10&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;maxIdle&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;10&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;maxWait&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;10&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;username&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;sa&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;password&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;driverClassName&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;com.jnetdirect.jsql.JSQLDriver&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;defaultAutoCommit&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;true&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;url&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;jdbc:JSQLConnect://localhost/testDB&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;removeAbandoned&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;true&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;removeAbandonedTimeout&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;10&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;logAbandoned&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;true&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/ResourceParams&gt;<br><br>如果将tomcat4的连接池配置直接用到tomcat5中的话,会出现: <br>Cannot create JDBC driver of class '' for connect URL 'null'的错误<br><img src ="http://www.blogjava.net/love-java/aggbug/25903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-java/" target="_blank">隐语者</a> 2005-12-29 17:01 <a href="http://www.blogjava.net/love-java/archive/2005/12/29/25903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]javascript判断字符串是否为数字</title><link>http://www.blogjava.net/love-java/archive/2005/12/19/24559.html</link><dc:creator>隐语者</dc:creator><author>隐语者</author><pubDate>Mon, 19 Dec 2005 01:34:00 GMT</pubDate><guid>http://www.blogjava.net/love-java/archive/2005/12/19/24559.html</guid><wfw:comment>http://www.blogjava.net/love-java/comments/24559.html</wfw:comment><comments>http://www.blogjava.net/love-java/archive/2005/12/19/24559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-java/comments/commentRss/24559.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-java/services/trackbacks/24559.html</trackback:ping><description><![CDATA[<P>parseInt(obj) &#8212;&#8212; 判断obj是否为整数，如果为有小数点的数字(包括后面多个小数点)则自动截掉小数后的所有位数(不四舍五入)；如果不为数字，则返回NaN。</P>
<P>parseFloat(obj)&#8212;&#8212;判断obj是否为浮点数，如果为有小数点的数字（包括后面多个小数点）则自动截掉第2个小数点的所有位数（不四舍五入）；如果不为数字，则返回NaN。</P>
<P>isNaN(obj)&#8212;&#8212;判断obj是否为字符串，如果返回true，则为字符串；如果返回为false，则为数值(带小数点)。</P><br>文章来源:<a href='http://java.mblogger.cn/love_java/posts/18171.aspx'>http://java.mblogger.cn/love_java/posts/18171.aspx</a><img src ="http://www.blogjava.net/love-java/aggbug/24559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-java/" target="_blank">隐语者</a> 2005-12-19 09:34 <a href="http://www.blogjava.net/love-java/archive/2005/12/19/24559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入][分享][推荐][转载]J2SE 5.0中的泛型</title><link>http://www.blogjava.net/love-java/archive/2005/12/19/24558.html</link><dc:creator>隐语者</dc:creator><author>隐语者</author><pubDate>Mon, 19 Dec 2005 01:34:00 GMT</pubDate><guid>http://www.blogjava.net/love-java/archive/2005/12/19/24558.html</guid><wfw:comment>http://www.blogjava.net/love-java/comments/24558.html</wfw:comment><comments>http://www.blogjava.net/love-java/archive/2005/12/19/24558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-java/comments/commentRss/24558.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-java/services/trackbacks/24558.html</trackback:ping><description><![CDATA[<P>转载地址：</P>
<P><A href="http://www.matrix.org.cn/resource/article/43/43634_java_generics.html">http://www.matrix.org.cn/resource/article/43/43634_java_generics.html</A></P>
<P><!--StartFragment --> </P>
<DIV id=divarticlecontent>
<CENTER><B><SPAN style="FONT-SIZE: 20px">J2SE 5.0中的泛型</SPAN></B></CENTER><BR>
<CENTER>作者：Budi Kurniawan</CENTER><BR>
<CENTER>翻译：<SPAN style="COLOR: brown"><A href="http://www.matrix.org.cn/user.shtml?username=RR00" target=_new>RR00</A></SPAN></CENTER><BR>
<CENTER>email：di_feng_ro@hotmail.com</CENTER><BR><BR><SPAN style="COLOR: purple">版权声明</SPAN>：可以任意转载，转载时请务必以超链接形式标明文章原始出处和作者信息及本声明<BR>英文原文地址:<BR><A href="http://www.onjava.com/pub/a/onjava/2005/07/06/generics.html" target=_new>http://www.onjava.com/pub/a/onjava/2005/07/06/generics.html</A><BR>中文地址:<BR><A href="http://www.matrix.org.cn/resource/article/43/43634_java_generics.html" target=_new>http://www.matrix.org.cn/resource/article/43/43634_java_generics.html</A><BR>关键词： java generics java5<BR><BR><B>摘要</B><BR>泛型是J2SE 5.0最重要的特性。他们让你写一个type(类或接口）和创建一个实例通过传递一个或多个引用类型。这个实例受限于只能作用于这些类型。比如，在 java 5，java.util.List 已经被泛化。当建立一个list对象时，你通过传递一个java类型建立一个List实例，此list实例只能作用于所传递的类型。这意味着如果你传递一个String ,此List实例只能拥有String对象；如果你传递一个Integer，此实例只能存贮Integer对象。除了创建参数化的类型，你还能创建参数化的函数。<BR>泛型的第一个好处是编译时的严格类型检查。这是集合框架最重要的特点。此外,泛型消除了绝大多数的类型转换。在JDK 5.0之前，当你使用集合框架时，你不得不进行类型转换。<BR>本文将教你如何操作泛型。它的第一部分是&#8220;没有泛型的日子&#8221;，先让我们回忆老版本JDK的不便。然后，举一些泛型的例子。在讨论完语法以及有界泛型的使用之后，文章最后一章将解释如何写泛型。<BR><BR><BR><B>没有泛型的日子</B><BR>所有的java类都源自java.lang.Object,这意味着所有的JAVA对象能转换成Object。因此，在之前的JDK的版本中，很多集合框架的函数接受一个Object参数。所以，collections是一个能持有任何对象的多用途工具，但带来了不良的后果。<BR><BR>举个简单的例子，在JDK 5.0的之前版本中，类List的函数add接受一个Object参数：<BR><BR><PRE class=overflow title="pre code">public boolean add(java.lang.Object element)</PRE><BR><BR>所以你能传递任何类型给add。这是故意这么设计的。否则，它只能传递某种特定的对象，这样就会出现各种List类型，如，StringList, EmployeeList, AddressList等。<BR>add通过Object传递能带来好处,现在我们考虑get函数(返回List中的一个元素).如下是JDK 5之前版本的定义：<BR><BR><PRE class=overflow title="pre code">public java.lang.Object get(int index) throws IndexOutOfBoundsException</PRE><BR><BR>get返回一个Object.不幸的事情从此开始了.假如你储存了两个String对象在一个List中:<BR><BR><PRE class=overflow title="pre code">List stringList1 = new ArrayList();<BR>stringList1.add("Java 5");<BR>stringList1.add("with generics");</PRE><BR><BR>当你想从stringList1取得一个元素时,你得到了一个Object.为了操作原来的类型元素,你不得不把它转换为String。<BR><BR><PRE class=overflow title="pre code">String s1 = (String) stringList1.get(0);</PRE><BR><BR>但是,假如你曾经把一个非String对象加入stringList1中,上面的代码会抛出一个ClassCastException. 有了泛型,你能创建一个单一用途的List实例.比如,你能创建一个只接受String对象的List实例,另外一个实例只能接受Employee对象. 这同样适用于集合框架中的其他类型.<BR><BR><BR><B>泛型入门</B><BR><BR>像一个函数能接受参数一样,一个泛型也能接受参数.这就是一个泛型经常被称为一个参数化类型的原因.但是不像函数用()传递参数,泛型是用&lt;&gt;传递参数的.声明一个泛型和声明一个普通类没有什么区别,只不过你把泛型的变量放在&lt;&gt;中.<BR>比如,在JDK 5中,你可以这样声明一个java.util.List : List&lt;E&gt; myList;<BR>E 称为类型变量.意味着一个变量将被一个类型替代.替代类型变量的值将被当作参数或返回类型.对于List接口来说,当一个实例被创建以后,E 将被当作一个add或别的函数的参数.E 也会使get或别的参数的返回值.下面是add和get的定义:<BR><BR><PRE class=overflow title="pre code">boolean add&lt;E o&gt;<BR>E get(int index)</PRE><BR><BR><SPAN style="COLOR: red">NOTE:</SPAN>一个泛型在声明或例示时允许你传递特定的类型变量: E.除此之外,如果E是个类，你可以传递子类；如果E是个接口，你可以传递实现接口的类；<BR><BR><SPAN style="COLOR: purple">-----------------------------译者添加--------------------<BR>List&lt;Number&gt; numberList= new ArrayList&lt;Number&gt;();<BR>numberList.add(2.0);<BR>numberList.add(2);<BR>-----------------------------译者添加--------------------</SPAN><BR><BR>如果你传递一个String给一个List，比如：<BR><BR><PRE class=overflow title="pre code">List&lt;String&gt; myList;</PRE><BR><BR>那么mylist的add函数将接受一个String作为他的参数，而get函数将返回一个String.因为返回了一个特定的类型，所以不用类型转化了。<BR><BR><SPAN style="COLOR: red">NOTE</SPAN>：根据惯例，我们使用一个唯一的大写字目表示一个类型变量。为了创建一个泛型，你需在声明时传递同样的参数列表。比如，你要想创建一个ArrayList来操作String ，你必须把String放在&lt;&gt;中。如：<BR><BR><PRE class=overflow title="pre code">List&lt;String&gt; myList = new ArrayList&lt;String&gt;();</PRE><BR><BR>再比如，java.util.Map 是这么定义的：<BR><BR><PRE class=overflow title="pre code">public interface Map&lt;K,V&gt;</PRE><BR><BR>K用来声明map键(KEY)的类型而V用来表示值(VALUE)的类型。put和values是这么定义的：<BR><BR><PRE class=overflow title="pre code">V put(K key, V value)<BR>Collection&lt;V&gt; values()</PRE><BR><BR><SPAN style="COLOR: red">NOTE</SPAN>:一个泛型不准直接的或间接的是java.lang.Throwable的子类。因为异常是在运行时抛出的,所以它不可能预言什么类型的异常将在编译时抛出.<BR><BR>列表1的例子将比较List在JDK 1.4 和JDK1.5的不同<BR><BR><PRE class=overflow title="pre code">package com.brainysoftware.jdk5.app16;<BR>import java.util.List;<BR>import java.util.ArrayList;<BR><BR>public class GenericListTest {<BR>&nbsp; public static void main(String[] args) {<BR>&nbsp; &nbsp; // in JDK 1.4<BR>&nbsp; &nbsp; List stringList1 = new ArrayList();<BR>&nbsp; &nbsp; stringList1.add("Java 1.0 - 5.0");<BR>&nbsp; &nbsp; stringList1.add("without generics");<BR>&nbsp; &nbsp; // cast to java.lang.String<BR>&nbsp; &nbsp; String s1 = (String) stringList1.get(0);<BR>&nbsp; &nbsp; System.out.println(s1.toUpperCase());<BR><BR>&nbsp; &nbsp; // now with generics in JDK 5<BR>&nbsp; &nbsp; List&lt;String&gt; stringList2 = new ArrayList&lt;String&gt;();<BR>&nbsp; &nbsp; stringList2.add("Java 5.0");<BR>&nbsp; &nbsp; stringList2.add("with generics");<BR>&nbsp; &nbsp; // no need for type casting<BR>&nbsp; &nbsp; String s2 = stringList2.get(0);<BR>&nbsp; &nbsp; System.out.println(s2.toUpperCase());<BR>&nbsp; }<BR>}</PRE><BR><BR>在列表1中，stringList2是个泛型。声明List&lt;String&gt;告诉编译器List的实例能接受一个String对象。当然，在另外的情况中，你能新建能接受各种对象的List实例。注意，当从List实例中返回成员元素时，不需要对象转化，因为他返回的了你想要的类型，也就是 String.<BR><BR><SPAN style="COLOR: red">NOTE</SPAN>:泛型的类型检查(type checking)是在编译时完成的.<BR><BR>最让人感兴趣的事情是，一个泛型是个类型并且能被当作一个类型变量。比如，你想你的List储存lists of Strings,你能通过把List&lt;String&gt;作为他的类型变量来声明List。比如：<BR><BR><PRE class=overflow title="pre code">List&lt;List&lt;String&gt;&gt; myListOfListsOfStrings;</PRE><BR><BR>要从myList中的第一个List重新取得String，你可以这么用：<BR><BR><PRE class=overflow title="pre code">String s = myListOfListsOfStrings.get(0).get(0);</PRE><BR><BR>下一个列表中的ListOfListsTest类示范了一个List（命名为listOfLists）接受一个String List作为参数。<BR><BR><PRE class=overflow title="pre code">package com.brainysoftware.jdk5.app16;<BR>import java.util.ArrayList;<BR>import java.util.List;<BR>public class ListOfListsTest {<BR>&nbsp; public static void main(String[] args) {<BR>&nbsp; &nbsp; List&lt;String&gt; listOfStrings = new ArrayList&lt;String&gt;();<BR>&nbsp; &nbsp; listOfStrings.add("Hello again");<BR>&nbsp; &nbsp; List&lt;List&lt;String&gt;&gt; listOfLists = new ArrayList&lt;List&lt;String&gt;&gt;();<BR>&nbsp; &nbsp; listOfLists.add(listOfStrings);<BR>&nbsp; &nbsp; String s = listOfLists.get(0).get(0);<BR>&nbsp; &nbsp; System.out.println(s); // prints "Hello again"<BR>&nbsp; }<BR>}</PRE><BR><BR>另外，一个泛型接受一个或多个类型变量。比如，java.util.Map有两个类型变量s。第一个定义了键（key）的类型，第二个定义了值（value)的类型。下面的例子讲教我们如何使用个一个泛型Map.<BR><BR><PRE class=overflow title="pre code">package com.brainysoftware.jdk5.app16;<BR>import java.util.HashMap;<BR>import java.util.Map;<BR>public class MapTest {<BR>&nbsp; public static void main(String[] args) {<BR>&nbsp; &nbsp; Map&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();<BR>&nbsp; &nbsp; map.put("key1", "value1");<BR>&nbsp; &nbsp; map.put("key2", "value2");<BR>&nbsp; &nbsp; String value1 = map.get("key1");<BR>&nbsp; }<BR>}</PRE><BR><BR>在这个例子中，重新得到一个key1代表的String值，我们不需要任何类型转换。<BR><BR><B>没有参数的情况下使用泛型</B><BR><BR>既然在J2SE 5.0中收集类型已经泛型化，那么，原来的使用这些类型的代码将如何呢？很幸运，他们在JAVA 5中将继续工作，因为你能使用没有参数的泛型。比如，你能继续像原来一样使用List接口，正如下面的例子一样。<BR><BR><PRE class=overflow title="pre code">List stringList1 = new ArrayList();<BR>stringList1.add("Java 1.0 - 5.0");<BR>stringList1.add("without generics");<BR>String s1 = (String) stringList1.get(0);</PRE><BR><BR>一个没有任何参数的泛型被称为原型(raw type)。它意味着这些为JDK1.4或更早的版本而写的代码将继续在java 5中工作。<BR><BR>尽管如此，一个需要注意的事情是，JDK５编译器希望你使用带参数的泛型。否则，编译器将提示警告，因为他认为你可能忘了定义类型变量s。比如，编译上面的代码的时候你会看到下面这些警告，因为第一个List被认为是原型。<BR><BR>Note: com/brainysoftware/jdk5/app16/GenericListTest.java<BR>uses unchecked or unsafe operations.<BR>Note: Recompile with -Xlint:unchecked for details.<BR><BR>当你使用原型时，如果你不想看到这些警告，你有几个选择来达到目的：<BR>1.编译时带上参数-source 1.4<BR>2.使用@SupressWarnings("unchecked")注释<BR>3.更新你的代码，使用List&lt;Object&gt;. List&lt;Object&gt;的实例能接受任何类型的对象，就像是一个原型List。然而，编译器不会报错。<BR><BR><B>使用 ？ 通配符</B><BR>前面提过，如果你声明了一个List&lt;aType&gt;, 那么这个List对aType起作用，所以你能储存下面这些类型的对象：<BR>1.一个aType的实例<BR>2.它的子类的实例(如果aType是个类)<BR>3.实现aType接口的类实例(如果aType是个接口)<BR>但是，请注意，一个泛型本身是个JAVA类型，就像java.lang.String或java.io.File一样。传递不同的类型变量给泛型可以创建不同的JAVA类型。比如，下面例子中list1和list2引用了不同的类型对象。<BR><BR><PRE class=overflow title="pre code">List&lt;Object&gt; list1 = new ArrayList&lt;Object&gt;();<BR>List&lt;String&gt; list2 = new ArrayList&lt;String&gt;();</PRE><BR><BR>list1 指向了一个类型变量s为java.lang.Objects 的List而list2指向了一个类型变量s为String 的List。所以传递一个List&lt;String&gt;给一个参数为List&lt;Object&gt;的函数将导致compile time错误。下面列表可以说明：<BR><PRE class=overflow title="pre code">package com.brainysoftware.jdk5.app16;<BR>import java.util.ArrayList;<BR>import java.util.List;<BR> <BR>public class AllowedTypeTest {<BR>&nbsp; public static void doIt(List&lt;Object&gt; l) {<BR>&nbsp; }<BR>&nbsp; public static void main(String[] args) {<BR>&nbsp; &nbsp; List&lt;String&gt; myList = new ArrayList&lt;String&gt;();<BR>&nbsp; &nbsp; // 这里将产生一个错误<BR>&nbsp; &nbsp; doIt(myList);<BR>&nbsp; }<BR>}</PRE><BR>上面的代码无法编译，因为你试图传递一个错误的类型给函数doIt。doIt的参数是List&lt;Object&gt;二你传递的参数是List&lt;String&gt;。<BR>可以使用 ？ 通配符解决这个难题。List&lt;?&gt; 意味着一个对任何对象起作用的List。所以，doIt可以改为：<BR><BR><PRE class=overflow title="pre code">public static void doIt(List&lt;?&gt; l) {}</PRE><BR><BR>在某些情况下你会考虑使用 ? 通配符。比如，你有一个printList函数，这个函数打印一个List的所有成员，你想让这个函数对任何类型的List起作用时。否则，你只能累死累活的写很多printList的重载函数。下面的列表引用了使用 ? 通配符的printList函数。<BR><PRE class=overflow title="pre code">package com.brainysoftware.jdk5.app16;<BR>import java.util.ArrayList;<BR>import java.util.List;<BR> <BR>public class WildCardTest {<BR> <BR>&nbsp; public static void printList(List&lt;?&gt; list) {<BR>&nbsp; &nbsp; for (Object element : list) {<BR>&nbsp; &nbsp; &nbsp; System.out.println(element);<BR>&nbsp; &nbsp; }<BR>&nbsp; }<BR>&nbsp; public static void main(String[] args) {<BR>&nbsp; &nbsp; List&lt;String&gt; list1 = new ArrayList&lt;String&gt;();<BR>&nbsp; &nbsp; list1.add("Hello");<BR>&nbsp; &nbsp; list1.add("World");<BR>&nbsp; &nbsp; printList(list1);<BR> <BR>&nbsp; &nbsp; List&lt;Integer&gt; list2 = new ArrayList&lt;Integer&gt;();<BR>&nbsp; &nbsp; list2.add(100);<BR>&nbsp; &nbsp; list2.add(200);<BR>&nbsp; &nbsp; printList(list2);<BR>&nbsp; }<BR>}</PRE><BR><BR>这些代码说明了在printList函数中，List&lt;?&gt;表示各种类型的List对象。然而，请注意，在声明的时候使用 ? 通配符是不合法的，像这样：<BR><BR><PRE class=overflow title="pre code">List&lt;?&gt; myList = new ArrayList&lt;?&gt;(); // 不合法</PRE><BR><BR>如果你想创建一个接收任何类型对象的List，你可以使用Object作为类型变量，就像这样：<BR><BR><PRE class=overflow title="pre code">List&lt;Object&gt; myList = new ArrayList&lt;Object&gt;();</PRE><BR><BR><B>在函数中使用界限通配符</B><BR>在之前的章节中，你学会了通过传递不同的类型变量s来创建不同JAVA类型的泛型，但并不考虑类型变量s之间的继承关系。在很多情况下，你想一个函数有不同的List参数。比如，你有一个函数getAverage，他返回了一个List中成员的平均值。然而，如果你把List&lt;Number&gt;作为getAverage的参数，你就没法传递List&lt;Integer&gt; 或List&lt;Double&gt;参数，因为List&lt;Number&gt;和List&lt;Integer&gt; 和List&lt;Double&gt;不是同样的类型。<BR><BR>你能使用原型或使用通配符，但这样无法在编译时进行安全类型检查，因为你能传递任何类型的List，比如List&lt;String&gt;的实例。你可以使用List&lt;Number&gt;作为参数，但是你就只能传递 List&lt;Number&gt;给函数。但这样就使你的函数功能减少，因为你可能更多的时候要操作List&lt;Integer&gt;或 List&lt;Long&gt;，而不是List&lt;Number&gt;。<BR><BR>J2SE5.0增加了一个规则来解决了这种约束，这个规则就是允许你定义一个上界(upper bound) 类型变量.在这种方式中，你能传递一个类型或它的子类。在上面getAverage函数的例子中，你能传递一个List&lt;Number&gt;或它的子类的实例，比如List&lt;Integer&gt; or List&lt;Float&gt;。<BR><BR>使用上界规则的语法这么定义的：GenericType&lt;? extends upperBoundType&gt;. 比如，对getAverage函数的参数，你可以这么写List&lt;? extends Number&gt;. 下面例子说明了如何使用这种规则。<BR><PRE class=overflow title="pre code">package com.brainysoftware.jdk5.app16;<BR>import java.util.ArrayList;<BR>import java.util.List;<BR>public class BoundedWildcardTest {<BR>&nbsp; public static double getAverage(List&lt;? extends Number&gt; numberList)<BR>&nbsp; {<BR>&nbsp; &nbsp; double total = 0.0;<BR>&nbsp; &nbsp; for (Number number : numberList)<BR>&nbsp; &nbsp; &nbsp; total += number.doubleValue();<BR>&nbsp; &nbsp; return total/numberList.size();<BR>&nbsp; }<BR> <BR>&nbsp; public static void main(String[] args) {<BR>&nbsp; &nbsp; List&lt;Integer&gt; integerList = new ArrayList&lt;Integer&gt;();<BR>&nbsp; &nbsp; integerList.add(3);<BR>&nbsp; &nbsp; integerList.add(30);<BR>&nbsp; &nbsp; integerList.add(300);<BR>&nbsp; &nbsp; System.out.println(getAverage(integerList)); // 111.0<BR>&nbsp; &nbsp; List&lt;Double&gt; doubleList = new ArrayList&lt;Double&gt;();<BR>&nbsp; &nbsp; doubleList.add(3.0);<BR>&nbsp; &nbsp; doubleList.add(33.0);<BR>&nbsp; &nbsp; System.out.println(getAverage(doubleList)); // 18.0<BR>&nbsp; }<BR>}</PRE><BR>由于有了上界规则，上面例子中的getAverage函数允许你传递一个List&lt;Number&gt; 或一个类型变量是任何java.lang.Number子类的List。<BR><BR><B>下界规则</B><BR>关键字extends定义了一个类型变量的上界。通过使用super关键字，我们可以定义一个类型变量的下界，尽管使用的情况不多。比如，如果一个函数的参数是List&lt;? super Integer&gt;，那么意味着你可以传递一个List&lt;Integer&gt;的实例或者任何java.lang.Integer的超类 (superclass)。<BR><BR><B>创建泛型</B><BR><BR>前面的章节主要说明了如何使使用泛型，特别是集合框架中的类。现在我们开始学习如何写自己的泛型。<BR><BR>基本上，除了声明一些你想要使用的类型变量s外，一个泛型和别的类没有什么区别。这些类型变量s位于类型后面的&lt;&gt;中。比如，下面的Point 就是个泛型。一个Point对象代表了一个系统中的点，它有横坐标和纵坐标。通过使Point泛型化，你能定义一个点实例的精确程度。比如，如果一个 Point对象需要非常精确，你就把Double作为类型变量。否则，Integer 就够了。<BR><PRE class=overflow title="pre code">package com.brainysoftware.jdk5.app16;<BR>public class Point&lt;T&gt; {<BR>&nbsp; T x;<BR>&nbsp; T y;<BR>&nbsp; public Point(T x, T y) {<BR>&nbsp; &nbsp; this.x = x;<BR>&nbsp; &nbsp; this.y = y;<BR>&nbsp; }<BR>&nbsp; public T getX() {<BR>&nbsp; &nbsp; return x;<BR>&nbsp; }<BR>&nbsp; public T getY() {<BR>&nbsp; &nbsp; return y;<BR>&nbsp; }<BR>&nbsp; public void setX(T x) {<BR>&nbsp; &nbsp; this.x = x;<BR>&nbsp; }<BR>&nbsp; public void setY(T y) {<BR>&nbsp; &nbsp; this.y = y;<BR>&nbsp; }<BR>}</PRE><BR><BR>在这个例子中，T是Point的类型变量 。T是getX和getY的返回值类型，也是setX和setY的参数类型。此外，构造函数结合两个T参数。<BR>使用point类就像使用别的类一样。比如，下面的例子创建了两个Point对象：ponint1和point2。前者把Integer作为类型变量，而后者把Double作为类型变量。<BR><BR><PRE class=overflow title="pre code">Point&lt;Integer&gt; point1 = new Point&lt;Integer&gt;(4, 2);<BR>point1.setX(7);<BR>Point&lt;Double&gt; point2 = new Point&lt;Double&gt;(1.3, 2.6);<BR>point2.setX(109.91);</PRE><BR><BR><B>总结</B><BR>泛型使代码在编译时有了更严格的类型检查。特别是在集合框架中，泛型有两个作用。第一，他们增加了对集合类型在编译时的类型检查，所以集合类所能持有的类型对传递给它的参数类型起了限制作用。比如你创建了一个持有strings的java.util.List实例，那么他就将不能接受Integers或别的类型。其次，当你从一个集合中取得一个元素时，泛型消除了类型转换的必要。<BR>泛型能够在没有类型变量的情况下使用，比如，作为原型。这些措施让Java 5之前的代码能够运行在JRE 5中。但是，对新的应用程序，你最好不要使用原型，因为以后Java可能不支持他们。<BR><BR>你已经知道通过传递不同类型的类型变量给泛型可以产生不同的JAVA类型。就是说List&lt;String&gt;和List&lt; Object&gt;的类型是不同的。尽管String是java.lang.Object。但是传递一个List&lt;String&gt;给一个参数是List&lt;Object&gt;的函数会参数会产生编译错误（compile error）。函数能用 ? 通配符使其接受任何类型的参数。List&lt;?&gt; 意味着任何类型的对象。<BR>最后，你已经看到了写一个泛型和别的一般JAVA类没有什么区别。你只需要在类型名称后面的&lt;&gt;中声明一系列的类型变量s就行了。这些类型变量s就是返回值类型或者参数类型。根据惯例，一个类型变量用一个大写字母表示。<BR><BR><BR>Budi Kurniawan是一个高级 J2EE 架构师和作家。</DIV><br>文章来源:<a href='http://java.mblogger.cn/love_java/posts/18270.aspx'>http://java.mblogger.cn/love_java/posts/18270.aspx</a><img src ="http://www.blogjava.net/love-java/aggbug/24558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-java/" target="_blank">隐语者</a> 2005-12-19 09:34 <a href="http://www.blogjava.net/love-java/archive/2005/12/19/24558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]oracle中查看视图的脚本</title><link>http://www.blogjava.net/love-java/archive/2005/12/19/24557.html</link><dc:creator>隐语者</dc:creator><author>隐语者</author><pubDate>Mon, 19 Dec 2005 01:34:00 GMT</pubDate><guid>http://www.blogjava.net/love-java/archive/2005/12/19/24557.html</guid><wfw:comment>http://www.blogjava.net/love-java/comments/24557.html</wfw:comment><comments>http://www.blogjava.net/love-java/archive/2005/12/19/24557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-java/comments/commentRss/24557.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-java/services/trackbacks/24557.html</trackback:ping><description><![CDATA[<P>select owner, view_name, text? from all_views where view_name=''; </P>
<P>使用该sql语句能查询指定的视图的创建脚本.</P><br>文章来源:<a href='http://java.mblogger.cn/love_java/posts/18281.aspx'>http://java.mblogger.cn/love_java/posts/18281.aspx</a><img src ="http://www.blogjava.net/love-java/aggbug/24557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-java/" target="_blank">隐语者</a> 2005-12-19 09:34 <a href="http://www.blogjava.net/love-java/archive/2005/12/19/24557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]删除html中select对象的所有选项的简单方法</title><link>http://www.blogjava.net/love-java/archive/2005/12/19/24556.html</link><dc:creator>隐语者</dc:creator><author>隐语者</author><pubDate>Mon, 19 Dec 2005 01:34:00 GMT</pubDate><guid>http://www.blogjava.net/love-java/archive/2005/12/19/24556.html</guid><wfw:comment>http://www.blogjava.net/love-java/comments/24556.html</wfw:comment><comments>http://www.blogjava.net/love-java/archive/2005/12/19/24556.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/love-java/comments/commentRss/24556.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-java/services/trackbacks/24556.html</trackback:ping><description><![CDATA[<P>假设select对象为oSelect，删除该对象下面所有选项的方法是：</P>
<P>oSelect.options.length=0;</P><br>文章来源:<a href='http://java.mblogger.cn/love_java/posts/18309.aspx'>http://java.mblogger.cn/love_java/posts/18309.aspx</a><img src ="http://www.blogjava.net/love-java/aggbug/24556.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-java/" target="_blank">隐语者</a> 2005-12-19 09:34 <a href="http://www.blogjava.net/love-java/archive/2005/12/19/24556.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]XSL与CSS的比较</title><link>http://www.blogjava.net/love-java/archive/2005/12/19/24555.html</link><dc:creator>隐语者</dc:creator><author>隐语者</author><pubDate>Mon, 19 Dec 2005 01:34:00 GMT</pubDate><guid>http://www.blogjava.net/love-java/archive/2005/12/19/24555.html</guid><wfw:comment>http://www.blogjava.net/love-java/comments/24555.html</wfw:comment><comments>http://www.blogjava.net/love-java/archive/2005/12/19/24555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-java/comments/commentRss/24555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-java/services/trackbacks/24555.html</trackback:ping><description><![CDATA[<P><FONT color=#0000ff><STRONG><EM>相同：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </EM></STRONG></FONT>XSL和CSS都是属于样式的一种。样式是用来设定外观的，它并不影响原来的XML源代码，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XSL虽然用的是转换的方式，但转换并不代表源代码会遭到篡改。通常XSL转换后的输出码是<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另存到一个新的档案或暂存在浏览器的记忆体中，原来的XMl文档内容保持不变。</P>
<P><FONT color=#0000ff><FONT color=#000000><STRONG><EM><FONT color=#0000ff>不同：</FONT></EM></STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、XSL采用的是转换方式，将一种格式的XML转换为另一种，比如将Big5码转换为UTF-8码一<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 样。而CSS则来自完全不同的理念：它不含任何转换动作，只针对XML文件中各个成分的外<BR></FONT></FONT><FONT color=#0000ff><FONT color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;观属性一一加以设定。浏览器便按照CSS样式里的指示，将XML文件呈现为设定的样式。整<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 个过程中没有任何新码产生。XML配上CSS、ECMAScript和DOM可以营造出类似DHTML般<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;的动态效果。XSL转换则是死的，没有互动性。</FONT></FONT></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、XSL样式都是XML文件，完全按照XML的语法来；相对地，CSS在语法上自成一格，和<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XML的写法大相径庭。<STRONG><EM><FONT color=#0000ff>&nbsp; </FONT></EM></STRONG></P><br>文章来源:<a href='http://java.mblogger.cn/love_java/posts/18639.aspx'>http://java.mblogger.cn/love_java/posts/18639.aspx</a><img src ="http://www.blogjava.net/love-java/aggbug/24555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-java/" target="_blank">隐语者</a> 2005-12-19 09:34 <a href="http://www.blogjava.net/love-java/archive/2005/12/19/24555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]vss admin 忘记密码解决办法</title><link>http://www.blogjava.net/love-java/archive/2005/12/19/24554.html</link><dc:creator>隐语者</dc:creator><author>隐语者</author><pubDate>Mon, 19 Dec 2005 01:34:00 GMT</pubDate><guid>http://www.blogjava.net/love-java/archive/2005/12/19/24554.html</guid><wfw:comment>http://www.blogjava.net/love-java/comments/24554.html</wfw:comment><comments>http://www.blogjava.net/love-java/archive/2005/12/19/24554.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-java/comments/commentRss/24554.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-java/services/trackbacks/24554.html</trackback:ping><description><![CDATA[<P>使用hex编辑器打开你vss数据库所在的文件夹,打开data目录下的um.dat文件.将文件中对应位置改为如下字符: </P>
<P><!--StartFragment -->&nbsp;0:80&nbsp; 55 55 bc 7f 41 64 6d 69 6e 00 00 00 00 00 00 00<BR>&nbsp;0:90&nbsp; 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<BR>&nbsp;0:a0&nbsp; 00 00 00 00 90 6e 00 00 a8 01 00 00 00 00 00 00 </P>
<P>保存修改文件,启动vss admin工具,直接就能登录.</P><br>文章来源:<a href='http://java.mblogger.cn/love_java/posts/18676.aspx'>http://java.mblogger.cn/love_java/posts/18676.aspx</a><img src ="http://www.blogjava.net/love-java/aggbug/24554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-java/" target="_blank">隐语者</a> 2005-12-19 09:34 <a href="http://www.blogjava.net/love-java/archive/2005/12/19/24554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>