<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title></title>
    <description></description>
    <link>http://codekook.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>Java异常处理的几个原则</title>
        <author>codekook</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://codekook.javaeye.com">codekook</a>&nbsp;
                    链接：<a href="http://codekook.javaeye.com/blog/244486" style="color:red;">http://codekook.javaeye.com/blog/244486</a>&nbsp;
          发表时间: 2008年09月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>1）首先，不要丢弃异常，即catch异常后什么也不做。如果你认为不能很好的处理该异常，就让它继续传播，让别的地方处理去；或者，你可以把一个低级的异常转换成应用级的异常，重新抛出。</p>
<p>2）catch语句应该指定具体的异常类型。不要把不该捕获的异常也扣下了。</p>
<p>3）在finally里面释放资源。如果finally里面也会抛出异常，也一样的需要try catch处理。</p>
<p>4）不要把大量的代码塞在try catch块里面，分离各个可能出现异常的语句并分别捕获异常。</p>
<p>5）由于异常可能导致输出的数据不完整，你应该作出相应处理，至少要有提示数据的不完整。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://codekook.javaeye.com/blog/244486#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 20 Sep 2008 00:18:34 +0800</pubDate>
        <link>http://codekook.javaeye.com/blog/244486</link>
        <guid>http://codekook.javaeye.com/blog/244486</guid>
      </item>
          <item>
        <title>JavaScript笔记 - 对象继承的几种方式</title>
        <author>codekook</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://codekook.javaeye.com">codekook</a>&nbsp;
                    链接：<a href="http://codekook.javaeye.com/blog/232154" style="color:red;">http://codekook.javaeye.com/blog/232154</a>&nbsp;
          发表时间: 2008年08月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="color: blue;">1)对象冒充<br />
2)call方式<br />
3)apply方式<br />
4)原型链<br />
5)混合方式</span>
<br />
<br />
1)对象冒充</p>
<pre name="code" class="js">function People(name, age) {
	this.name = name;
	this.age = age;
	this.speak = function() {};
};

function Chinese(name) {
	this.inherit = People;	//冒充，会继承所有方法
	this.inherit(name, age);	//继承，必须指定继承的属性
	delete this.inherit;	//删除继承

	//需要定义的新方法、属性或者“重载”的方法在删除inherit后
	this.speak = function() {};	
}</pre>
&nbsp;
<p><br />
<br />
2)call方式<br />
	封装了方式1的&ldquo;经典三句&rdquo;，一样的效果。</p>
<pre name="code" class="js">function Sub(param1, param2) {
	Super1.call(this, param1);
	Super2.call(this, param2);
};</pre>
&nbsp;
<p><br />
<br />
3)apply方式<br />
	同call一样，只是使用方式不同：Super.apply(对象，参数数组);</p>
<pre name="code" class="js">function Sub(param1, param2, param3) {
	Super1.apply(this, new Array(param1, param2);	
	Super2.apply(this, new Array(param3);
};</pre>
&nbsp;
<p><br />
<br />
4)原型链方式<br />
	父类不用构造函数创建，而是原型方式<br />
	缺点：不能传递参数，不支持多重继承</p>
<pre name="code" class="js">function Super() {};
Super.prototype.param1 = &quot;sth.&quot;;
Super.prototype.foo = function() {};

function Sub() {};
Sub.prototype = new Super();

usage: var aSub = new Sub; Sub.foo();</pre>
&nbsp;
<p><br />
<br />
5)混合方式：<br />
	a)用构造函数定义新的属性，用call或apply继承属性。<br />
	b)用原型方式定义新的方法，用原型链继承方法。<br /></p>
<pre name="code" class="js">function Super(param1) {
	this.param1 = param1;
	Super.prototype.foo = function() {};
};

