﻿<?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-westwin的blog-随笔分类-J2SE</title><link>http://www.blogjava.net/westwin/category/2368.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 20:56:47 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 20:56:47 GMT</pubDate><ttl>60</ttl><item><title>(原创)判断字符串是不是GB2312?</title><link>http://www.blogjava.net/westwin/archive/2005/07/29/8699.html</link><dc:creator>westwin的blog</dc:creator><author>westwin的blog</author><pubDate>Fri, 29 Jul 2005 01:01:00 GMT</pubDate><guid>http://www.blogjava.net/westwin/archive/2005/07/29/8699.html</guid><wfw:comment>http://www.blogjava.net/westwin/comments/8699.html</wfw:comment><comments>http://www.blogjava.net/westwin/archive/2005/07/29/8699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/westwin/comments/commentRss/8699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/westwin/services/trackbacks/8699.html</trackback:ping><description><![CDATA[<p>对于gb2312来讲,首字节码位从0×81至0×FE，尾字节码位分别是0×40至0×FE,所以 ：</p>

<p>&nbsp;public boolean isGB2312(String str){<br>&nbsp;&nbsp; &nbsp;char[] chars=str.toCharArray();<br>&nbsp;&nbsp; &nbsp;boolean isGB2312=false;<br>&nbsp;&nbsp; &nbsp;for(int i=0;i&lt;chars.length;i++){<br>&nbsp;&nbsp; &nbsp;&nbsp;byte[] bytes=(""+chars[i]).getBytes();<br>&nbsp;&nbsp; &nbsp;&nbsp;if(bytes.length==2){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;int[] ints=new int[2];<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ints[0]=bytes[0]&amp; 0xff;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ints[1]=bytes[1]&amp; 0xff;<br>&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;if(ints[0]&gt;=0x81 &amp;&amp; ints[0]&lt;=0xFE
&amp;&amp; ints[1]&gt;=0x40 &amp;&amp; ints[1]&lt;=0xFE){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;isGB2312=true;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp; &nbsp;&nbsp;}<br>&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;return isGB2312;</p>

<p>}</p>
<img src ="http://www.blogjava.net/westwin/aggbug/8699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/westwin/" target="_blank">westwin的blog</a> 2005-07-29 09:01 <a href="http://www.blogjava.net/westwin/archive/2005/07/29/8699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转贴)Runtime.exec()的陷阱</title><link>http://www.blogjava.net/westwin/archive/2005/07/29/8698.html</link><dc:creator>westwin的blog</dc:creator><author>westwin的blog</author><pubDate>Fri, 29 Jul 2005 01:00:00 GMT</pubDate><guid>http://www.blogjava.net/westwin/archive/2005/07/29/8698.html</guid><wfw:comment>http://www.blogjava.net/westwin/comments/8698.html</wfw:comment><comments>http://www.blogjava.net/westwin/archive/2005/07/29/8698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/westwin/comments/commentRss/8698.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/westwin/services/trackbacks/8698.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: When Runtime.exec() won't                              Navigate yourself around pitfalls related to the Runtime.exec() method                                                Summary-->...&nbsp;&nbsp;<a href='http://www.blogjava.net/westwin/archive/2005/07/29/8698.html'>阅读全文</a><img src ="http://www.blogjava.net/westwin/aggbug/8698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/westwin/" target="_blank">westwin的blog</a> 2005-07-29 09:00 <a href="http://www.blogjava.net/westwin/archive/2005/07/29/8698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转贴)checked exception VS unchecked exception</title><link>http://www.blogjava.net/westwin/archive/2005/07/29/8697.html</link><dc:creator>westwin的blog</dc:creator><author>westwin的blog</author><pubDate>Fri, 29 Jul 2005 00:59:00 GMT</pubDate><guid>http://www.blogjava.net/westwin/archive/2005/07/29/8697.html</guid><wfw:comment>http://www.blogjava.net/westwin/comments/8697.html</wfw:comment><comments>http://www.blogjava.net/westwin/archive/2005/07/29/8697.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/westwin/comments/commentRss/8697.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/westwin/services/trackbacks/8697.html</trackback:ping><description><![CDATA[<table align="center" border="0" cellpadding="0" cellspacing="0" width="760">
<tbody><tr><td class="title" align="center" height="56" valign="middle"><b>Java语言中两种异常的差别</b></td></tr><tr><td class="formtitle" align="center" height="40">eugene 翻译 来源：Yesky</td></tr></tbody>
</table>
　
　Java提供了两类主要的异常：runtime exception和checked exception。所有的checked
exception是从java.lang.Exception类衍生出来的，而runtime
exception则是从java.lang.RuntimeException或java.lang.Error类衍生出来的。 
<div>　　它们的不同之处表现在两方面：机制上和逻辑上。<br><br>　　<b>一、机制上</b><br><br>　　它们在机制上的不同表现在两点：1.如何定义方法；2. 如何处理抛出的异常。请看下面CheckedException的定义：<br>public class CheckedException extends Exception<br>{<br>　public CheckedException() {}<br>　public CheckedException( String message )<br>　{<br>　　super( message ); <br>　}<br>}</div>
<div>以及一个使用exception的例子：</div>
<div>public class ExceptionalClass<br>{<br>　public void method1() <br>　　throws CheckedException <br>　　{<br>　　　// ... throw new CheckedException( "...出错了" );<br>　　}<br>　public void method2( String arg )<br>　　{<br>　　　if( arg == null ) <br>　　　{<br>　　　　throw new NullPointerException( "method2的参数arg是null!" );<br>　　　}<br>　　}<br>　public void method3() throws CheckedException<br>　　{<br>　　　method1(); <br>　　}<br>}</div>
<div>　
　你可能已经注意到了，两个方法method1()和method2()都会抛出exception，可是只有method1()做了声明。另外，
method3()本身并不会抛出exception，可是它却声明会抛出CheckedException。在向你解释之前，让我们先来看看这个类的
main()方法：<br>public static void main( String[] args )<br>{<br>　ExceptionalClass example = new ExceptionalClass();<br>　try <br>　{<br>　　example.method1(); <br>　　example.method3();<br>　}<br>　catch( CheckedException ex ) { } example.method2( null );<br>}</div>
<div>　　在main()方法中，如果要调用method1()，你必须把这个调用放在try/catch程序块当中，因为它会抛出Checked exception。<br><br>　
　相比之下，当你调用method2()时，则不需要把它放在try/catch程序块当中，因为它会抛出的exception不是checked
exception，而是runtime exception。会抛出runtime
exception的方法在定义时不必声明它会抛出exception。<br><br>　　现在，让我们再来看看method3()。它调用了
method1()却没有把这个调用放在try/catch程序块当中。它是通过声明它会抛出method1()会抛出的exception来避免这样做
的。它没有捕获这个exception，而是把它传递下去。实际上main()方法也可以这样做，通过声明它会抛出Checked
exception来避免使用try/catch程序块（当然我们反对这种做法）。<br><br>　　<b>小结一下</b>：<br><br>　　* Runtime exceptions：<br><br>　　　在定义方法时不需要声明会抛出runtime exception；<br><br>　　　在调用这个方法时不需要捕获这个runtime exception；<br><br>　　　runtime exception是从java.lang.RuntimeException或java.lang.Error类衍生出来的。<br><br>　　* Checked exceptions：<br><br>　　　定义方法时必须声明所有可能会抛出的checked exception；<br><br>　　　在调用这个方法时，必须捕获它的checked exception，不然就得把它的exception传递下去；<br><br>　　　checked exception是从java.lang.Exception类衍生出来的。<br>&nbsp;　　<b>二、逻辑上</b><br><br>　
　从逻辑的角度来说，checked exceptions和runtime exception是有不同的使用目的的。checked
exception用来指示一种调用方能够直接处理的异常情况。而runtime
exception则用来指示一种调用方本身无法处理或恢复的程序错误。<br><br>　　checked
exception迫使你捕获它并处理这种异常情况。以java.net.URL类的构建器(constructor)为例，它的每一个构建器都会抛出
MalformedURLException。MalformedURLException就是一种checked
exception。设想一下，你有一个简单的程序，用来提示用户输入一个URL，然后通过这个URL去下载一个网页。如果用户输入的URL有错误，构建
器就会抛出一个exception。既然这个exception是checked
exception，你的程序就可以捕获它并正确处理：比如说提示用户重新输入。<br><br>　　再看下面这个例子：<br><br><table bgcolor="#ffffff" width="100%"><tbody><tr><td><font size="2">public void method()<br>{<br>　int [] numbers = { 1, 2, 3 };<br>　int sum = numbers[0] + numbers[3];<br>}</font></td></tr></tbody></table><br>　
　在运行方法method()时会遇到ArrayIndexOutOfBoundsException（因为数组numbers的成员是从0到2）。对于
这个异常，调用方无法处理/纠正。这个方法method()和上面的method2()一样，都是runtime
exception的情形。上面我已经提到，runtime
exception用来指示一种调用方本身无法处理/恢复的程序错误。而程序错误通常是无法在运行过程中处理的，必须改正程序代码。<br><br>　　
总而言之，在程序的运行过程中一个checked
exception被抛出的时候，只有能够适当处理这个异常的调用方才应该用try/catch来捕获它。而对于runtime
exception，则不应当在程序中捕获它。如果你要捕获它的话，你就会冒这样一个风险：程序代码的错误(bug)被掩盖在运行当中无法被察觉。因为在
程序测试过程中，系统打印出来的调用堆栈路径(StackTrace)往往使你更快找到并修改代码中的错误。有些程序员建议捕获runtime
exception并纪录在log中，我反对这样做。这样做的坏处是你必须通过浏览log来找出问题，而用来测试程序的测试系统（比如Unit
Test）却无法直接捕获问题并报告出来。<br><br>　　在程序中捕获runtime
exception还会带来更多的问题：要捕获哪些runtime exception？什么时候捕获？runtime
exception是不需要声明的，你怎样知道有没有runtime
exception要捕获？你想看到在程序中每一次调用方法时，都使用try/catch程序块吗？</div>
<img src ="http://www.blogjava.net/westwin/aggbug/8697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/westwin/" target="_blank">westwin的blog</a> 2005-07-29 08:59 <a href="http://www.blogjava.net/westwin/archive/2005/07/29/8697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>