﻿<?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/hefang/category/45424.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 25 Jun 2010 09:57:41 GMT</lastBuildDate><pubDate>Fri, 25 Jun 2010 09:57:41 GMT</pubDate><ttl>60</ttl><item><title>eclipse.ini内存设置(转)</title><link>http://www.blogjava.net/hefang/articles/324489.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:55:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324489.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324489.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324489.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324489.html</trackback:ping><description><![CDATA[<p align="right">&nbsp;</p>
<div style="background: #eeeeee; margin: 7.5pt 0cm 0pt; line-height: 150%" align="left"><strong><span style="font-size: 10pt; line-height: 150%"><a href="http://student.csdn.net/link.php?url=http://www.blogjava.net%2Fwilesun%2Farchive%2F2007%2F12%2F15%2F167915.html" target="_blank"><span style="line-height: 150%; text-decoration: none; text-underline: none">eclipse.ini</span><span style="line-height: 150%; text-decoration: none; text-underline: none">内存设置</span></a> </span></strong></div>
<div style="background: #eeeeee; margin: 0cm 0cm 12pt; line-height: 150%" align="left"><span style="font-size: 10pt; line-height: 150%">-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M <br />
</span><span style="font-size: 10pt; line-height: 150%">这里有几个问题：</span><span style="font-size: 10pt; line-height: 150%"><br />
1. </span><span style="font-size: 10pt; line-height: 150%">各个参数的含义什么？</span><span style="font-size: 10pt; line-height: 150%"><br />
2. </span><span style="font-size: 10pt; line-height: 150%">为什么有的机器我将</span><span style="font-size: 10pt; line-height: 150%">-Xmx</span><span style="font-size: 10pt; line-height: 150%">和</span><span style="font-size: 10pt; line-height: 150%">-XX:MaxPermSize</span><span style="font-size: 10pt; line-height: 150%">都设置为</span><span style="font-size: 10pt; line-height: 150%">512M</span><span style="font-size: 10pt; line-height: 150%">之后</span><span style="font-size: 10pt; line-height: 150%">Eclipse</span><span style="font-size: 10pt; line-height: 150%">可以启动，而有些机器无法启动？</span><span style="font-size: 10pt; line-height: 150%"><br />
3. </span><span style="font-size: 10pt; line-height: 150%">为何将上面的参数写入到</span><span style="font-size: 10pt; line-height: 150%">eclipse.ini</span><span style="font-size: 10pt; line-height: 150%">文件</span><span style="font-size: 10pt; line-height: 150%">Eclipse</span><span style="font-size: 10pt; line-height: 150%">没有执行对应的设置？</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
</span><span style="font-size: 10pt; line-height: 150%">下面我们一一进行回答</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
1. </span><span style="font-size: 10pt; line-height: 150%">各个参数的含义什么？</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
</span><span style="font-size: 10pt; line-height: 150%">参数中</span><span style="font-size: 10pt; line-height: 150%">-vmargs</span><span style="font-size: 10pt; line-height: 150%">的意思是设置</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">参数，所以后面的其实都是</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">的参数了，我们首先了解一下</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">内存管理的机制，然后再解释每个参数代表的含义。</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
</span><span style="font-size: 10pt; line-height: 150%">堆</span><span style="font-size: 10pt; line-height: 150%">(Heap)</span><span style="font-size: 10pt; line-height: 150%">和非堆</span><span style="font-size: 10pt; line-height: 150%">(Non-heap)</span><span style="font-size: 10pt; line-height: 150%">内存</span><span style="font-size: 10pt; line-height: 150%"><br />
</span><span style="font-size: 10pt; line-height: 150%">按照官方的说法：</span><span style="font-size: 10pt; line-height: 150%">&#8220;Java </span><span style="font-size: 10pt; line-height: 150%">虚拟机具有一个堆，堆是运行时数据区域，所有类实例和数组的内存均从此处分配。堆是在</span><span style="font-size: 10pt; line-height: 150%"> Java </span><span style="font-size: 10pt; line-height: 150%">虚拟机启动时创建的。</span><span style="font-size: 10pt; line-height: 150%">&#8221;&#8220;</span><span style="font-size: 10pt; line-height: 150%">在</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">中堆之外的内存称为非堆内存</span><span style="font-size: 10pt; line-height: 150%">(Non-heap memory)&#8221;</span><span style="font-size: 10pt; line-height: 150%">。可以看出</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">主要管理两种类型的内存：堆和非堆。简单来说堆就是</span><span style="font-size: 10pt; line-height: 150%">Java</span><span style="font-size: 10pt; line-height: 150%">代码可及的内存，是留给开发人员使用的；非堆就是</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">留给自己用的，所以方法区、</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">内部处理或优化所需的内存</span><span style="font-size: 10pt; line-height: 150%">(</span><span style="font-size: 10pt; line-height: 150%">如</span><span style="font-size: 10pt; line-height: 150%">JIT</span><span style="font-size: 10pt; line-height: 150%">编译后的代码缓存</span><span style="font-size: 10pt; line-height: 150%">)</span><span style="font-size: 10pt; line-height: 150%">、每个类结构</span><span style="font-size: 10pt; line-height: 150%">(</span><span style="font-size: 10pt; line-height: 150%">如运行时常数池、字段和方法数据</span><span style="font-size: 10pt; line-height: 150%">)</span><span style="font-size: 10pt; line-height: 150%">以及方法和构造方法的代码都在非堆内存中。</span><span style="font-size: 10pt; line-height: 150%"> <br />
</span><span style="font-size: 10pt; line-height: 150%">堆内存分配</span><span style="font-size: 10pt; line-height: 150%"><br />
JVM</span><span style="font-size: 10pt; line-height: 150%">初始分配的内存由</span><span style="font-size: 10pt; line-height: 150%">-Xms</span><span style="font-size: 10pt; line-height: 150%">指定，默认是物理内存的</span><span style="font-size: 10pt; line-height: 150%">1/64</span><span style="font-size: 10pt; line-height: 150%">；</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">最大分配的内存由</span><span style="font-size: 10pt; line-height: 150%">-Xmx</span><span style="font-size: 10pt; line-height: 150%">指定，默认是物理内存的</span><span style="font-size: 10pt; line-height: 150%">1/4</span><span style="font-size: 10pt; line-height: 150%">。默认空余堆内存小于</span><span style="font-size: 10pt; line-height: 150%">40%</span><span style="font-size: 10pt; line-height: 150%">时，</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">就会增大堆直到</span><span style="font-size: 10pt; line-height: 150%">-Xmx</span><span style="font-size: 10pt; line-height: 150%">的最大限制；空余堆内存大于</span><span style="font-size: 10pt; line-height: 150%">70%</span><span style="font-size: 10pt; line-height: 150%">时，</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">会减少堆直到</span><span style="font-size: 10pt; line-height: 150%">-Xms</span><span style="font-size: 10pt; line-height: 150%">的最小限制。因此服务器一般设置</span><span style="font-size: 10pt; line-height: 150%">-Xms</span><span style="font-size: 10pt; line-height: 150%">、</span><span style="font-size: 10pt; line-height: 150%">-Xmx</span><span style="font-size: 10pt; line-height: 150%">相等以避免在每次</span><span style="font-size: 10pt; line-height: 150%">GC </span><span style="font-size: 10pt; line-height: 150%">后调整堆的大小。</span><span style="font-size: 10pt; line-height: 150%"> <br />
</span><span style="font-size: 10pt; line-height: 150%">非堆内存分配</span><span style="font-size: 10pt; line-height: 150%"><br />
JVM</span><span style="font-size: 10pt; line-height: 150%">使用</span><span style="font-size: 10pt; line-height: 150%">-XX:PermSize</span><span style="font-size: 10pt; line-height: 150%">设置非堆内存初始值，默认是物理内存的</span><span style="font-size: 10pt; line-height: 150%">1/64</span><span style="font-size: 10pt; line-height: 150%">；由</span><span style="font-size: 10pt; line-height: 150%">XX:MaxPermSize</span><span style="font-size: 10pt; line-height: 150%">设置最大非堆内存的大小，默认是物理内存的</span><span style="font-size: 10pt; line-height: 150%">1/4</span><span style="font-size: 10pt; line-height: 150%">。</span><span style="font-size: 10pt; line-height: 150%"> <br />
JVM</span><span style="font-size: 10pt; line-height: 150%">内存限制</span><span style="font-size: 10pt; line-height: 150%">(</span><span style="font-size: 10pt; line-height: 150%">最大值</span><span style="font-size: 10pt; line-height: 150%">)<br />
</span><span style="font-size: 10pt; line-height: 150%">首先</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">内存限制于实际的最大物理内存</span><span style="font-size: 10pt; line-height: 150%">(</span><span style="font-size: 10pt; line-height: 150%">废话！呵呵</span><span style="font-size: 10pt; line-height: 150%">)</span><span style="font-size: 10pt; line-height: 150%">，假设物理内存无限大的话，</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">内存的最大值跟操作系统有很大的关系。简单的说就</span><span style="font-size: 10pt; line-height: 150%">32</span><span style="font-size: 10pt; line-height: 150%">位处理器虽然可控内存空间有</span><span style="font-size: 10pt; line-height: 150%">4GB,</span><span style="font-size: 10pt; line-height: 150%">但是具体的操作系统会给一个限制，这个限制一般是</span><span style="font-size: 10pt; line-height: 150%">2GB-3GB</span><span style="font-size: 10pt; line-height: 150%">（一般来说</span><span style="font-size: 10pt; line-height: 150%">Windows</span><span style="font-size: 10pt; line-height: 150%">系统下为</span><span style="font-size: 10pt; line-height: 150%">1.5G-2G</span><span style="font-size: 10pt; line-height: 150%">，</span><span style="font-size: 10pt; line-height: 150%">Linux</span><span style="font-size: 10pt; line-height: 150%">系统下为</span><span style="font-size: 10pt; line-height: 150%">2G-3G</span><span style="font-size: 10pt; line-height: 150%">），而</span><span style="font-size: 10pt; line-height: 150%">64bit</span><span style="font-size: 10pt; line-height: 150%">以上的处理器就不会有限制了。</span><span style="font-size: 10pt; line-height: 150%"> <br />
2. </span><span style="font-size: 10pt; line-height: 150%">为什么有的机器我将</span><span style="font-size: 10pt; line-height: 150%">-Xmx</span><span style="font-size: 10pt; line-height: 150%">和</span><span style="font-size: 10pt; line-height: 150%">-XX:MaxPermSize</span><span style="font-size: 10pt; line-height: 150%">都设置为</span><span style="font-size: 10pt; line-height: 150%">512M</span><span style="font-size: 10pt; line-height: 150%">之后</span><span style="font-size: 10pt; line-height: 150%">Eclipse</span><span style="font-size: 10pt; line-height: 150%">可以启动，而有些机器无法启动？</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
</span><span style="font-size: 10pt; line-height: 150%">通过上面对</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">内存管理的介绍我们已经了解到</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">内存包含两种：堆内存和非堆内存，另外</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">最大内存首先取决于实际的物理内存和操作系统。所以说设置</span><span style="font-size: 10pt; line-height: 150%">VM</span><span style="font-size: 10pt; line-height: 150%">参数导致程序无法启动主要有以下几种原因：</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
1) </span><span style="font-size: 10pt; line-height: 150%">参数中</span><span style="font-size: 10pt; line-height: 150%">-Xms</span><span style="font-size: 10pt; line-height: 150%">的值大于</span><span style="font-size: 10pt; line-height: 150%">-Xmx</span><span style="font-size: 10pt; line-height: 150%">，或者</span><span style="font-size: 10pt; line-height: 150%">-XX:PermSize</span><span style="font-size: 10pt; line-height: 150%">的值大于</span><span style="font-size: 10pt; line-height: 150%">-XX:MaxPermSize</span><span style="font-size: 10pt; line-height: 150%">；</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
2) -Xmx</span><span style="font-size: 10pt; line-height: 150%">的值和</span><span style="font-size: 10pt; line-height: 150%">-XX:MaxPermSize</span><span style="font-size: 10pt; line-height: 150%">的总和超过了</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">内存的最大限制，比如当前操作系统最大内存限制，或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是，如果你的内存是</span><span style="font-size: 10pt; line-height: 150%">1024MB</span><span style="font-size: 10pt; line-height: 150%">，但实际系统中用到的并不可能是</span><span style="font-size: 10pt; line-height: 150%">1024MB</span><span style="font-size: 10pt; line-height: 150%">，因为有一部分被硬件占用了。</span><span style="font-size: 10pt; line-height: 150%"> <br />
<br />
3. </span><span style="font-size: 10pt; line-height: 150%">为何将上面的参数写入到</span><span style="font-size: 10pt; line-height: 150%">eclipse.ini</span><span style="font-size: 10pt; line-height: 150%">文件</span><span style="font-size: 10pt; line-height: 150%">Eclipse</span><span style="font-size: 10pt; line-height: 150%">没有执行对应的设置？</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
</span><span style="font-size: 10pt; line-height: 150%">那为什么同样的参数在快捷方式或者命令行中有效而在</span><span style="font-size: 10pt; line-height: 150%">eclipse.ini</span><span style="font-size: 10pt; line-height: 150%">文件中是无效的呢？这是因为我们没有遵守</span><span style="font-size: 10pt; line-height: 150%">eclipse.ini</span><span style="font-size: 10pt; line-height: 150%">文件的设置规则：</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
</span><span style="font-size: 10pt; line-height: 150%">参数形如</span><span style="font-size: 10pt; line-height: 150%">&#8220;</span><span style="font-size: 10pt; line-height: 150%">项</span><span style="font-size: 10pt; line-height: 150%">值</span><span style="font-size: 10pt; line-height: 150%">&#8221;</span><span style="font-size: 10pt; line-height: 150%">这种形式，中间有空格的需要换行书写，如果值中有空格的需要用双引号包括起来。比如我们使用</span><span style="font-size: 10pt; line-height: 150%">-vm C:\Java\jre1.6.0\bin\javaw.exe</span><span style="font-size: 10pt; line-height: 150%">参数设置虚拟机，在</span><span style="font-size: 10pt; line-height: 150%">eclipse.ini</span><span style="font-size: 10pt; line-height: 150%">文件中要写成这样：</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
-vm <br />
C:\Java\jre1.6.0\bin\javaw.exe <br />
</span><span style="font-size: 10pt; line-height: 150%">按照上面所说的，最后参数在</span><span style="font-size: 10pt; line-height: 150%">eclipse.ini</span><span style="font-size: 10pt; line-height: 150%">中可以写成这个样子：</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
-vmargs <br />
-Xms128M <br />
-Xmx512M <br />
-XX:PermSize=64M <br />
-XX:MaxPermSize=128M <br />
</span><span style="font-size: 10pt; line-height: 150%">实际运行的结果可以通过</span><span style="font-size: 10pt; line-height: 150%">Eclipse</span><span style="font-size: 10pt; line-height: 150%">中</span><span style="font-size: 10pt; line-height: 150%">&#8220;Help&#8221;-&#8220;About Eclipse SDK&#8221;</span><span style="font-size: 10pt; line-height: 150%">窗口里面的</span><span style="font-size: 10pt; line-height: 150%">&#8220;Configuration Details&#8221;</span><span style="font-size: 10pt; line-height: 150%">按钮进行查看。</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
</span><span style="font-size: 10pt; line-height: 150%">另外需要说明的是，</span><span style="font-size: 10pt; line-height: 150%">Eclipse</span><span style="font-size: 10pt; line-height: 150%">压缩包中自带的</span><span style="font-size: 10pt; line-height: 150%">eclipse.ini</span><span style="font-size: 10pt; line-height: 150%">文件内容是这样的：</span><span style="font-size: 10pt; line-height: 150%"><br />
<br />
-showsplash <br />
org.eclipse.platform <br />
--launcher.XXMaxPermSize <br />
256m <br />
-vmargs <br />
-Xms40m <br />
-Xmx256m <br />
</span><span style="font-size: 10pt; line-height: 150%">其中</span><span style="font-size: 10pt; line-height: 150%">&#8211;launcher.XXMaxPermSize</span><span style="font-size: 10pt; line-height: 150%">（注意最前面是两个连接线）跟</span><span style="font-size: 10pt; line-height: 150%">-XX:MaxPermSize</span><span style="font-size: 10pt; line-height: 150%">参数的含义基本是一样的，我觉得唯一的区别就是前者是</span><span style="font-size: 10pt; line-height: 150%">eclipse.exe</span><span style="font-size: 10pt; line-height: 150%">启动的时候设置的参数，而后者是</span><span style="font-size: 10pt; line-height: 150%">eclipse</span><span style="font-size: 10pt; line-height: 150%">所使用的</span><span style="font-size: 10pt; line-height: 150%">JVM</span><span style="font-size: 10pt; line-height: 150%">中的参数。其实二者设置一个就可以了，所以这里可以把</span><span style="font-size: 10pt; line-height: 150%">&#8211;launcher.XXMaxPermSize</span><span style="font-size: 10pt; line-height: 150%">和下一行使用</span><span style="font-size: 10pt; line-height: 150%">#</span><span style="font-size: 10pt; line-height: 150%">注释掉。</span></div>
<div style="background: #eeeeee; margin: 7.5pt 0cm; line-height: 150%" align="left"><span style="font-size: 10pt; line-height: 150%">3. </span><span style="font-size: 10pt; line-height: 150%">其他的启动参数。</span><span style="font-size: 10pt; line-height: 150%">如果你有一个双核的</span><span style="font-size: 10pt; line-height: 150%">CPU</span><span style="font-size: 10pt; line-height: 150%">，也许可以尝试这个参数</span><span style="font-size: 10pt; line-height: 150%">:</span></div>
<div style="background: #eeeeee; margin: 7.5pt 0cm; line-height: 150%" align="left"><span style="font-size: 12pt; line-height: 150%">-XX:+UseParallelGC</span></div>
<div style="background: #eeeeee; margin: 7.5pt 0cm; line-height: 150%" align="left"><span style="font-size: 10pt; line-height: 150%">让</span><span style="font-size: 10pt; line-height: 150%">GC</span><span style="font-size: 10pt; line-height: 150%">可以更快的执行。（只是</span><span style="font-size: 10pt; line-height: 150%">JDK 5</span><span style="font-size: 10pt; line-height: 150%">里对</span><span style="font-size: 10pt; line-height: 150%">GC</span><span style="font-size: 10pt; line-height: 150%">新增加的参数）</span></div>
 <img src ="http://www.blogjava.net/hefang/aggbug/324489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:55 <a href="http://www.blogjava.net/hefang/articles/324489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Date类的学习总结(转)</title><link>http://www.blogjava.net/hefang/articles/324484.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:51:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324484.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324484.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324484.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324484.html</trackback:ping><description><![CDATA[<p>1.计算某一月份的最大天数<br />
