﻿<?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/jalion/category/23701.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 05 Jul 2007 23:35:55 GMT</lastBuildDate><pubDate>Thu, 05 Jul 2007 23:35:55 GMT</pubDate><ttl>60</ttl><item><title>关于JDK1.5中Integer的一点改动</title><link>http://www.blogjava.net/jalion/articles/127333.html</link><dc:creator>李桢</dc:creator><author>李桢</author><pubDate>Sun, 01 Jul 2007 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/jalion/articles/127333.html</guid><wfw:comment>http://www.blogjava.net/jalion/comments/127333.html</wfw:comment><comments>http://www.blogjava.net/jalion/articles/127333.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jalion/comments/commentRss/127333.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jalion/services/trackbacks/127333.html</trackback:ping><description><![CDATA[<p>int a=100;int b=100;</p>
<p>System.out.println(a==b);结果true</p>
<p>Integer c=new Integer(100);</p>
<p>Integer d=new Integer(100);</p>
<p>System.out.println(c==d);结果false;</p>
<p>以上都是JDK1.5版本以前的</p>
<p>新改动：</p>
<p><strong><font color=#ff0000>Integer aa=100;</font></strong></p>
<p><strong><font color=#ff0000>Integer bb=100;</font></strong></p>
<p><strong><font color=#ff0000>System.out.println(aa==bb);结果true;</font></strong></p>
<p><strong><font color=#ff0000>Integer aa=100;在以前的版本中是不允许的。但在JDK1.5后续版本中可以这样写。</font></strong></p>
<p><strong><font color=#ff0000>再看这两句：</font></strong></p>
<p><strong><font color=#0000ff>Integer aa=200;</font></strong></p>
<p><strong><font color=#0000ff>Integer bb=200;</font></strong></p>
<p><strong><font color=#0000ff>System.out.println(aa==bb);结果false;</font></strong></p>
<p><strong><font color=#0000ff>当数值范围是[-128,127]时，是直接从缓存中取，当在范围之外时，生成一个新对象。附上JDK源代码</font></strong></p>
<strong><font color=#0000ff>
<p><font color=#9933ff>&nbsp;private static class IntegerCache {<br>&nbsp;private IntegerCache(){}</font></p>
<p><font color=#9933ff>&nbsp;static final Integer cache[] = new Integer[-(-128) + 127 + 1];</font></p>
<p><font color=#9933ff>&nbsp;static {<br>&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; cache.length; i++)<br>&nbsp;&nbsp;cache[i] = new Integer(i - 128);<br>&nbsp;}<br>&nbsp;&nbsp;&nbsp; }</font></p>
<p><br><font color=#9933ff>&nbsp;&nbsp;&nbsp; public static Integer valueOf(int i) {<br>&nbsp;final int offset = 128;<br>&nbsp;if (i &gt;= -128 &amp;&amp; i &lt;= 127) { // must cache <br>&nbsp;&nbsp;&nbsp;&nbsp; return IntegerCache.cache[i + offset];<br>&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new Integer(i);<br>&nbsp;&nbsp;&nbsp; }</font></p>
<p>&#160;</p>
</font></strong><strong><font color=#ff0000></font></strong>&nbsp;
<img src ="http://www.blogjava.net/jalion/aggbug/127333.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jalion/" target="_blank">李桢</a> 2007-07-01 10:32 <a href="http://www.blogjava.net/jalion/articles/127333.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java. gif动画验证码的实现</title><link>http://www.blogjava.net/jalion/articles/127324.html</link><dc:creator>李桢</dc:creator><author>李桢</author><pubDate>Sun, 01 Jul 2007 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/jalion/articles/127324.html</guid><wfw:comment>http://www.blogjava.net/jalion/comments/127324.html</wfw:comment><comments>http://www.blogjava.net/jalion/articles/127324.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jalion/comments/commentRss/127324.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jalion/services/trackbacks/127324.html</trackback:ping><description><![CDATA[<p>废话少说，直奔主题。</p>
<p>目标：实现GIF动画格式的验证码。</p>
<p>效果图：<img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://118.img.pp.sohu.com/images/blog/2007/6/28/0/10/11406de6d10.jpg" border=0></p>
<p>说明：此GIF格式验证码有6个字符组成，共有6帧，单独每帧只有5个字符，每帧的每个字符的透明度不等，显示闪烁效果。也可以做成垂直位置变化的动画效果。 或者类似QQ的那样字体倾斜。</p>
<p>用到第三方类文件：一个老外写的。专门用来解GIF码的，</p>
<p>一共4个，类名：AnimatedGifEncoder,GifDecoder,LZWEncoder,NeuQuant;这几个类网上搜下应该有的。</p>
<p>就不贴了哈，有找不到的加我QQ 87388066，或者留信箱。BLOG没上传附件功能，比较郁闷。</p>
<p>下面贴下我的简单实现：</p>
<p><strong><font color=#0000ff>import jalion.giftools.AnimatedGifEncoder;</font></strong></p>
<p><strong><font color=#0000ff>import java.awt.AlphaComposite;<br>import java.awt.Color;<br>import java.awt.Font;<br>import java.awt.Graphics2D;<br>import java.awt.image.BufferedImage;<br>import java.io.BufferedOutputStream;<br>import java.io.DataOutputStream;<br>import java.io.FileNotFoundException;<br>import java.io.FileOutputStream;<br>import java.io.IOException;<br>import java.io.OutputStream;<br>import java.util.Random;</font></strong></p>
<p><strong><font color=#0000ff>import javax.servlet.http.HttpServletResponse;</font></strong></p>
<p><strong><font color=#0000ff>public class Test2 {<br>&nbsp;//定义验证码字符。去除了O和I等容易混淆的字母（也可写成）<br>&nbsp;String s[]={"A","B","C","D","E","F","G","H","G","K","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"<br>&nbsp;&nbsp;&nbsp; ,"a","b","c","d","e","f","g","h","i","j","k","m","n","p","q","r","s","t","u","v","w","x","y","z"};<br>&nbsp;//定义生成的验证码的宽度和高度<br>&nbsp;int width=160;<br>&nbsp;int height=30;<br>&nbsp;<br>&nbsp;public void myTest(OutputStream os)<br>&nbsp;{<br>&nbsp;&nbsp;//OutputStream os=null;</font></strong></p>
<p><strong><font color=#0000ff>&nbsp;&nbsp; //生成字符<br>&nbsp;&nbsp; AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1);<br>&nbsp;&nbsp; AnimatedGifEncoder agf=new AnimatedGifEncoder();</font></strong></p>
<p><strong><font color=#0000ff>&nbsp;&nbsp; agf.start(os);<br>&nbsp;&nbsp; agf.setQuality(10);<br>&nbsp;&nbsp; <br>&nbsp;&nbsp; agf.setDelay(100);<br>&nbsp;&nbsp; agf.setRepeat(0);<br>&nbsp;&nbsp; BufferedImage frame=null;<br>&nbsp;&nbsp; Graphics2D teg=null;<br>&nbsp;&nbsp;String rands[]=new String[6];<br>&nbsp;&nbsp; for(int i=0;i&lt;6;i++)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; rands[i]=s[this.randomInt(0, s.length)];<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp;//生成字体<br>&nbsp;&nbsp; Font&nbsp;&nbsp; font[]=new Font[6];<br>&nbsp;&nbsp; for(int i=0;i&lt;6;i++)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; font[i]=this.getFont();<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; //生成背景颜色<br>&nbsp;&nbsp; Color bgcolor=getRandColor(160, 200);<br>&nbsp;&nbsp; Color linecolor=getRandColor(200, 250);<br>&nbsp;&nbsp; Color fontcolor[]=new Color[6];<br>&nbsp;&nbsp; Random random=new Random();<br>&nbsp;&nbsp; for(int i=0;i&lt;6;i++)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; fontcolor[i]=new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110));<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; for(int i=0;i&lt;6;i++)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; frame=this.getImage(bgcolor,linecolor,fontcolor,rands,font,i);<br>&nbsp;&nbsp;&nbsp;agf.addFrame(frame);<br>&nbsp;&nbsp;&nbsp;frame.flush();<br>&nbsp;&nbsp; } <br>&nbsp;&nbsp; agf.finish();<br>&nbsp;}<br>&nbsp;private BufferedImage getImage(Color bgcolor,Color linecolor,Color[] fontcolor,String str[],Font[] font,int flag)<br>&nbsp;{<br>&nbsp;&nbsp;BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);<br>&nbsp;&nbsp;//或得图形上下文<br>&nbsp;&nbsp;Graphics2D g2d=image.createGraphics();<br>&nbsp;&nbsp;//利用指定颜色填充背景<br>&nbsp;&nbsp;g2d.setColor(bgcolor);<br>&nbsp;&nbsp;g2d.fillRect(0, 0, width, height);<br>&nbsp;&nbsp;//画背景线 4*4<br>&nbsp;&nbsp;g2d.setColor(linecolor);<br>&nbsp;&nbsp;for (int i = 0; i &lt; height/4; i++) {</font></strong></p>
<p><strong><font color=#0000ff>&nbsp;&nbsp;&nbsp;g2d.drawLine(0, i*4, width, i*4);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;for (int i = 0; i &lt;width/4; i++) {</font></strong></p>
<p><strong><font color=#0000ff>&nbsp;&nbsp;&nbsp;g2d.drawLine(i*4, 0, i*4, height);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f);<br>&nbsp;&nbsp;&nbsp;&nbsp; g2d.setComposite(ac);<br>&nbsp;&nbsp;&nbsp;&nbsp; g2d.setFont(new Font("隶书", Font.ITALIC+Font.BOLD, 26));<br>&nbsp;&nbsp;&nbsp; g2d.setColor(Color.red);<br>&nbsp;&nbsp;g2d.drawString("jalion制作", 19, 25);<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;//以下生成验证码 //透明度从0 循环到1 步长为0.2 。一共6个字母<br>&nbsp;&nbsp;AlphaComposite ac3 =null;<br>&nbsp;&nbsp;for(int i=0;i&lt;str.length;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;g2d.setFont(font[i]);<br>&nbsp;&nbsp;&nbsp;ac3 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, getAlpha(flag, i));<br>&nbsp;&nbsp;&nbsp; g2d.setComposite(ac3);<br>&nbsp;&nbsp;&nbsp;g2d.setColor(fontcolor[i]);<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;g2d.drawString(str[i], 25 * i + 8, 25);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;g2d.dispose();<br>&nbsp;&nbsp;return image;<br>&nbsp;}<br>&nbsp;<br>&nbsp;/**<br>&nbsp; * <br>&nbsp; * @作者:李桢<br>&nbsp; * @日期:2007-6-27<br>&nbsp; * @参数：<br>&nbsp; * @返回值:<br>&nbsp; * @描述:获得随机字体<br>&nbsp; */<br>&nbsp;private Font getFont()<br>&nbsp;{<br>&nbsp;&nbsp;//获得随机字体;<br>//设置font :字体名称:Monotype Corsiva 华文彩云 方正舒体 华文行楷,隶书<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;Random s=new Random();<br>&nbsp;&nbsp;//int i=s.nextInt(10);<br>&nbsp;&nbsp;int i=7;<br>&nbsp;&nbsp;if(i%2==0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;return new Font("Monotype Corsiva", Font.BOLD, 28);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if(i%3==0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;return new Font("方正舒体", Font.BOLD, 28);<br>&nbsp;&nbsp;}<br>//&nbsp;&nbsp;else if(i%5==0)<br>//&nbsp;&nbsp;{<br>//&nbsp;&nbsp;&nbsp;return new Font("华文行楷", Font.BOLD, 28);<br>//&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if(i%7==0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;return new Font("隶书", Font.BOLD, 28);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;return new Font("方正舒体", Font.BOLD, 28);<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;<br>&nbsp;<br>&nbsp;/**<br>&nbsp; * <br>&nbsp; * @作者:李桢<br>&nbsp; * @日期:2007-6-27<br>&nbsp; * @参数：<br>&nbsp; * @返回值:<br>&nbsp; * @描述:获得循环透明度，从0到1 步长为0.2<br>&nbsp; */<br>&nbsp;private float getAlpha(int i,int j)<br>&nbsp;{<br>&nbsp;&nbsp;if((i+j)&gt;5)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;return ((i+j)*0.2f-1.2f);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;return (i+j)*0.2f;<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;/**<br>&nbsp; * <br>&nbsp; * @作者:李桢<br>&nbsp; * @日期:2007-6-27<br>&nbsp; * @参数：<br>&nbsp; * @返回值:<br>&nbsp; * @描述:获得随机色<br>&nbsp; */<br>&nbsp;private Color getRandColor(int fc, int bc) {// 给定范围获得随机颜色<br>&nbsp;&nbsp;Random random = new Random();<br>&nbsp;&nbsp;if (fc &gt; 255)<br>&nbsp;&nbsp;&nbsp;fc = 255;<br>&nbsp;&nbsp;if (bc &gt; 255)<br>&nbsp;&nbsp;&nbsp;bc = 255;<br>&nbsp;&nbsp;int r = fc + random.nextInt(bc - fc);<br>&nbsp;&nbsp;int g = fc + random.nextInt(bc - fc);<br>&nbsp;&nbsp;int b = fc + random.nextInt(bc - fc);<br>&nbsp;&nbsp;return new Color(r, g, b);<br>&nbsp;}<br>&nbsp; /**<br>&nbsp;&nbsp; * 返回[from,to)之间的一个随机整数<br>&nbsp;&nbsp; * <br>&nbsp;&nbsp; * @param from 起始值<br>&nbsp;&nbsp; * @param to 结束值<br>&nbsp;&nbsp; * @return&nbsp; [from,to)之间的一个随机整数<br>&nbsp;&nbsp; */<br>&nbsp; private int randomInt(int from,int to){<br>&nbsp;&nbsp; Random r = new Random();<br>&nbsp;&nbsp; return from+r.nextInt(to-from);<br>&nbsp; }<br>&nbsp; public static void main(String args[])<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;Test2 tt=new Test2();<br>&nbsp;&nbsp;&nbsp;//tt.myTest();<br>&nbsp;&nbsp;}<br>}<br></font></strong></p>
<p>servlet：</p>
<p><font color=#ff0000><strong>public class yanzhengma extends HttpServlet {<br>&nbsp;// Initialize global variables<br>&nbsp;public void init() throws ServletException {<br>&nbsp;}</strong></font></p>
<p><font color=#ff0000><strong>&nbsp;public void doGet(HttpServletRequest request, HttpServletResponse response)<br>&nbsp;&nbsp;&nbsp;throws ServletException, IOException {<br>&nbsp;&nbsp;response.setContentType("image/gif");<br>&nbsp;&nbsp;response.setHeader("Pragma", "No-cache");<br>&nbsp;&nbsp;response.setHeader("Cache-Control", "no-cache");<br>&nbsp;&nbsp;response.setDateHeader("Expires", 0);</strong></font></p>
<p><font color=#ff0000><strong>&nbsp;&nbsp;new Test2().myTest(response.getOutputStream());</strong></font></p>
<p><font color=#ff0000><strong>&nbsp;}</strong></font></p>
<p><font color=#ff0000><strong>&nbsp;public void doPost(HttpServletRequest request, HttpServletResponse response)<br>&nbsp;&nbsp;&nbsp;throws ServletException, IOException {<br>&nbsp;&nbsp;doGet(request, response);<br>&nbsp;}</strong></font></p>
<p><font color=#ff0000><strong>&nbsp;// 这是POST，和GET差不多，不过HTTP有POST和GET两种请求方式罢了<br>&nbsp;// Clean up resources<br>&nbsp;public void destroy() {</strong></font></p>
<p><font color=#ff0000><strong>&nbsp;}</strong></font></p>
<p><br><font color=#ff0000><strong>}<br></strong></font></p>
<p>web.xml</p>
<p><font color=#9900ff><strong>&nbsp;&nbsp;&nbsp; &lt;!-- 验证码ｓｅｒｖｌｅｔ　开始 --&gt;<br>&nbsp;&nbsp;&lt;servlet&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;yanzhengma&lt;/servlet-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;jalion.image.yanzhengma&lt;/servlet-class&gt;<br>&nbsp;&lt;/servlet&gt;</strong></font></p>
<p><font color=#9900ff><strong>&nbsp;<br>&nbsp;&lt;servlet-mapping&gt;<br>&nbsp;&nbsp; &lt;servlet-name&gt;yanzhengma&lt;/servlet-name&gt;<br>&nbsp;&nbsp; &lt;url-pattern&gt;/servlet/yanzhengma&lt;/url-pattern&gt;<br>&nbsp;&lt;/servlet-mapping&gt;</strong></font></p>
<p><font color=#9900ff><strong>&nbsp;&lt;!-- 验证码ｓｅｒｖｌｅｔ　结束 --&gt;&nbsp; <br></strong></font>&nbsp; </p>
<p>页面中调用</p>
<p><font color=#3300ff><strong>&nbsp;&lt;img src="servlet/yanzhengma"/&gt;</strong></font></p>
<p><strong><font color=#3300ff>好了到此为止了，困了。。。，</font></strong></p>
<p><strong><font color=#3300ff>再生成验证码字符串的地方把验证码加到cookie或者session里。</font></strong></p>
<p><strong><font color=#3300ff>好像outputstream没有关闭。。标记下，改天再说 需要改动老外那个类。困了 睡觉了。</font></strong></p>
<img src ="http://www.blogjava.net/jalion/aggbug/127324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jalion/" target="_blank">李桢</a> 2007-07-01 10:16 <a href="http://www.blogjava.net/jalion/articles/127324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>junit4的简单注释</title><link>http://www.blogjava.net/jalion/articles/127323.html</link><dc:creator>李桢</dc:creator><author>李桢</author><pubDate>Sun, 01 Jul 2007 02:15:00 GMT</pubDate><guid>http://www.blogjava.net/jalion/articles/127323.html</guid><wfw:comment>http://www.blogjava.net/jalion/comments/127323.html</wfw:comment><comments>http://www.blogjava.net/jalion/articles/127323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jalion/comments/commentRss/127323.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jalion/services/trackbacks/127323.html</trackback:ping><description><![CDATA[<p>package jalion.uit;</p>
<p>import static org.junit.Assert.*; <font color=#ff0000><strong>//JDK5的新特性,静态引用,调用方法时,只写方法名就行.例如下文的assertEquals();</strong></font></p>
<p>import org.junit.After;<br>import org.junit.AfterClass;<br>import org.junit.Before;<br>import org.junit.BeforeClass;<br>import org.junit.Test;<br>import org.junit.Ignore;<br>import org.junit.internal.runners.TestClassRunner;<br>import org.junit.runner.RunWith;</p>
<p><font color=#ff0000><strong>/*<br>&nbsp;* @RunWith(Parameterized.class) 类标识<br>&nbsp;*&nbsp; @Parameters 方法标识.参数<br>*/</strong></font><br>@RunWith(TestClassRunner.class)<br>public class CalculatorTest {</p>
<p>&nbsp;@BeforeClass<br>&nbsp;public static void setUpBeforeClass() throws Exception {<br>&nbsp;&nbsp;System.out.println("类初始化时执行一次,必须是public static");<br>&nbsp;}</p>
<p>&nbsp;@AfterClass<br>&nbsp;public static void tearDownAfterClass() throws Exception {<br>&nbsp;&nbsp;System.out.println("运行结束时执行一次,必须是public static ");<br>&nbsp;}</p>
<p>&nbsp;@Before<br>&nbsp;public void setUp() throws Exception {<br>&nbsp;&nbsp;System.out.println("每次执行一个测试方法之前时,执行一次");<br>&nbsp;}</p>
<p>&nbsp;@After<br>&nbsp;public void tearDown() throws Exception {<br>&nbsp;&nbsp;System.out.println("每次执行完一个测试方法之后,执行一次");<br>&nbsp;}</p>
<p>&nbsp;@Test<br>&nbsp;public void testAdd() {<br>&nbsp;&nbsp;System.out.println("这是一个测试方法,用@Test标识, @Test(timeout = 1000) 表示执行1000毫秒,对于循环用");<br>&nbsp;&nbsp;assertEquals(5,5);<strong><font color=#ff0000>//查看预期结果和测试结果是否相同 是Assert的方法<br></font></strong>&nbsp;}</p>
<p>&nbsp;@Ignore("暂时忽略")<br>&nbsp;@Test<br>&nbsp;public void testSubstract() {<br>&nbsp;&nbsp;System.out.println("这个是暂时忽略的");<br>&nbsp;&nbsp;assertEquals(5,5);<br>&nbsp;}</p>
<p>&nbsp;@Test(expected = ArithmeticException.class)<br>&nbsp;public void testDivide() {<br>&nbsp;&nbsp;System.out.println("异常测试,是否抛出指定异常");<br>&nbsp;&nbsp;assertEquals(5,6/0);<br>&nbsp;}</p>
<p>}</p>
<p><font style="BACKGROUND-COLOR: #993333"><strong>第二个类</strong></font></p>
<p>package jalion.uit;<br>import org.junit.runner.RunWith;<br>import org.junit.runners.Suite;</p>
<p>@RunWith(Suite.class)<font color=#ff0000><strong>//runner 运行器</strong></font><br>@Suite.SuiteClasses({&nbsp; <font color=#ff0000><strong>//标注为打包测试类 参数为想要测试的类<br></strong></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CalculatorTest.class, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font color=#ff0000> //CalculatorTest2.class</font></strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; })<br>public class AllTests {<br>}</p>
<p><br>&nbsp;</p>
<img src ="http://www.blogjava.net/jalion/aggbug/127323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jalion/" target="_blank">李桢</a> 2007-07-01 10:15 <a href="http://www.blogjava.net/jalion/articles/127323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中的clone 方法</title><link>http://www.blogjava.net/jalion/articles/127319.html</link><dc:creator>李桢</dc:creator><author>李桢</author><pubDate>Sun, 01 Jul 2007 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/jalion/articles/127319.html</guid><wfw:comment>http://www.blogjava.net/jalion/comments/127319.html</wfw:comment><comments>http://www.blogjava.net/jalion/articles/127319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jalion/comments/commentRss/127319.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jalion/services/trackbacks/127319.html</trackback:ping><description><![CDATA[<p>java的序列化和反序列化;</p>
<p>定义:序列化是指把一个对象写到一个输出流中;对象的反序列化是指从一个输入流中读取一个对象.只要实现了java.io.Serializable(标识接口)接口的对象才能被序列化和反序列化;</p>
<p>序列化的步骤:</p>
<p>1).创建一个对象输出流,它可以包装一个其他类型的输出流,比如文件输出流.</p>
<p>ObjectOutputStream out=new ObjectOutputStream(new fileOutputStream("c:/a.obj"));</p>
<p>2).通过对象输出流的writeObject()方法写对象</p>
<p>out.writeObject("hello");</p>
<p>out.close;</p>
<p>以上代码将一个String 对象保存到文件中.</p>
<p>对象的反序列化步骤:</p>
<p>1).创建一个对象输入流,他可以包装一个其他类型的输入流,例如文件输入流.</p>
<p>&nbsp;ObjectInputStream in=new ObjectInputStream(new FileInputStream("c:/a.obj"));</p>
<p>2).通过对象输入流的readObject()方法读取对象.</p>
<p>&nbsp;String obj=(String)in.readObject();</p>
<p>&nbsp;in.close();</p>
<p><font color=#9900cc><strong>当写入多个对象时,为了能正确读出数据,必须保证向输出流写对象的顺序与从输入流读对象的顺序相同.</strong></font></p>
<p>一个简单的序列化 反序列化的例子:</p>
<p>=======================================================================================</p>
<p><font color=#ff0000><strong>Customer类(实现了Serializable标识接口)</strong></font></p>
<p>import java.io.Serializable;<br>import java.util.Date;</p>
<p>public class Customer implements Serializable {<br>&nbsp;private String name;<br>&nbsp;private Date birthday;<br>&nbsp;private <font color=#0000ff><strong>transient </strong></font>String password; <strong><font color=#00ff00>注释①<br></font></strong>&nbsp;public String getPassword() {<br>&nbsp;&nbsp;return password;<br>&nbsp;}<br>&nbsp;public void setPassword(String password) {<br>&nbsp;&nbsp;this.password = password;<br>&nbsp;}<br>&nbsp;public Customer(String name,String password)<br>&nbsp;{<br>&nbsp;&nbsp;this.name=name;<br>&nbsp;&nbsp;this.birthday=new Date();<br>&nbsp;&nbsp;this.password=password;<br>&nbsp;}<br>&nbsp;public Date getBirthday() {<br>&nbsp;&nbsp;return birthday;<br>&nbsp;}<br>&nbsp;public void setBirthday(Date birthday) {<br>&nbsp;&nbsp;this.birthday = birthday;<br>&nbsp;}<br>&nbsp;public String getName() {<br>&nbsp;&nbsp;return name;<br>&nbsp;}<br>&nbsp;public void setName(String name) {<br>&nbsp;&nbsp;this.name = name;<br>&nbsp;<br>&nbsp;}</p>
<p>}<br><font color=#ff0000><strong>ObjectSaver类:执行序列化,将类写到文件中</strong></font></p>
<p>import java.io.FileInputStream;<br>import java.io.FileNotFoundException;<br>import java.io.FileOutputStream;<br>import java.io.IOException;<br>import java.io.ObjectInputStream;<br>import java.io.ObjectOutputStream;<br>import java.util.Date;</p>
<p>public class ObjectSaver&nbsp; <br>{<br>&nbsp;public ObjectSaver()<br>&nbsp;{<br>&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("c:/a.obj"));<br>&nbsp;&nbsp;&nbsp;String obj1="序列化对象";<br>&nbsp;&nbsp;&nbsp;Date obj2=new Date();<br>&nbsp;&nbsp;&nbsp;Customer obj3=new Customer("jalion","123456");<br>&nbsp;&nbsp;&nbsp;//序列化对象<br>&nbsp;&nbsp;&nbsp;out.writeObject(obj1);<br>&nbsp;&nbsp;&nbsp;out.writeObject(obj2);<br>&nbsp;&nbsp;&nbsp;out.writeObject(obj3);<br>&nbsp;&nbsp;&nbsp;out.close();<br>&nbsp;&nbsp;&nbsp;System.out.println("需要序列化的对象:"+obj1);<br>&nbsp;&nbsp;&nbsp;System.out.println("需要序列化的对象:"+obj2);<br>&nbsp;&nbsp;&nbsp;System.out.println("需要序列化的对象:"+obj3.getName()+"生日"+obj3.getBirthday()+"密码:"+obj3.getPassword());</p>
<p>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;} catch (FileNotFoundException e) {<br>&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;} catch (IOException e) {<br>&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;public static void main(String args[])<br>&nbsp;{<br>&nbsp;&nbsp;new ObjectSaver();<br>&nbsp;}<br>}<br><font color=#ff0000><strong>ObjectRead:反序列化类 从文件中读取对象</strong></font></p>
<p><br>import java.io.FileInputStream;<br>import java.io.FileNotFoundException;<br>import java.io.IOException;<br>import java.io.ObjectInputStream;<br>import java.util.Date;</p>
<p>public class ObjectRead {<br>&nbsp;public static void main(String args[])<br>&nbsp;{<br>//&nbsp;&nbsp;反序列化对象<br>&nbsp;&nbsp;ObjectInputStream in;<br>&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;in = new ObjectInputStream(new FileInputStream("c:/a.obj"));<br>&nbsp;&nbsp;&nbsp;String obj11=(String)in.readObject();<br>&nbsp;&nbsp;&nbsp;Date obj22=(Date)in.readObject();<br>&nbsp;&nbsp;&nbsp;Customer obj33=(Customer)in.readObject();<br>&nbsp;&nbsp;&nbsp;System.out.println("反序列化的对象:"+obj11);<br>&nbsp;&nbsp;&nbsp;System.out.println("反序列化的对象:"+obj22);<br>&nbsp;&nbsp;&nbsp;System.out.println("反序列化的对象:"+obj33.getName()+"生日"+obj33.getBirthday()+"密码:"+obj33.getPassword());<br>&nbsp;&nbsp;&nbsp;in.close();<br>&nbsp;&nbsp;} catch (FileNotFoundException e) {<br>&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;} catch (IOException e) {<br>&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;} catch (ClassNotFoundException e) {<br>&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;}</p>
<p>}</p>
<p>说明:由于String和Date类都实现了Serializable接口,所以可以序列化,要进行序列化的类包括其属性中引用的类必须全部实现Serializable接口才能序列化,否则将会抛出java.io.NotSerializableException异常.</p>
<p>========================================================================================</p>
<p><strong><font color=#00ff00>注释①</font><font color=#ffffff><font color=#6699ff>在类Customer中,有个属性password,由于将类序列化保存在文件中,可以通过网络传输,当password比较重要时,很容易通过读取文件或者拦截网络数据来得到password,所以应当禁止对这种属性序列化.解决办法就是将这个属性用transient修饰,例如例子中的注释处.当属性有transient修饰时,不进行序列化.</font></font></strong></p>
<p><strong><font color=#0000ff><font style="BACKGROUND-COLOR: #0000ff"><font color=#000000><font style="BACKGROUND-COLOR: #ffffff">ObjectRead运行结果如下:</font></font></font></font></strong></p>
<p><strong><font color=#0000ff><font style="BACKGROUND-COLOR: #0000ff"><font color=#000000><font style="BACKGROUND-COLOR: #ffffff">当有transient修饰时:</font></font></font></font></strong></p>
<p><font style="BACKGROUND-COLOR: #ffffff" color=#33ff99>反序列化的对象:序列化对象<br>反序列化的对象:Tue May 08 10:56:40 CST 2007<br>反序列化的对象:jalion生日Tue May 08 10:56:40 CST 2007密码:null</font></p>
<p><strong><font color=#0000ff><font style="BACKGROUND-COLOR: #0000ff"><font color=#000000><font style="BACKGROUND-COLOR: #ffffff">当没有transient修饰时:</font></font></font></font></strong></p>
<p><font color=#0000ff><font style="BACKGROUND-COLOR: #0000ff"><font color=#000000><font style="BACKGROUND-COLOR: #ffffff" color=#33ff99>反序列化的对象:序列化对象<br>反序列化的对象:Tue May 08 10:56:40 CST 2007<br>反序列化的对象:jalion生日Tue May 08 10:56:40 CST 2007密码:123456</font></font></font></font></p>
<p><font color=#0000ff><font style="BACKGROUND-COLOR: #0000ff"><font color=#000000><font style="BACKGROUND-COLOR: #ffffff" color=#0000ff><strong>&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;</strong></font></font></font></font></p>
<p><font color=#0000ff><font style="BACKGROUND-COLOR: #0000ff"><font color=#000000><strong><font style="BACKGROUND-COLOR: #ffffff" color=#0000ff>除了用以上方案,来保证传输过程中的安全,还可以用通过进一步控制序列化和反序列化的方式,来达到将password加密或其他方式来实现序列化.</font></strong></font></font></font></p>
<p><font color=#0000ff><font color=#000000><strong><font style="BACKGROUND-COLOR: #ffffff" color=#0000ff>可以在Costumer类中提供一个readObject()和writeObject()方法,当ObjectOutputStream对一个对象序列化时,如果该对象具有writeObject()方法,那么就会执行这一方法,否则就按默认的方式序列化,在writeObject()方法中,可以调用defaultWriteObject()方法,使得对象输出流执行默认的序列化操作.反序列化同理.在修改后的Costumer类中,提供了readObject()和writeObject()方法,使得transient类型的password属性能够进行特殊的序列化</font></strong></font></font><font color=#0000ff><font style="BACKGROUND-COLOR: #0000ff"><font color=#000000><strong></strong></font></font></font></p>
<p><font style="BACKGROUND-COLOR: #0000ff"><strong><font style="BACKGROUND-COLOR: #ffffff" color=#ff0000><font color=#33ff00>①</font>private void writeObject(ObjectOutputStream stream){}</font></strong></font></p>
<p><font color=#0000ff><font style="BACKGROUND-COLOR: #0000ff"><font color=#000000><strong><font style="BACKGROUND-COLOR: #ffffff" color=#ff0000><font color=#33ff00>②</font>private void readObject (ObjectInputStream stream) {}</font></strong></font></font></font></p>
<p><font color=#0000ff><font style="BACKGROUND-COLOR: #0000ff"><font color=#000000><strong><font style="BACKGROUND-COLOR: #ffffff" color=#0000ff>以上两个方法并不是在Serializable接口中实现的.如果要进一步控制序列化的方式,就可以实现这两个方法,方法名必须与方法<font style="BACKGROUND-COLOR: #0000ff"><strong><font style="BACKGROUND-COLOR: #ffffff" color=#ff0000><font color=#33ff00>①<font color=#0000ff><font style="BACKGROUND-COLOR: #0000ff"><font color=#000000><strong><font style="BACKGROUND-COLOR: #ffffff" color=#ff0000><font color=#33ff00>②</font></font></strong></font></font></font></font></font></strong></font>完全一致.</font></strong></font></font></font></p>
<p><strong><font color=#0000ff>=========================================================================</font></strong></p>
<p><strong><font color=#0000ff>修改后的Customer类</font></strong></p>
<p>import java.io.IOException;<br>import java.io.ObjectInputStream;<br>import java.io.ObjectOutputStream;<br>import java.io.Serializable;<br>import java.util.Date;</p>
<p>public class Customer implements Serializable {<br>&nbsp;private String name;<br>&nbsp;private Date birthday;<br>&nbsp;private transient String password;</p>
<p>&nbsp;public String getPassword() {<br>&nbsp;&nbsp;return password;<br>&nbsp;}<br>&nbsp;public void setPassword(String password) {<br>&nbsp;&nbsp;this.password = password;<br>&nbsp;}<br>&nbsp;public Customer(String name,String password)<br>&nbsp;{<br>&nbsp;&nbsp;this.name=name;<br>&nbsp;&nbsp;this.birthday=new Date();<br>&nbsp;&nbsp;this.password=password;<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;public Date getBirthday() {<br>&nbsp;&nbsp;return birthday;<br>&nbsp;}<br>&nbsp;public void setBirthday(Date birthday) {<br>&nbsp;&nbsp;this.birthday = birthday;<br>&nbsp;}<br>&nbsp;public String getName() {<br>&nbsp;&nbsp;return name;<br>&nbsp;}<br>&nbsp;public void setName(String name) {<br>&nbsp;&nbsp;this.name = name;<br>&nbsp;<br>&nbsp;}<br>&nbsp;private void writeObject(ObjectOutputStream stream)<br>&nbsp;{<br>&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;stream.defaultWriteObject();//先按默认的方式序列化<br>&nbsp;&nbsp;&nbsp;stream.writeObject(jiami(password));<br>&nbsp;&nbsp;} catch (Exception e) {<br>&nbsp;&nbsp;&nbsp;// TODO 自动生成 catch 块<br>&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;private void readObject(ObjectInputStream stream)<br>&nbsp;{<br>&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;stream.defaultReadObject();//先按默认的方式反序列化<br>&nbsp;&nbsp;&nbsp;password=jiemi((String)stream.readObject());<br>&nbsp;&nbsp;} catch (Exception e) {<br>&nbsp;&nbsp;&nbsp;// TODO 自动生成 catch 块<br>&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;} <br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;private String jiami(String password) //加密解密示意<br>&nbsp;{<br>&nbsp;&nbsp;return "gthgthg"+password;<br>&nbsp;}<br>&nbsp;private String jiemi(String password) //解密示意<br>&nbsp;{<br>&nbsp;&nbsp;String s=password.substring(7,password.length());<br>&nbsp;&nbsp;return s;<br>&nbsp;}</p>
<p>}<br></p>
<img src ="http://www.blogjava.net/jalion/aggbug/127319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jalion/" target="_blank">李桢</a> 2007-07-01 10:08 <a href="http://www.blogjava.net/jalion/articles/127319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对String s=new String("ssss");到底生成了几个对象的测试结果：</title><link>http://www.blogjava.net/jalion/articles/127317.html</link><dc:creator>李桢</dc:creator><author>李桢</author><pubDate>Sun, 01 Jul 2007 02:06:00 GMT</pubDate><guid>http://www.blogjava.net/jalion/articles/127317.html</guid><wfw:comment>http://www.blogjava.net/jalion/comments/127317.html</wfw:comment><comments>http://www.blogjava.net/jalion/articles/127317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jalion/comments/commentRss/127317.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jalion/services/trackbacks/127317.html</trackback:ping><description><![CDATA[<p>在CSDN上看以个帖子，String s=new String("sss");到底生成了几个对象？类似的帖子看过多次，答案也多种多样。实在是糊涂了，不得已利用JPROFILES对String 做了一系列的测试，结果如下：</p>
<table cellSpacing=1 cellPadding=1 border=1>
    <tbody>
        <tr>
            <td bgColor=#ffff99><strong>代码</strong></td>
            <td bgColor=#ffff99><strong>实例个数：</strong></td>
            <td bgColor=#ffff99><strong>大小 bytes </strong></td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2><span>String s="jalion";</span></td>
            <td bgColor=#ccffcc>char[]:1</td>
            <td bgColor=#ccffcc>24</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:1</td>
            <td bgColor=#ffccff>24</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2><span>String s=new String(); </span></td>
            <td bgColor=#ccffcc>char[]:1</td>
            <td bgColor=#ccffcc>16</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:1</td>
            <td bgColor=#ffccff>24</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2><span>String s; </span></td>
            <td bgColor=#ccffcc>char[]:0</td>
            <td bgColor=#ccffcc>0</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:0</td>
            <td bgColor=#ffccff>0</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2><span>new String("jalion"); </span></td>
            <td bgColor=#ccffcc>char[]:1</td>
            <td bgColor=#ccffcc>24</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:2</td>
            <td bgColor=#ffccff>48</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2><span>new String(); </span></td>
            <td bgColor=#ccffcc>char[]:1</td>
            <td bgColor=#ccffcc>16</td>
        </tr>
        <tr>
            <td bgColor=#ffccff height=20>String:1</td>
            <td bgColor=#ffccff>24</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2><span>String s=new String("jalion"); </span></td>
            <td bgColor=#ccffcc><span>char[]:1</span></td>
            <td bgColor=#ccffcc><span>24</span></td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:2</td>
            <td bgColor=#ffccff>48</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2><span>String s=new String(new char[]{'j','a','l','i','o','n'}); </span></td>
            <td bgColor=#ccffcc>char[]:2</td>
            <td bgColor=#ccffcc>48</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:1</td>
            <td bgColor=#ffccff>24</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2><span>char c[]=new char[]{'j','a','l','i','o','n'};<br>String s=new String(c);</span></td>
            <td bgColor=#ccffcc>char[]:2</td>
            <td bgColor=#ccffcc>48</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:1</td>
            <td bgColor=#ffccff>24</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2><span>String s="jalion"+"jalion";</span></td>
            <td bgColor=#ccffcc>char[]:1</td>
            <td bgColor=#ccffcc>40</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:1</td>
            <td bgColor=#ffccff>24</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2>
            <p>new String("");</p>
            </td>
            <td bgColor=#ccffcc>char[]:0</td>
            <td bgColor=#ccffcc>0</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:1</td>
            <td bgColor=#ffccff>24</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2>
            <p>char c[]=new new char[]{'j','a','l','i','o','n'}</p>
            </td>
            <td bgColor=#ccffcc>char[]:1</td>
            <td bgColor=#ccffcc>24</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:0</td>
            <td bgColor=#ffccff>0</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2>
            <p>String s=new String(&#8220;jalion&#8221;)+&#8221;jalion&#8221;;</p>
            </td>
            <td bgColor=#ccffcc>char[]:7</td>
            <td bgColor=#ccffcc>376</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:7</td>
            <td bgColor=#ffccff>168</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2><span>String s=&#8221;jalion&#8221;+new String(&#8220;jalion&#8221;);</span></td>
            <td bgColor=#ccffcc>char[]:7</td>
            <td bgColor=#ccffcc>376</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:7</td>
            <td bgColor=#ffccff>168</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2><span>String s=new String(&#8220;jalion&#8221;)+new String(&#8220;jalion&#8221;);</span></td>
            <td bgColor=#ccffcc>char[]:7</td>
            <td bgColor=#ccffcc>376</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:8</td>
            <td bgColor=#ffccff>192</td>
        </tr>
        <tr>
            <td bgColor=#ffcc00 rowSpan=2>
            <p align=left>String s="jalion"; <br>String y=new String("jalion");</p>
            </td>
            <td bgColor=#ccffcc>char[]:1</td>
            <td bgColor=#ccffcc>24</td>
        </tr>
        <tr>
            <td bgColor=#ffccff>String:2</td>
            <td bgColor=#ffccff>48</td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>结论：请等待</p>
<img src ="http://www.blogjava.net/jalion/aggbug/127317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jalion/" target="_blank">李桢</a> 2007-07-01 10:06 <a href="http://www.blogjava.net/jalion/articles/127317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浮点数精度，有效数字 备忘</title><link>http://www.blogjava.net/jalion/articles/127316.html</link><dc:creator>李桢</dc:creator><author>李桢</author><pubDate>Sun, 01 Jul 2007 02:05:00 GMT</pubDate><guid>http://www.blogjava.net/jalion/articles/127316.html</guid><wfw:comment>http://www.blogjava.net/jalion/comments/127316.html</wfw:comment><comments>http://www.blogjava.net/jalion/articles/127316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jalion/comments/commentRss/127316.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jalion/services/trackbacks/127316.html</trackback:ping><description><![CDATA[<p>1,保留小数点后2位数字。</p>
<p>&nbsp; DecimalFormat df = new DecimalFormat("#.##");</p>
<p>&nbsp; String&nbsp; result=df.format(123456.789);</p>
<p>&nbsp; 结果：result="123456.79"</p>
<p>&nbsp;</p>
<p>2 ，格式化为百分数</p>
<p>NumberFormat nf = NumberFormat.getPercentInstance();</p>
<p>String result=nf.format(0.89);</p>
<p>&nbsp; 结果:result="89%"</p>
<p><br>&nbsp;//得到宽度（小数形式，小数点后四位）<br>&nbsp;DecimalFormat geshi1 = new DecimalFormat("#.####");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NumberFormat nf = NumberFormat.getPercentInstance();<br>&nbsp;nf.setMaximumFractionDigits(2); <br>&nbsp;nf.setMinimumFractionDigits(2); <br>&nbsp;kuan=nf.format(Integer.parseInt(piaoshu)/Float.parseFloat(sumvotecount));<br></p>
<img src ="http://www.blogjava.net/jalion/aggbug/127316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jalion/" target="_blank">李桢</a> 2007-07-01 10:05 <a href="http://www.blogjava.net/jalion/articles/127316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中的日期操作 备忘</title><link>http://www.blogjava.net/jalion/articles/127315.html</link><dc:creator>李桢</dc:creator><author>李桢</author><pubDate>Sun, 01 Jul 2007 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/jalion/articles/127315.html</guid><wfw:comment>http://www.blogjava.net/jalion/comments/127315.html</wfw:comment><comments>http://www.blogjava.net/jalion/articles/127315.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jalion/comments/commentRss/127315.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jalion/services/trackbacks/127315.html</trackback:ping><description><![CDATA[<p>Calendar datea = Calendar.getInstance();</p>
<p>//以上代码得到当前的时间的对象</p>
<p>datea.set(Calendar.DAY_OF_MONTH, datea.get(Calendar.DAY_OF_MONTH)+300);</p>
<p>//修改日期，在当前日期基础上加上300天，只需得到你想要的日期就OK了，一切都由Calendar搞定</p>
<img src ="http://www.blogjava.net/jalion/aggbug/127315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jalion/" target="_blank">李桢</a> 2007-07-01 10:04 <a href="http://www.blogjava.net/jalion/articles/127315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java设置图片透明度</title><link>http://www.blogjava.net/jalion/articles/127314.html</link><dc:creator>李桢</dc:creator><author>李桢</author><pubDate>Sun, 01 Jul 2007 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/jalion/articles/127314.html</guid><wfw:comment>http://www.blogjava.net/jalion/comments/127314.html</wfw:comment><comments>http://www.blogjava.net/jalion/articles/127314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jalion/comments/commentRss/127314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jalion/services/trackbacks/127314.html</trackback:ping><description><![CDATA[<p>import java.awt.AlphaComposite;<br>import java.awt.Color;<br>import java.awt.Font;<br>import java.awt.Graphics2D;<br>import java.awt.Image;<br>import java.awt.image.BufferedImage;<br>import java.io.FileOutputStream;</p>
<p>import javax.imageio.ImageIO;</p>
<p>public class Alpha {</p>
<p>&nbsp;/**<br>&nbsp; * @param args<br>&nbsp; */<br>&nbsp;public Alpha()<br>&nbsp;{<br>&nbsp;&nbsp;//创建一个600*400的图象<br>&nbsp;&nbsp;BufferedImage image=new BufferedImage(600,400,BufferedImage.TYPE_INT_RGB);<br>&nbsp;&nbsp;//创建java2D对象<br>&nbsp;&nbsp;Graphics2D g2d=image.createGraphics();<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;//g2d.setBackground(Color.PINK);<br>//&nbsp;&nbsp;填充背景<br>&nbsp;&nbsp;g2d.setColor(Color.yellow);<br>&nbsp;&nbsp;g2d.fillRect(0, 0, 600, 400);<br>&nbsp;&nbsp;<br>&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;<br>&nbsp;&nbsp; // 创建AlphaComposite对象，并设定透明度<br>&nbsp;&nbsp;&nbsp; AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);<br>&nbsp;&nbsp;&nbsp; g2d.setComposite(ac);<br>&nbsp;&nbsp;&nbsp; g2d.setFont(new Font("隶书", Font.PLAIN, 42));<br>&nbsp;&nbsp;&nbsp;g2d.setColor(Color.black);<br>&nbsp;&nbsp;&nbsp;g2d.drawString("方正粗宋简体透明度为0.5", 20, 40);<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;//画一个背景色为..的长方形<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; AlphaComposite ac2 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f);<br>&nbsp;&nbsp;&nbsp;&nbsp; g2d.setComposite(ac2);<br>&nbsp;&nbsp;&nbsp;g2d.setColor(Color.CYAN);<br>&nbsp;&nbsp;&nbsp;g2d.fill3DRect(10, 200, 180, 80,false);<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;g2d.dispose();<br>&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;FileOutputStream fs=new FileOutputStream("c://alpha.jpg");<br>&nbsp;&nbsp;&nbsp;ImageIO.write(image, "jpg", fs);<br>&nbsp;&nbsp;} catch (Exception e) {<br>&nbsp;&nbsp;&nbsp;// TODO 自动生成 catch 块<br>&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;public static void main(String[] args) {<br>&nbsp;&nbsp;// TODO 自动生成方法存根<br>&nbsp;&nbsp;new Alpha();<br>&nbsp;}</p>
<p>}<br></p>
<img src ="http://www.blogjava.net/jalion/aggbug/127314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jalion/" target="_blank">李桢</a> 2007-07-01 10:02 <a href="http://www.blogjava.net/jalion/articles/127314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>