function Sub(param1, param2) {
	Super.call(this, param1);
	this.param2 = param2;	//别用this.prototype.param2 = param2;

	Sub.prototype = new Super();
	Sub.prototype.bar = function() {};
};
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://codekook.javaeye.com/blog/232154#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 24 Aug 2008 22:25:16 +0800</pubDate>
        <link>http://codekook.javaeye.com/blog/232154</link>
        <guid>http://codekook.javaeye.com/blog/232154</guid>
      </item>
          <item>
        <title>JavaScript笔记 - 对象创建的几种方式</title>
        <author>codekook</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://codekook.javaeye.com">codekook</a>&nbsp;
                    链接：<a href="http://codekook.javaeye.com/blog/232152" style="color:red;">http://codekook.javaeye.com/blog/232152</a>&nbsp;
          发表时间: 2008年08月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="color: blue;">1) 工厂方式<br />
2) 构造函数方式<br />
3) 原型方式<br />
4) 混合的构造函数/原型方式<br />
5) 动态原型方式</span>
<br />
<br />
<span style="color: blue;">1) 工厂方式</span>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;
    a)先创建对象，再添加属性和方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;
    b)总是为每个对象创建独立的函数版本。<br />
&nbsp;&nbsp;&nbsp;&nbsp;
    c)不利于封装和复用。<br />
    <br />
    eg1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;
    var sb = new Object;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
    sb.name = &quot;James&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
    sb.speak = function() {};<br />
    <br />
    eg2)<br />
    function People() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        var sb = new Object;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        sb.name = &quot;James&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        sb.speak = function() {};<br />
        <br />
&nbsp;&nbsp;&nbsp;&nbsp;
        return sb;<br />
    }<br />
    <br />
    usage: var james = People; var james2 = People;<br />
    <br />
    eg3)<br />
    function People(name) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        var sb = new Object;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        sb.name = name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        sb.speak = function() {};<br />
        <br />
&nbsp;&nbsp;&nbsp;&nbsp;
        return sb;<br />
    }<br />
    <br />
    usage: var james = People(&quot;James&quot;); var jodan = People(&quot;Jodan&quot;);<br />
    <br />
<span style="color: blue;">2) 构造函数方式</span>
<br />
    a)不在函数内部创建对象，而是通过this关键字指向当前对象。<br />
    b)为每个对象创建独立的函数版本，因此会重复生成函数。<br />
    <br />
    eg1)<br />
    function People(name, age) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        this.name = name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        this.age = age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        this.speak = function() {};    <br />
    }<br />
    <br />
    usage: var james = new People(james, 30);<br />
    <br />
<span style="color: blue;">3) 原型方式</span>
<br />
    a)所有的属性和方法都是通过Prototype添加，不能通过构造函数传递参数初始化属性。<br />
    <br />
    eg1)<br />
    function People() {};<br />
    People.prototype.name = &quot;James&quot;;<br />
    People.prototype.speak = function() {};<br />
    <br />
    usage: var james = new People();<br />
    <br />
<span style="color: blue;">4) 混合的构造函数/原型方式。</span>
<br />
    a)对象属性，用构造函数方式。<br />
    b)对象方法，用原型方式。<br />
    <br />
    eg1)<br />
    function People(name) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        this.name = name;<br />
    };<br />
    <br />
    People.prototype.speak = function() {};<br />
    <br />
    eg2) //把原型写入类内部，可能更符合习惯<br />
    function People(name) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        this.name = name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        People.prototype.speak = function() {};<br />
    };<br />
    <br />
<span style="color: blue;">5) 动态原型方式</span>
<br />
    a)创建对象的方法后，下一次使用不再重复创建。<br />
    <br />
    eg1)<br />
    function People(name) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        this.name = name;<br />
        <br />
&nbsp;&nbsp;&nbsp;&nbsp;
        if(typeof People._initialized = &quot;undefined&quot;) {<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;
            People.prototype.speak = function() {};<br />
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp; &nbsp;&nbsp;            People._initialized = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
        };<br />
    }<br />
<br />
<span style="color: indigo;">总结：<br />
实际应用中，用混合的构造函数/原型方法或者动态原型方式去构造JS对象。<br />
但熟悉各种对象构建方式，有利于对java script对象实现机制的理解。</span>
</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://codekook.javaeye.com/blog/232152#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 24 Aug 2008 22:12:02 +0800</pubDate>
        <link>http://codekook.javaeye.com/blog/232152</link>
        <guid>http://codekook.javaeye.com/blog/232152</guid>
      </item>
      </channel>
</rss>