Calendar time=Calendar.getInstance();<br />
time.clear();<br />
time.set(Calendar.YEAR,year); //year 为 int<br />
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数<br />
注：在使用set方法之前，必须先clear一下，否则很多信息会继承自系统当前时间<br />
2.Calendar和Date的转化<br />
(1) Calendar转化为Date<br />
Calendar cal=Calendar.getInstance();<br />
Date date=cal.getTime();<br />
(2) Date转化为Calendar<br />
Date date=new Date();<br />
Calendar cal=Calendar.getInstance();<br />
cal.setTime(date);<br />
3.把字符串转化为java.util.Date<br />
方法一：<br />
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");<br />
java.util.Date dt=sdf.parse("2005-2-19");<br />
System.out.print(sdf.format(dt));&nbsp;&nbsp;&nbsp; //输出结果是：2005-2-19<br />
方法二：<br />
java.util.Date dt=null;<br />
DateFormat df=DateFormat.getDateInstance();<br />
dt=df.parse("2005-12-19");<br />
System.out.println(dt);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输出结果为：Mon Dec 19 00:00:00 CST 2005<br />
System.out.println(df.format(dt)); //输出结果为：2005-2-19<br />
4.把字符串转化为java.sql.Date<br />
字符串必须是"yyyy-mm-dd"格式，否则会抛出IllegalArgumentException异常<br />
java.sql.Date sdt=java.sql.Date.valueOf("2005-9-6");<br />
System.out.println(sdt);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输出结果为：2005-9-6</p>
<p>5.格式化输出日期时间 （这个用的比较多）<br />
Date date=new Date();<br />
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");<br />
String time=df.format(date);<br />
System.out.println(time);<br />
需要注意的一点：SimpleDateFormat类格式化一个字符串时，可根据需要调用 format() 或 parse() 函数；只不过format()返回String类型，parse()返回java.util.Date类型<br />
6.计算一年中的第几星期<br />
(1)计算某一天是一年中的第几星期<br />
Calendar cal=Calendar.getInstance();<br />
cal.set(Calendar.YEAR, 2006);<br />
cal.set(Calendar.MONTH, 8);<br />
cal.set(Calendar.DAY_OF_MONTH, 3);<br />
int weekno=cal.get(Calendar.WEEK_OF_YEAR);<br />
(2)计算一年中的第几星期是几号<br />
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");<br />
Calendar cal=Calendar.getInstance();<br />
cal.set(Calendar.YEAR, 2006);<br />
cal.set(Calendar.WEEK_OF_YEAR, 1);<br />
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);<br />
System.out.println(df.format(cal.getTime()));<br />
输出:<br />
2006-01-02<br />
7.add()和roll()的用法(不太常用)<br />
(1)add()方法<br />
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");<br />
Calendar cal=Calendar.getInstance();<br />
cal.set(Calendar.YEAR, 2006);<br />
cal.set(Calendar.MONTH, 8);<br />
cal.set(Calendar.DAY_OF_MONTH, 3);<br />
cal.add(Calendar.DATE, -4);<br />
Date date=cal.getTime();<br />
System.out.println(df.format(date));<br />
cal.add(Calendar.DATE, 4);<br />
date=cal.getTime();<br />
System.out.println(df.format(date));<br />
输出：<br />
&nbsp;&nbsp;&nbsp; 2006-08-30<br />
&nbsp;&nbsp;&nbsp; 2006-09-03<br />
(2)roll方法<br />
cal.set(Calendar.YEAR, 2006);<br />
cal.set(Calendar.MONTH, 8);<br />
cal.set(Calendar.DAY_OF_MONTH, 3);<br />
cal.roll(Calendar.DATE, -4);<br />
date=cal.getTime();<br />
System.out.println(df.format(date));<br />
cal.roll(Calendar.DATE, 4);<br />
date=cal.getTime();<br />
System.out.println(df.format(date));<br />
输出：<br />
&nbsp;&nbsp;&nbsp; 2006-09-29<br />
&nbsp;&nbsp;&nbsp; 2006-09-03<br />
可见，roll()方法在本月内循环，一般使用add()方法；<br />
8.计算两个任意时间中间的间隔天数（这个比较常用）<br />
(1)传进Calendar对象<br />
&nbsp;&nbsp;&nbsp; public int getIntervalDays(Calendar startday,Calendar endday){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(startday.after(endday)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar cal=startday;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startday=endday;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endday=cal;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long sl=startday.getTimeInMillis();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long el=endday.getTimeInMillis();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long ei=el-sl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (int)(ei/(1000*60*60*24));<br />
&nbsp;&nbsp;&nbsp; }<br />
(2)传进Date对象<br />
&nbsp;&nbsp;&nbsp; public int getIntervalDays(Date startday,Date endday){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(startday.after(endday)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date cal=startday;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startday=endday;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endday=cal;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long sl=startday.getTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long el=endday.getTime();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long ei=el-sl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (int)(ei/(1000*60*60*24));<br />
&nbsp;&nbsp;&nbsp; }<br />
(3)改进精确计算相隔天数的方法<br />
&nbsp;&nbsp;&nbsp; public int getDaysBetween (Calendar d1, Calendar d2){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (d1.after(d2)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Calendar swap = d1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1 = d2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d2 = swap;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int y2 = d2.get(Calendar.YEAR);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (d1.get(Calendar.YEAR) != y2){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1 = (Calendar) d1.clone();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; days += d1.getActualMaximum(Calendar.DAY_F_YEAR);//得到当年的实际天数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1.add(Calendar.YEAR, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } while (d1.get(Calendar.YEAR) != y2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return days;<br />
&nbsp;&nbsp;&nbsp; }<br />
注意：通过上面的方法可以衍生出求任何时间，如要查出邮箱三周之内收到的邮件（得到当前系统时间－再得到三周前时间）用收件的时间去匹配 最好装化成 long去比较<br />
如：1年前日期（注意毫秒的转换）<br />
&nbsp;&nbsp; java.util.Date myDate=new java.util.Date();<br />
&nbsp;&nbsp; long myTime=(myDate.getTime()/1000)-60*60*24*365;<br />
&nbsp;&nbsp; myDate.setTime(myTime*1000);<br />
&nbsp;&nbsp; String mDate=formatter.format(myDate);<br />
&nbsp;&nbsp; 3周前的日期<br />
&nbsp;&nbsp; Calendar cal3 = Calendar.getInstance();<br />
cal3.add(cal3.DATE, -21);//取3周前的日期<br />
String date = formatter.format(cal3.getTime());<br />
9. String 和 Date ，Long 之间相互转换 （最常用）<br />
字符串转化成时间类型（字符串可以是任意类型，只要和SimpleDateFormat中的格式一致即可）<br />
通常我们取时间跨度的时候，会substring出具体时间－－long－比较<br />
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);<br />
java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");<br />
long dvalue=d.getTime();<br />
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />
String mDateTime1=formatter.format(d);<br />
10. 通过时间求时间<br />
年月周求日期<br />
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");<br />
java.util.Date date2= formatter2.parse("2003-05 5 星期五");<br />
SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");<br />
String mydate2=formatter3.format(date2);<br />
求是星期几<br />
mydate= myFormatter.parse("2001-1-1");<br />
SimpleDateFormat formatter4 = new SimpleDateFormat("E");<br />
String mydate3=formatter4.format(mydate);<br />
11. java 和 具体的数据库结合<br />
在开发web应用中，针对不同的数据库日期类型，我们需要在我们的程序中对日期类型做各种不同的转换。若对应数据库数据是oracle的Date类型，即只需要年月日的，可以选择使用java.sql.Date类型，若对应的是MSsqlserver 数据库的DateTime类型，即需要年月日时分秒的，选择java.sql.Timestamp类型<br />
你可以使用dateFormat定义时间日期的格式，转一个字符串即可<br />
class Datetest{<br />
*method 将字符串类型的日期转换为一个timestamp（时间戳记java.sql.Timestamp）<br />
<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#42;&#64;&#112;&#97;&#114;&#97;&#109;&#100;&#97;&#116;&#101;&#83;&#116;&#114;&#105;&#110;&#103;" target="_blank">*@paramdateString</a> 需要转换为timestamp的字符串<br />
<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#42;&#64;&#114;&#101;&#116;&#117;&#114;&#110;&#100;&#97;&#116;&#97;&#84;&#105;&#109;&#101;" target="_blank">*@returndataTime</a> timestamp<br />
public final static java.sql.Timestamp string2Time(String dateString)<br />
throws java.text.ParseException {<br />
DateFormat dateFormat;<br />
dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//设定格式<br />
//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);<br />
dateFormat.setLenient(false);<br />
java.util.Date timeDate = dateFormat.parse(dateString);//util类型<br />
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型<br />
return dateTime;<br />
}<br />
*method 将字符串类型的日期转换为一个Date（java.sql.Date）<br />
<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#42;&#64;&#112;&#97;&#114;&#97;&#109;&#100;&#97;&#116;&#101;&#83;&#116;&#114;&#105;&#110;&#103;" target="_blank">*@paramdateString</a> 需要转换为Date的字符串<br />
<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#42;&#64;&#114;&#101;&#116;&#117;&#114;&#110;&#100;&#97;&#116;&#97;&#84;&#105;&#109;&#101;" target="_blank">*@returndataTime</a> Date<br />
public final static java.sql.Date string2Date(String dateString)<br />
throws java.lang.Exception {<br />
DateFormat dateFormat;<br />
dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);<br />
dateFormat.setLenient(false);<br />
java.util.Date timeDate = dateFormat.parse(dateString);//util类型<br />
java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型<br />
return dateTime;<br />
}<br />
public static void main(String[] args){<br />
Date da = new Date();<br />
注意：这个地方da.getTime()得到的是一个long型的值<br />
System.out.println(da.getTime());<br />
由日期date转换为timestamp<br />
第一种方法：使用new Timestamp(long)<br />
Timestamp t = new Timestamp(new Date().getTime());<br />
System.out.println(t);<br />
第二种方法：使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)<br />
Timestamp tt = new Timestamp(Calendar.getInstance().get(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar.YEAR) - 1900, Calendar.getInstance().get(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar.MONTH), Calendar.getInstance().get(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar.DATE), Calendar.getInstance().get(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar.HOUR), Calendar.getInstance().get(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar.MINUTE), Calendar.getInstance().get(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar.SECOND), 0);<br />
System.out.println(tt);<br />
try {<br />
String sToDate = "2005-8-18";//用于转换成java.sql.Date的字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sToTimestamp = "2005-8-18 14:21:12.123";//用于转换成java.sql.Timestamp的字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date date1 = string2Date(sToDate);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Timestamp date2 = string2Time(sToTimestamp);<br />
System.out.println("Date:"+date1.toString());//结果显示<br />
System.out.println("Timestamp:"+date2.toString());//结果显示<br />
}catch(Exception e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}</p>
<p>一、Date的构造函数<br />
1.1构造一个反映当时时间的Date实例<br />
Date<br />
public Date()<br />
构造一个Date对象并对其进行初始化以反映当前时间。<br />
1.2从一个长整型数据构造一个Date实例<br />
Date<br />
public Date(long date)<br />
构造一个Date对象，并根据相对于GMT 1970年1月1日00:00:00的毫秒数对其进行初始化。<br />
参数：<br />
date - 相对于GMT 1970年1月1日00:00:00的毫秒数。<br />
1.3从年月日时分秒构造一个Date实例<br />
Date<br />
public Date(int year,<br />
int month,<br />
int date)<br />
public Date(int year,<br />
int month,<br />
int date,<br />
int hrs,<br />
int min)<br />
public Date(int year,<br />
int month,<br />
int date,<br />
int hrs,<br />
int min,<br />
int sec)<br />
这三个构造函数均不推荐使用，在JDK 1.1版中，分别被Calendar.set(year + 1900, month, date)或GregorianCalendar(year + 1900, month, date)、Calendar.set(year + 1900, month, date, hrs, min)或 GregorianCalendar(year + 1900, month, date, hrs, min)、Calendar.set(year + 1900, month, date, hrs, min, sec)或GregorianCalendar(year + 1900, month, date, hrs, min, sec)代替。<br />
&nbsp;</p>
 <img src ="http://www.blogjava.net/hefang/aggbug/324484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:51 <a href="http://www.blogjava.net/hefang/articles/324484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java导入Excel示例</title><link>http://www.blogjava.net/hefang/articles/324483.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:49:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324483.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324483.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324483.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324483.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324483.html</trackback:ping><description><![CDATA[<p>生成Excel的类：<br />
&nbsp;public&nbsp;&nbsp; static&nbsp;&nbsp; void&nbsp; main(String args[])&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void show(){<br />
&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打开文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableWorkbook book = Workbook.createWorkbook(new File( "test.xls " ));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //生成名为&#8220;第一页&#8221;的工作表，参数0表示这是第一页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableSheet w0&nbsp; =&nbsp; book.createSheet("第一页 ",0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableSheet w1&nbsp; =&nbsp; book.createSheet("第二页 ",1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableSheet w2&nbsp; =&nbsp; book.createSheet("第三页 ",2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在Label对象的构造子中指名单元格位置是第一列第一行(0,0)，以及单元格内容为test<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第一个参数表示列，第二个参数表示行，第三个参数表示数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label label = new Label( 0 ,&nbsp; 0 ,&nbsp; " test " );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将定义好的单元格添加到工作表中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w0.addCell(label);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //生成一个保存数字的单元格 必须使用Number的完整包路径，否则有语法歧义 单元格位置是第二列，第一行，值为789.123<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jxl.write.Number number&nbsp; =&nbsp;&nbsp; new&nbsp; jxl.write.Number( 1 ,&nbsp; 0 ,&nbsp; 555.12541 );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w0.addCell(number);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这种方式是以文本字符的形式将数值存储到xls文件中的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w1.addCell(new Label(0,0,"12"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w1.addCell(new Label(1,0,"21"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w1.addCell(new Label(2,0,"123"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第二列，第一行==========存储数字必须有Number的实例是<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w1.addCell(new Number(1,0,123));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第二列，第五行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w2.addCell(new Number(1,4,123));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //写入数据并关闭文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; book.write();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; book.close();<br />
&nbsp; } catch (Exception e)&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>读取Excel的类：<br />
public&nbsp;&nbsp; class&nbsp; ReadExcel&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; static&nbsp;&nbsp; void&nbsp; main(String args[])&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Workbook book = Workbook.getWorkbook(new File("f:\\test.xls"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获得第一个工作表对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet sheet&nbsp; =&nbsp; book.getSheet(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到第一列第一行的单元格<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cell cell1 = sheet.getCell(0,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String result = cell1.getContents();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到整个第一列<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cell [] ces = sheet.getColumn(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; ces.length; i++) {<br />
&nbsp;&nbsp;&nbsp; System.err.println(ces[i].getContents());<br />
&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; Cell [] crs = sheet.getRow(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; crs.length; i++) {<br />
&nbsp;&nbsp;&nbsp; System.err.println(crs[i].getContents());<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; book.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; catch&nbsp; (Exception e)&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
//修改Excel的类<br />
public&nbsp;&nbsp; class&nbsp; UpdateExcel&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; public static void&nbsp; main(String args[])&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Excel获得文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Workbook wb = Workbook.getWorkbook(new File("f:\\test.xls" ));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打开一个文件的副本，并且指定数据写回到原文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableWorkbook book = Workbook.createWorkbook(new File("f:\\test.xls"),wb);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加一个工作表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第一个参数：新添加的页面名称。2表示它的位置，从零开始，2表示第三页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableSheet sheet = book.createSheet("第二页 ",2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sheet.addCell(new Label(0,0," 第二页的测试数据 " ));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; book.write();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; book.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; catch&nbsp; (Exception e)&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
其他操作：<br />
其他操作<br />
&nbsp;一、 数据格式化<br />
&nbsp;在Excel中不涉及复杂的数据类型，能够比较好的处理字串、数字和日期已经能够满足一般的应用。<br />
1、 字串格式化<br />
&nbsp;字符串的格式化涉及到的是字体、粗细、字号等元素，这些功能主要由WritableFont和WritableCellFormat类来负责。<br />
&nbsp;假设我们在生成一个含有字串的单元格时，使用如下语句，为方便叙述，我们为每一行命令加了编号：<br />
WritableFont font1 = new&nbsp; WritableFont(WritableFont.TIMES, 16 ,WritableFont.BOLD); ①<br />
WritableCellFormat format1 = new&nbsp; WritableCellFormat(font1); ②<br />
Label label = new&nbsp; Label( 0 , 0 ,&#8221;data&nbsp; 4&nbsp; test&#8221;,format1) ③<br />
&nbsp;其中<br />
&nbsp;①指定了字串格式：字体为TIMES，字号16，加粗显示。WritableFont有非常丰富的 构造子，供不同情况下使用，jExcelAPI的java-doc中有详细列表，这里不再列出。<br />
&nbsp;②处代码使用了WritableCellFormat类，这个类非常重要，通过它可以指定单元格的各种属性，后面的单元格格式化中会有更多描述。<br />
&nbsp;③处使用了Label类的构造子，指定了字串被赋予那种格式。在WritableCellFormat类中，还有一个很重要的方法是指定数据的对齐方式。<br />
&nbsp;比如针对我们 上面的实例，可以指定：<br />
//把水平对齐方式指定为居中<br />
format1.setAlignment(jxl.format.Alignment.CENTRE);<br />
//把垂直对齐方式指定为居中<br />
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);</p>
<p>二、单元格操作<br />
Excel中很重要的一部分是对单元格的操作，比如行高、列宽、单元格合并等，所幸jExcelAPI提供了这些支持。这些操作相对比较简单，下面只介绍一下相关的API。<br />
1、 合并单元格<br />
WritableSheet.mergeCells( int&nbsp; m, int&nbsp; n, int&nbsp; p, int&nbsp; q); <br />
//作用是从(m,n)到(p,q)的单元格全部合并，比如：<br />
WritableSheet sheet = book.createSheet(&#8220;第一页&#8221;, 0 );<br />
//合并第一列第一行到第六列第一行的所有单元格<br />
sheet.mergeCells( 0 , 0 , 5 , 0 );<br />
合并既可以是横向的，也可以是纵向的。合并后的单元格不能再次进行合并，否则会触发异常。</p>
<p>2、 行高和列宽<br />
WritableSheet.setRowView(int i,int height);<br />
//作用是指定第i+1行的高度，比如：<br />
//将第一行的高度设为200<br />
sheet.setRowView(0,200);<br />
WritableSheet.setColumnView(int i,int width);<br />
//作用是指定第i+1列的宽度，比如：<br />
//将第一列的宽度设为30<br />
sheet.setColumnView(0,30);<br />
jExcelAPI还有其他的一些功能，比如插入图片等，这里就不再一一介绍，读者可以自己探索。<br />
其中：如果读一个excel，需要知道它有多少行和多少列，如下操作：<br />
Workbook book = Workbook.getWorkbook(new File("测试1.xls"));<br />
//获得第一个工作表对象<br />
Sheet sheet = book.getSheet(0);<br />
//得到第一列第一行的单元格<br />
int columnum = sheet.getColumns();//得到列数<br />
int rownum = sheet.getRows();//得到行数<br />
System.out.println(columnum);<br />
System.out.println(rownum);<br />
for(int i = 0;i &lt; rownum;i ++ )//循环进行读写<br />
{<br />
&nbsp;&nbsp;&nbsp; for(int j = 0;j &lt; columnum;j ++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cell cell1 = sheet.getCell(j, i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String result = cell1.getContents();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print( " \t " );<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; System.out.println();<br />
}<br />
book.close();<br />
</p>
<img src ="http://www.blogjava.net/hefang/aggbug/324483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:49 <a href="http://www.blogjava.net/hefang/articles/324483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sybase的JDBC连接</title><link>http://www.blogjava.net/hefang/articles/324479.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324479.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324479.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324479.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324479.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324479.html</trackback:ping><description><![CDATA[<p>package org.test;</p>
<p>import java.sql.Connection;<br />
import java.sql.DriverManager;<br />
import java.sql.ResultSet;<br />
import java.sql.SQLException;<br />
import java.sql.Statement;</p>
<p>public class SyBaseJDBC {<br />
&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;ResultSet rs = null;<br />
&nbsp;&nbsp;Statement stmt = null;<br />
&nbsp;&nbsp;Connection conn = null;<br />
&nbsp;&nbsp;String driver = "com.sybase.jdbc3.jdbc.SybDriver";<br />
&nbsp;&nbsp;String url = "jdbc:sybase:Tds:127.0.0.1:5000/eomsdbbk?user=develop&amp;password=develop&amp;useUnicode=true?CHARSET=cp936";<br />
&nbsp;&nbsp;// 加载驱动<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;Class.forName(driver);<br />
&nbsp;&nbsp;&nbsp;conn = DriverManager.getConnection(url);<br />
&nbsp;&nbsp;&nbsp;stmt = (Statement) conn.createStatement();<br />
&nbsp;&nbsp;&nbsp;rs = stmt.executeQuery("select * from tbAddrListGrp ");<br />
&nbsp;&nbsp;&nbsp;while (rs.next()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rs.getInt("iAddrListGrpId"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rs.getInt("iPid"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rs.getString("sName"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rs.getString("sRemark"));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} catch (ClassNotFoundException e) {<br />
&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;} catch (SQLException e) {<br />
&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;} finally {<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (rs != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (conn != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}</p>
sybase的JDBC连接
<img src ="http://www.blogjava.net/hefang/aggbug/324479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:47 <a href="http://www.blogjava.net/hefang/articles/324479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>import static和import的区别</title><link>http://www.blogjava.net/hefang/articles/324472.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:20:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324472.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324472.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324472.html</trackback:ping><description><![CDATA[<p>静态导入是JDK1.5中的新特性。一般我们导入一个类都用 import com.....ClassName;而静态导入是这样：import static com.....ClassName.*;这里的多了个static，还有就是类名ClassName后面多了个 .* ，意思是导入这个类里的静态方法。当然，也可以只导入某个静态方法，只要把 .* 换成静态方法名就行了。然后在这个类中，就可以直接用方法名调用静态方法，而不必用ClassName.方法名 的方式来调用。<br />
<br />
这种方法的好处就是可以简化一些操作，例如打印操作System.out.println(...);就可以将其写入一个静态方法print(...)，在使用时直接print(...)就可以了。</p>
<p>ｉｍｐｏｒｔ　ｓｔａｔｉｃ，很多ｓｔａｔｉｃ的东西可以直接用，不过我不认为这是个什么好特性，可能会带来混乱，本来本类的方法直接调用就可以了，现在导入的静态方法和成员也可以直接用了，有的时候就不好分清．<br />
&nbsp;</p>
<dl class="code">
<dt>Java code
<dd>
<pre>
<div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><span style="color: #000000">
</span><span style="color: #0000ff">import</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> java.lang.System.</span><span style="color: #000000">*</span><span style="color: #000000">;
</span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> Main{
</span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) {
out.print(</span><span style="color: #000000">"</span><span style="color: #000000">Hello World</span><span style="color: #000000">"</span><span style="color: #000000">);
}
}
</span></div>
</pre>
</dd></dl>
<img src ="http://www.blogjava.net/hefang/aggbug/324472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:20 <a href="http://www.blogjava.net/hefang/articles/324472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>代码执行优先级别</title><link>http://www.blogjava.net/hefang/articles/324471.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324471.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324471.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324471.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324471.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324471.html</trackback:ping><description><![CDATA[<span style="color: #ff6600">
<p>java代码块分4大块(普通代码块、构造块、静态块、同步代码块（多线程）)</p>
<p>&nbsp; 普通代码块&nbsp; ——&nbsp; 指写在一个<span style="color: #ff0000">方法</span>中的语句块</p>
<p>&nbsp; 构造块&nbsp;&nbsp;&nbsp;&nbsp;——直接写在<span style="color: #ff0000">类中</span>的语句块，优先于构造方法</p>
<p>&nbsp; 静态块&nbsp;&nbsp;&nbsp; ——直接写在类中，通过static声明的语句块，<span style="color: #ff0000">优先</span>于构造块和构造方法</p>
<p>&nbsp;同步代码块&nbsp; ——暂不解释</p>
<p>示例</p>
<table style="width: 440px; height: 238px" cellspacing="1" cellpadding="1" width="440" border="1">
    <tbody>
        <tr>
            <td><span style="color: #808080">&nbsp;// 静态代码块<br />
            &nbsp;static {<br />
            &nbsp;&nbsp;System.out.println("static code() ...");<br />
            &nbsp;}<br />
            &nbsp;// 声明一个构造方法<br />
            &nbsp;Test() {<br />
            &nbsp;&nbsp;System.out.println("Person()构造方法");<br />
            &nbsp;}<br />
            &nbsp;// 构造块<br />
            &nbsp;{<br />
            &nbsp;&nbsp;System.out.println("Hello World!!!");<br />
            &nbsp;}</span></td>
        </tr>
    </tbody>
</table>
<p>执行结果</p>
<table cellspacing="1" cellpadding="1" width="200" border="1">
    <tbody>
        <tr>
            <td><span style="color: #808080">static code() ...<br />
            Hello World!!!<br />
            Person()构造方法<br />
            Hello World!!!<br />
            Person()构造方法</span></td>
        </tr>
    </tbody>
</table>
<p><br />
</span></p>
<img src ="http://www.blogjava.net/hefang/aggbug/324471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:19 <a href="http://www.blogjava.net/hefang/articles/324471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BigDecimal常用方法</title><link>http://www.blogjava.net/hefang/articles/324470.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:18:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324470.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324470.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324470.html</trackback:ping><description><![CDATA[public class Arith { <br />
<br />
/** <br />
* 由于Java的简单类型不能够精确的对浮点数进行运算，这个工具类提供精 <br />
* 确的浮点数运算，包括加减乘除和四舍五入。 <br />
*/ <br />
//默认除法运算精度 <br />
private static final int DEF_DIV_SCALE = 10; <br />
&nbsp;&nbsp;&nbsp; <br />
//这个类不能实例化 <br />
private Arith(){ <br />
} <br />
<br />
&nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp;&nbsp; * 提供精确的加法运算。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param v1 被加数 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param v2 加数 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return 两个参数的和 <br />
&nbsp;&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; public static double add(double v1,double v2){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b1 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(Double.toString(v1)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b2 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(Double.toString(v2)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return b1.add(b2).doubleValue(); <br />
&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp;&nbsp; * 提供精确的减法运算。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param v1 被减数 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param v2 减数 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return 两个参数的差 <br />
&nbsp;&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; public static double sub(double v1,double v2){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b1 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(Double.toString(v1)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b2 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(Double.toString(v2)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return b1.subtract(b2).doubleValue(); <br />
&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp;&nbsp; * 提供精确的乘法运算。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param v1 被乘数 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param v2 乘数 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return 两个参数的积 <br />
&nbsp;&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; public static double mul(double v1,double v2){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b1 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(Double.toString(v1)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b2 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(Double.toString(v2)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return b1.multiply(b2).doubleValue(); <br />
&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp;&nbsp; * 提供（相对）精确的除法运算，当发生除不尽的情况时，精确到 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * 小数点以后10位，以后的数字四舍五入。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param v1 被除数 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param v2 除数 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return 两个参数的商 <br />
&nbsp;&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; public static double div(double v1,double v2){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return div(v1,v2,DEF_DIV_SCALE); <br />
&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp;&nbsp; * 提供（相对）精确的除法运算。当发生除不尽的情况时，由scale参数指 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * 定精度，以后的数字四舍五入。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param v1 被除数 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param v2 除数 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param scale 表示表示需要精确到小数点以后几位。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return 两个参数的商 <br />
&nbsp;&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; public static double div(double v1,double v2,int scale){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(scale&lt;0){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IllegalArgumentException( <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "The scale must be a positive integer or zero"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b1 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(Double.toString(v1)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b2 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(Double.toString(v2)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return b1.divide(b2,scale,<span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>.ROUND_HALF_UP).doubleValue(); <br />
&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp;&nbsp; * 提供精确的小数位四舍五入处理。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param v 需要四舍五入的数字 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param scale 小数点后保留几位 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return 四舍五入后的结果 <br />
&nbsp;&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; public static double round(double v,int scale){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(scale&lt;0){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IllegalArgumentException( <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "The scale must be a positive integer or zero"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(Double.toString(v)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> one = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>("1"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return b.divide(one,scale,<span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>.ROUND_HALF_UP).doubleValue(); <br />
&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp; * 提供精确的类型转换(Float) <br />
&nbsp;&nbsp;&nbsp; * @param v 需要被转换的数字 <br />
&nbsp;&nbsp;&nbsp; * @return 返回转换结果 <br />
&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; public static float convertsToFloat(double v){ <br />
&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(v); <br />
&nbsp;&nbsp;&nbsp; return b.floatValue(); <br />
&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /** <br />
* 提供精确的类型转换(Int)不进行四舍五入 <br />
* @param v 需要被转换的数字 <br />
* @return 返回转换结果 <br />
*/ <br />
public static int convertsToInt(double v){ <br />
<span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(v); <br />
&nbsp;&nbsp;&nbsp; return b.intValue(); <br />
} <br />
<br />
/** <br />
* 提供精确的类型转换(Long) <br />
* @param v 需要被转换的数字 <br />
* @return 返回转换结果 <br />
*/ <br />
public static long convertsToLong(double v){ <br />
<span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(v); <br />
&nbsp;&nbsp;&nbsp; return b.longValue(); <br />
} <br />
<br />
/** <br />
* 返回两个数中大的一个值 <br />
* @param v1 需要被对比的第一个数 <br />
* @param v2 需要被对比的第二个数 <br />
* @return 返回两个数中大的一个值 <br />
*/ <br />
public static double returnMax(double v1,double v2){ <br />
<span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b1 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(v1); <br />
<span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b2 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(v2); <br />
&nbsp;&nbsp;&nbsp; return b1.max(b2).doubleValue(); <br />
} <br />
<br />
/** <br />
* 返回两个数中小的一个值 <br />
* @param v1 需要被对比的第一个数 <br />
* @param v2 需要被对比的第二个数 <br />
* @return 返回两个数中小的一个值 <br />
*/ <br />
public static double returnMin(double v1,double v2){ <br />
<span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b1 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(v1); <br />
<span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b2 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(v2); <br />
&nbsp;&nbsp;&nbsp; return b1.min(b2).doubleValue(); <br />
} <br />
<br />
/** <br />
* 精确对比两个数字 <br />
* @param v1 需要被对比的第一个数 <br />
* @param v2 需要被对比的第二个数 <br />
* @return 如果两个数一样则返回0，如果第一个数比第二个数大则返回1，反之返回-1 <br />
*/ <br />
public static int compareTo(double v1,double v2){ <br />
<span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b1 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(v1); <br />
<span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span> b2 = new <span class="hilite1"><font style="background-color: #ffff00">BigDecimal</font></span>(v2); <br />
&nbsp;&nbsp;&nbsp; return b1.compareTo(b2); <br />
} <br />
<img src ="http://www.blogjava.net/hefang/aggbug/324470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:18 <a href="http://www.blogjava.net/hefang/articles/324470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java的double的精度问题(转)</title><link>http://www.blogjava.net/hefang/articles/324469.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324469.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324469.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324469.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324469.html</trackback:ping><description><![CDATA[<p>在java中，使用double进行运算，有时会出现精度丢失的问题，值会有那么0.00000***1偏差的偏差，导致匹配校验常常出现问题</p>
<p>解决方案如下:</p>
<p>&nbsp; /**&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; * 对<span class="hilite1"><font style="background-color: #ffff00">double</font></span>数据进行取精度.&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param value&nbsp; <span class="hilite1"><font style="background-color: #ffff00">double</font></span>数据.&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param scale&nbsp; 精度位数(保留的小数位数).&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param roundingMode&nbsp; 精度取值方式.&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return 精度计算后的数据.&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static <span class="hilite1"><font style="background-color: #ffff00">double</font></span> round(<span class="hilite1"><font style="background-color: #ffff00">double</font></span> value, int scale, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int roundingMode) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal bd = new BigDecimal(value);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bd = bd.setScale(scale, roundingMode);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">double</font></span> d = bd.doubleValue();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bd = null;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return d;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp;&nbsp; * <span class="hilite1"><font style="background-color: #ffff00">double</font></span> 相加 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param d1 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param d2 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return <br />
&nbsp;&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; public <span class="hilite1"><font style="background-color: #ffff00">double</font></span> sum(<span class="hilite1"><font style="background-color: #ffff00">double</font></span> d1,<span class="hilite1"><font style="background-color: #ffff00">double</font></span> d2){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal bd1 = new BigDecimal(<span class="hilite1"><font style="background-color: #ffff00">Double</font></span>.toString(d1)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal bd2 = new BigDecimal(<span class="hilite1"><font style="background-color: #ffff00">Double</font></span>.toString(d2)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bd1.add(bd2).doubleValue(); <br />
&nbsp;&nbsp;&nbsp; } <br />
<br />
<br />
&nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp;&nbsp; * <span class="hilite1"><font style="background-color: #ffff00">double</font></span> 相减 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param d1 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param d2 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return <br />
&nbsp;&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; public <span class="hilite1"><font style="background-color: #ffff00">double</font></span> sub(<span class="hilite1"><font style="background-color: #ffff00">double</font></span> d1,<span class="hilite1"><font style="background-color: #ffff00">double</font></span> d2){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal bd1 = new BigDecimal(<span class="hilite1"><font style="background-color: #ffff00">Double</font></span>.toString(d1)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal bd2 = new BigDecimal(<span class="hilite1"><font style="background-color: #ffff00">Double</font></span>.toString(d2)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bd1.subtract(bd2).doubleValue(); <br />
&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp;&nbsp; * <span class="hilite1"><font style="background-color: #ffff00">double</font></span> 乘法 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param d1 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param d2 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return <br />
&nbsp;&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; public <span class="hilite1"><font style="background-color: #ffff00">double</font></span> mul(<span class="hilite1"><font style="background-color: #ffff00">double</font></span> d1,<span class="hilite1"><font style="background-color: #ffff00">double</font></span> d2){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal bd1 = new BigDecimal(<span class="hilite1"><font style="background-color: #ffff00">Double</font></span>.toString(d1)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal bd2 = new BigDecimal(<span class="hilite1"><font style="background-color: #ffff00">Double</font></span>.toString(d2)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bd1.multiply(bd2).doubleValue(); <br />
&nbsp;&nbsp;&nbsp; } <br />
<br />
<br />
&nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp;&nbsp; * <span class="hilite1"><font style="background-color: #ffff00">double</font></span> 除法 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param d1 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param d2 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param scale 四舍五入 小数点位数 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return <br />
&nbsp;&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; public <span class="hilite1"><font style="background-color: #ffff00">double</font></span> div(<span class="hilite1"><font style="background-color: #ffff00">double</font></span> d1,<span class="hilite1"><font style="background-color: #ffff00">double</font></span> d2,int scale){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; 当然在此之前，你要判断分母是否为0，&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; 为0你可以根据实际需求做相应的处理 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal bd1 = new BigDecimal(<span class="hilite1"><font style="background-color: #ffff00">Double</font></span>.toString(d1)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal bd2 = new BigDecimal(<span class="hilite1"><font style="background-color: #ffff00">Double</font></span>.toString(d2)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bd1.divide <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); <br />
&nbsp;&nbsp;&nbsp; } <br />
<br />
<br />
这样，计算<span class="hilite1"><font style="background-color: #ffff00">double</font></span>类型的数据计算问题就可以处理了。 <br />
另外补充一下 JavaScript 四舍五入的方法： <br />
小数点问题 <br />
Math.round(totalAmount*100)/100 (保留 2 位) <br />
<br />
function formatFloat(src, pos) <br />
{ <br />
&nbsp; return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos); <br />
} <br />
</p>
<img src ="http://www.blogjava.net/hefang/aggbug/324469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:17 <a href="http://www.blogjava.net/hefang/articles/324469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>增强Eclipse的代码提示功能（转）</title><link>http://www.blogjava.net/hefang/articles/324468.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324468.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324468.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324468.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324468.html</trackback:ping><description><![CDATA[<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">从<font face="Times New Roman">Window&nbsp;-&gt;&nbsp;preferences&nbsp;-&gt;&nbsp;Java&nbsp;-&gt;&nbsp;Editor&nbsp;-&gt;&nbsp;Content&nbsp;assist&nbsp;-&gt;&nbsp;Auto-Activation</font><font face="宋体">下，我们可以在</font><font face="Times New Roman">"."</font><font face="宋体">号后面加入我们需要自动提示的首字幕，比如</font><font face="Times New Roman">"ahiz"</font><font face="宋体">。</font></span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><O:P></O:P></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">然后我们回到<font face="Times New Roman">Eclipse</font><font face="宋体">的开发环境，输入</font><font face="Times New Roman">"a"</font><font face="宋体">，提示就出现了。</font></span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><O:P></O:P></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-spacerun: 'yes'"><O:P></O:P></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">但是我们可以发现，这个<font face="Times New Roman">Auto-Activation</font><font face="宋体">下的输入框里最多只能输入</font><font face="Times New Roman">4</font><font face="宋体">个字母，也许是</font><font face="Times New Roman">Eclipse</font><font face="宋体">的开发人员担心我们输入的太多会影响性能，但计算机的性能不用白不用，所以我们要打破这个限制。</font></span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><O:P></O:P></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-spacerun: 'yes'"><O:P></O:P></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">其实上面都是铺垫，制造一下气氛，以显得我们下面要做的事情很牛似的，其实不然，一切都很简单。嘿嘿&nbsp;</span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><O:P></O:P></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-spacerun: 'yes'"><O:P></O:P></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">在<font face="Times New Roman">"."</font><font face="宋体">后面随便输入几个字符，比如</font><font face="Times New Roman">"abij"</font><font face="宋体">，然后回到开发环境，</font><font face="Times New Roman">File&nbsp;-&gt;&nbsp;export&nbsp;-&gt;&nbsp;general&nbsp;-&gt;&nbsp;preferences-&gt;&nbsp;</font><font face="宋体">选一个地方保存你的首选项，比如</font><font face="Times New Roman">C:\a.epf</font></span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><O:P></O:P></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">用任何文本编辑器打开<font face="Times New Roman">a.epf</font><font face="宋体">，查找字符串&#8220;</font><font face="Times New Roman">abij</font><font face="宋体">&#8221;，找到以后，替换成&#8220;</font><font face="Times New Roman">.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</font><font face="宋体">&#8221;，总之就是你想怎样就怎样！！然后回到</font><font face="Times New Roman">Eclipse</font><font face="宋体">，</font><font face="Times New Roman">File&nbsp;-&gt;&nbsp;import&nbsp;-&gt;&nbsp;general&nbsp;-&gt;&nbsp;preferences&nbsp;-&gt;&nbsp;</font><font face="宋体">导入刚才的</font><font face="Times New Roman">a.epf</font><font face="宋体">文件。此时你会发现输入任何字幕都可以得到自动提示了。爽！！！</font></span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><O:P></O:P></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-spacerun: 'yes'"><O:P></O:P></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">最后：自动提示弹出的时间最好改成<font face="Times New Roman">100</font><font face="宋体">毫秒以下，这样会比较爽一点，不然你都完事了，自动提示才弹出来，不过也要看机器性能。</font></span></p>
<img src ="http://www.blogjava.net/hefang/aggbug/324468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:16 <a href="http://www.blogjava.net/hefang/articles/324468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中replace和replaceAll的区别</title><link>http://www.blogjava.net/hefang/articles/324467.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324467.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324467.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324467.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324467.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324467.html</trackback:ping><description><![CDATA[<span style="color: red">replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是: </span><br />
<br />
1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串); <br />
2)replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号; <br />
<br />
&nbsp;&nbsp;&nbsp; 相同点是都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,如果只想替换第一次出现的,可以使用 replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串; <br />
&nbsp;&nbsp;&nbsp; 另外,如果replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果是一样的,即这两者也支持字符串的操作; <br />
&nbsp;&nbsp;&nbsp; 还有一点注意:执行了替换操作后,源字符串的内容是没有发生改变的. <br />
<br />
举例如下: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String src = new String("ab43a2c43d"); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(src.replace("3","f"));=&gt;ab4f2c4fd. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(src.replace('3','f'));=&gt;ab4f2c4fd. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(src.replaceAll("\\d","f"));=&gt;abffafcffd. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(src.replaceAll("a","f"));=&gt;fb43fc23d. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(src.replaceFirst("\\d,"f"));=&gt;abf32c43d <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(src.replaceFirst("4","h"));=&gt;abh32c43d. <br />
<br />
<br />
如何将字符串中的"\"替换成"\\"： <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String msgIn; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String msgOut; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msgOut=msgIn.replaceAll("\\\\","\\\\\\\\"); <br />
原因： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '\'在java中是一个转义字符，所以需要用两个代表一个。例如System.out.println( "\\" ) ;只打印出一个"\"。但是'\'也是正则表达式中的转义字符（replaceAll 的参数就是正则表达式），需要用两个代表一个。所以：\\\\被java转换成\\,\\又被正则表达式转换成\。 <br />
同样 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CODE: \\\\\\\\ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java: \\\\ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Regex: \\ <br />
<br />
<br />
将字符串中的'/'替换成'\'的几种方式: <br />
<br />
msgOut= msgIn.replaceAll("/", "\\\\"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msgOut= msgIn.replace("/", "\\"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msgOut= msgIn.replace('/', '\\'); <br />
<img src ="http://www.blogjava.net/hefang/aggbug/324467.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:15 <a href="http://www.blogjava.net/hefang/articles/324467.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java标示符&amp;关键字&amp;数据类型</title><link>http://www.blogjava.net/hefang/articles/324464.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324464.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324464.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324464.html</trackback:ping><description><![CDATA[java的分隔符有3种&nbsp; 分别为&nbsp; 1、空格 2、{}&nbsp;&nbsp; 3、； <br />
-------------<br />
标示符(变量，类名，方法名由标示符组成)<br />
&nbsp;&nbsp;&nbsp; 所谓标示符就是记号(字母、数字、下划线、$)&nbsp; 1、不能以数字开头，2、标示符长短无限制<br />
<br />
-------------<br />
关键字（定义标示符不能被使用的字就是关键字）<br />
&nbsp;&nbsp;&nbsp; 1、所有的java关键字都是小写的，<br />
&nbsp;&nbsp;&nbsp; 2、非关键字有 TURE、FALSE、NULL<br />
&nbsp;&nbsp;&nbsp; 3、保留关键字 goto const<br />
<br />
-------------<br />
java中的数据类型<br />
&nbsp;&nbsp;&nbsp; ┝数据类型<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ┕基本数据类型<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┝数值型<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;┝整数型(byte,short,int,long)<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;┕浮点型(float,double)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┝字符型(char)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┕布尔型(boolean)&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┕引用数据类型 <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┝类(class)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┝接口(interface)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┕数组<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
-------<br />
基本数据类型定义4类/8种数据类型<br />
整数型：byte short int long <br />
浮点型：float double<br />
文本型：char<br />
逻辑型：boolean<br />
可用这些数据类型的引用数据类型的max_value和min_value属性<br />
查看它的最大范围和最小范围<br />
--byte是最小的类型 <br />
--double与float是一样的，它的存储容量比flaot大<br />
--short long也是整型 short比int小 long比int大<br />
<br />
变量类型 取值 <br />
byte&nbsp;&nbsp;&nbsp; 0<br />
short &nbsp;&nbsp;&nbsp; 0<br />
int &nbsp;&nbsp;&nbsp; 0<br />
long&nbsp;&nbsp;&nbsp; &nbsp;0l<br />
char &nbsp;&nbsp;&nbsp; '\u0000'<br />
float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0f<br />
double &nbsp;&nbsp;&nbsp; 0.0d<br />
boolean&nbsp; false <br />
<img src ="http://www.blogjava.net/hefang/aggbug/324464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:13 <a href="http://www.blogjava.net/hefang/articles/324464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat怎么更改端口</title><link>http://www.blogjava.net/hefang/articles/324465.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324465.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324465.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324465.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324465.html</trackback:ping><description><![CDATA[<p>最近电脑不知道装了啥，8080端口又被占用了，改端口给个备份</p>
<p>找到tomcat的conf目录 打开server.xml文件</p>
<p>&lt;Connector port="8080" protocol="HTTP/1.1" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connectionTimeout="20000" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirectPort="8443" /&gt;</p>
<p>把port 值改为8081，就ok了&nbsp;</p>
<p>&lt;Connector port="8081" protocol="HTTP/1.1" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connectionTimeout="20000" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirectPort="8443" /&gt;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/hefang/aggbug/324465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:13 <a href="http://www.blogjava.net/hefang/articles/324465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>String的方法</title><link>http://www.blogjava.net/hefang/articles/324461.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324461.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324461.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324461.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324461.html</trackback:ping><description><![CDATA[<p>1. char charAt(int index) ：取字符串中的某一个字符，其中的参数index指的是字符串中序数。字符串的序数从0开始到length()-1 。<br />
2. int compareTo(String anotherString) ：当前String对象与anotherString比较。相等关系返回０；不相等时，从两个字符串第0字符开始比较，返回第一个不相等的字符差，另一种情况，较长字符串的前面部分恰巧是较短的字符串，返回它们的长度差。<br />
3. int compareTo(Object o) ：如果o是String对象，和2的功能一样；否则抛出ClassCastException异常。<br />
4. String concat(String str) ：将该String对象与str连接在一起。<br />
5. boolean contentEquals(StringBuffer sb) ：将该String对象与StringBuffer对象sb进行比较。<br />
6. static String copyValueOf(char[] data) ：<br />
7. static String copyValueOf(char[] data, int offset, int count) ：这两个方法将char数组转换成String，与其中一个构造函数类似。<br />
8. boolean endsWith(String suffix) ：该String对象是否以suffix 结尾。<br />
9. boolean equals(Object anObject) ：当anObject不为空并且与当前String对象一样，返回true；否则，返回false。<br />
10. byte[] getBytes() ：将该String对象转换成byte数组。<br />
11. void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) ：该方法将字符串拷贝到字符数组中。其中，srcBegin为拷贝<br />
12. int hashCode() ：返回当前字符的哈希表码。<br />
13. int indexOf(int ch) ：只找第一个匹配字符位置。<br />
14. int indexOf(int ch, int fromIndex) ：从fromIndex开始找第一个匹配字符位置。<br />
15. int indexOf(String str) ：只找第一个匹配字符串位置。<br />
16. int indexOf(String str, int fromIndex) ：从fromIndex开始找第一个匹配字符串位置。<br />
17. int lastIndexOf(int ch)<br />
18. int lastIndexOf(int ch, int fromIndex)<br />
19. int lastIndexOf(String str)<br />
20. int lastIndexOf(String str, int fromIndex) 以上四个方法与13、14、15、16类似，不同的是：找最后一个匹配的内容。<br />
21. int length() ：返回当前字符串长度。<br />
22. String replace(char oldChar, char newChar) ：将字符号串中第一个oldChar替换成newChar。<br />
23. boolean startsWith(String prefix) ：该String对象是否以prefix开始。<br />
24. boolean startsWith(String prefix, int toffset) ：该String对象从toffset位置算起，是否以prefix开始。<br />
25. String substring(int beginIndex) ：取从beginIndex位置开始到结束的子字符串。<br />
26.String substring(int beginIndex, int endIndex) ：取从 beginIndex位置开始到endIndex位置的子字符串。<br />
27. char[] toCharArray() ：将该String对象转换成char数组。<br />
28. String toLowerCase() ：将字符串转换成小写。<br />
29. String toUpperCase() ：将字符串转换成大写。<br />
30. static String valueOf(boolean b)<br />
31. static String valueOf(char c)<br />
32. static String valueOf(char[] data)<br />
33. static String valueOf(char[] data, int offset, int count)<br />
34. static String valueOf(double d)<br />
35. static String valueOf(float f)<br />
36. static String valueOf(int i)<br />
37. static String valueOf(long l)<br />
38. static String valueOf(Object obj)</p>
<img src ="http://www.blogjava.net/hefang/aggbug/324461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:11 <a href="http://www.blogjava.net/hefang/articles/324461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java配置环境变量</title><link>http://www.blogjava.net/hefang/articles/324463.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324463.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324463.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324463.html</trackback:ping><description><![CDATA[配置环境变量:<br />
我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量：<br />
JAVA_HOME=C:\j2sdk1.4.2_04<br />
CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar <br />
path=...;C:\Program Files\Java\jdk1.6.0_07\bin<br />
<br />
java是编译型和解释型结合跨平台的语言&nbsp; <br />
javac命令&nbsp; .java&nbsp;&nbsp; 编译型用&nbsp; javac HelloWorld.java<br />
java命令 .class&nbsp; 解释型&nbsp;&nbsp; java HelloWorld<br />
set classpath=. 整个程序会从当前所在的目录中查找所需的*.class文件 <br />
<img src ="http://www.blogjava.net/hefang/aggbug/324463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:11 <a href="http://www.blogjava.net/hefang/articles/324463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中String的构造函数·</title><link>http://www.blogjava.net/hefang/articles/324460.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:10:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324460.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324460.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324460.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324460.html</trackback:ping><description><![CDATA[<p>String类中的构造函数<br />
String(); 构造一个空字符串对象<br />
String(byte[] bytes); 通过byte数组构造字符串对象<br />
String(byte[] bytes,int offset,int length);通过byte数组，从offset开始，总共length长的字节构造字符串对象<br />
String(char[] value); 通过char数组构造字符串对象<br />
String(byte[] char,int offset,int length);通过char数组，从offset开始，总共length长的字节构造字符串对象<br />
String(String original); 构造一个original的副本，拷贝一个original<br />
String(StringBuffer buffer);通过StringBuffer数组构造字符串对象<br />
<br />
public class StringClassTest {<br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 字节数组<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; byte[] bArray = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 字符数组<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; char[] cArray = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //声明一个StringBuffer<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; StringBuffer strbuf = new StringBuffer("strbuf"); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 实例一个String对象<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String str = new String("str abcd");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //实例一个String对象 通过一个btye数组构造字符串对象（字节数组）<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String strb = new String(bArray);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //实例一个String对象 通过一个char数组构造字符串对象（字符数组）<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String strc = new String(cArray);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //实例一个String对象 通过一个char数组构造字符串对象(字节数组，开始的数据，截得数据长度)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String strbIndex = new String(bArray, 1, 5);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //实例一个String对象 通过一个char数组构造字符串对象（字符数组，开始的数据，截得数据长度）<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String strcIndex = new String(cArray, 1, 2);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //实例一个String对象 通过一个StringBuffer对象构造字符串对象 <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String strbuff = new String(strbuf);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("实例一个无参String对象:&nbsp; "+str);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("实例一个带byte数组参数String对象:&nbsp; "+strb);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("实例一个带char数组参数String对象:&nbsp; "+strc);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("实例一个带byte数组参数String对象,截取从1开始截取，截5位:&nbsp; "+strbIndex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("实例一个带char数组参数String对象,截取从1开始截取，截2位:&nbsp; "+strcIndex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("实例一个带StringBuffer参数String对象:&nbsp; "+strbuff);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 如果是字节类型，将输出地址<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // System.out.println(by);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 如果是字符类型，将输出字符<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // System.out.println(c);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<img src ="http://www.blogjava.net/hefang/aggbug/324460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:10 <a href="http://www.blogjava.net/hefang/articles/324460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 连接Mysql(简单示例)</title><link>http://www.blogjava.net/hefang/articles/324459.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324459.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324459.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324459.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324459.html</trackback:ping><description><![CDATA[<p>package org.mysqljdbc;</p>
<p>import java.sql.Connection;<br />
import java.sql.DriverManager;<br />
import java.sql.ResultSet;<br />
import java.sql.SQLException;<br />
import java.sql.Statement;</p>
<p>public class Jdbc {<br />
&nbsp;/**<br />
&nbsp; * @param args<br />
&nbsp; */<br />
&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;ResultSet rs = null;<br />
&nbsp;&nbsp;Statement stmt = null;<br />
&nbsp;&nbsp;Connection conn = null;<br />
&nbsp;&nbsp;String driver = "org.gjt.mm.mysql.Driver";<br />
&nbsp;&nbsp;String url ="jdbc:mysql://localhost/mydata?user=root&amp;password=root&amp;useUnicode=true&amp;characterEncoding=8859_1";<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;//加载驱动<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;Class.forName(driver);<br />
&nbsp;&nbsp;&nbsp;conn = DriverManager.getConnection(url);<br />
&nbsp;&nbsp;&nbsp;stmt =&nbsp; (Statement) conn.createStatement();<br />
&nbsp;&nbsp;&nbsp;rs =stmt.executeQuery("select * from dept");<br />
&nbsp;&nbsp;&nbsp;while(rs.next())<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rs.getString("deptno"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rs.getString("dname"));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} catch (ClassNotFoundException e) {<br />
&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;} catch (SQLException e) {<br />
&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;} finally<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;try<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(rs != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(conn != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}<br />
</p>
<img src ="http://www.blogjava.net/hefang/aggbug/324459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:09 <a href="http://www.blogjava.net/hefang/articles/324459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中replace和replaceAll的区别（转）</title><link>http://www.blogjava.net/hefang/articles/324456.html</link><dc:creator>何方</dc:creator><author>何方</author><pubDate>Fri, 25 Jun 2010 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/hefang/articles/324456.html</guid><wfw:comment>http://www.blogjava.net/hefang/comments/324456.html</wfw:comment><comments>http://www.blogjava.net/hefang/articles/324456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hefang/comments/commentRss/324456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hefang/services/trackbacks/324456.html</trackback:ping><description><![CDATA[<span style="color: red">replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是: </span><br />
<br />
1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串); <br />
2)replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号; <br />
<br />
&nbsp;&nbsp;&nbsp; 相同点是都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,如果只想替换第一次出现的,可以使用 replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串; <br />
&nbsp;&nbsp;&nbsp; 另外,如果replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果是一样的,即这两者也支持字符串的操作; <br />
&nbsp;&nbsp;&nbsp; 还有一点注意:执行了替换操作后,源字符串的内容是没有发生改变的. <br />
<br />
举例如下: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String src = new String("ab43a2c43d"); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(src.replace("3","f"));=&gt;ab4f2c4fd. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(src.replace('3','f'));=&gt;ab4f2c4fd. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(src.replaceAll("\\d","f"));=&gt;abffafcffd. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(src.replaceAll("a","f"));=&gt;fb43fc23d. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(src.replaceFirst("\\d,"f"));=&gt;abf32c43d <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(src.replaceFirst("4","h"));=&gt;abh32c43d. <br />
<br />
<br />
如何将字符串中的"\"替换成"\\"： <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String msgIn; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String msgOut; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msgOut=msgIn.replaceAll("\\\\","\\\\\\\\"); <br />
原因： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '\'在java中是一个转义字符，所以需要用两个代表一个。例如System.out.println( "\\" ) ;只打印出一个"\"。但是'\'也是正则表达式中的转义字符（replaceAll 的参数就是正则表达式），需要用两个代表一个。所以：\\\\被java转换成\\,\\又被正则表达式转换成\。 <br />
同样 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CODE: \\\\\\\\ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java: \\\\ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Regex: \\ <br />
<br />
<br />
将字符串中的'/'替换成'\'的几种方式: <br />
<br />
msgOut= msgIn.replaceAll("/", "\\\\"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msgOut= msgIn.replace("/", "\\"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msgOut= msgIn.replace('/', '\\'); 
 <img src ="http://www.blogjava.net/hefang/aggbug/324456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hefang/" target="_blank">何方</a> 2010-06-25 17:04 <a href="http://www.blogjava.net/hefang/articles/324456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>