<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_月光石</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/14632/rss</id><updated>2010-04-25T05:52:01Z</updated><author><name>月光石</name><uri>http://www.cnblogs.com/xuehai/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xuehai/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/14632/rss"/><entry><id>http://www.cnblogs.com/xuehai/archive/2010/04/25/1719840.html</id><title type="text">Java Decompiler 反编译器更新，支持Eclipse插件</title><summary type="text">官网下载网址:http://java.decompiler.free.fr/Eclipse 插件更新Url http://java.decompiler.free.fr/jd-eclipse/update目前该插件只支持Windows x86平台。 支持的Eclipse的版本有3.2-3.5 使用方法如下:To install "JD-Eclipse" on your IDE: open wind...</summary><published>2010-04-25T05:52:00Z</published><updated>2010-04-25T05:52:00Z</updated><author><name>月光石</name><uri>http://www.cnblogs.com/xuehai/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xuehai/archive/2010/04/25/1719840.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xuehai/archive/2010/04/25/1719840.html"/><content type="html">官网下载网址:http://java.decompiler.free.fr/&lt;br /&gt;Eclipse 插件更新Url http://java.decompiler.free.fr/jd-eclipse/update&lt;br /&gt;&lt;br /&gt;目前该插件只支持Windows x86平台。 支持的Eclipse的版本有3.2-3.5&lt;br /&gt;&lt;br /&gt;&#xD;
&lt;p &gt;&lt;img alt="" src="http://java.decompiler.free.fr/sites/default/screenshots/screenshot8.png" /&gt; &lt;/p&gt;&lt;br /&gt;使用方法如下:&lt;br /&gt;&#xD;
&lt;p&gt;To install "JD-Eclipse" on your IDE: &lt;/p&gt;&#xD;
&lt;ol&gt;&lt;li&gt;open window "Help &amp;gt; Software Updates &amp;gt; Find and Install",&lt;/li&gt;&lt;li&gt;create a new remote site,&lt;/li&gt;&lt;li&gt;name it,&lt;/li&gt;&lt;li&gt;use this URL : "http://java.decompiler.free.fr/jd-eclipse/update",&lt;/li&gt;&lt;li&gt;and finish the installation process. &lt;/li&gt;&lt;/ol&gt;&#xD;
&lt;p&gt;To switch back to JadClipse: &lt;/p&gt;&#xD;
&lt;ol&gt;&lt;li&gt;open the window "Window &amp;gt; Preferences &amp;gt; General &amp;gt; Editors &amp;gt; File Associations",&lt;/li&gt;&lt;li&gt;and select JadClipse as default editor for the "&lt;code&gt;.class&lt;/code&gt;" files. &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Good Luck!&lt;br /&gt;Yours Matthew!&lt;br /&gt;&lt;img src="http://www.cnblogs.com/xuehai/aggbug/1719840.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xuehai/archive/2010/04/25/1719840.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xuehai/archive/2010/04/18/1714713.html</id><title type="text">java final关键字</title><summary type="text">1.final数据许多程序设计语言都有自己的办法告诉编译器某个数据是&amp;#8220;常数&amp;#8221;。常数主要应用于下述两个方面：(1) 编译期常数，它永远不会改变(2) 在运行期初始化的一个值，我们不希望它发生变化对于编译期的常数，编译器（程序）可将常数值&amp;#8220;封装&amp;#8221;到需要的计算过程里。也就是说，计算可在编译期间提前执行，从而节省运行时的一些开销。在Java中，这些形式的常数...</summary><published>2010-04-18T06:28:00Z</published><updated>2010-04-18T06:28:00Z</updated><author><name>月光石</name><uri>http://www.cnblogs.com/xuehai/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xuehai/archive/2010/04/18/1714713.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xuehai/archive/2010/04/18/1714713.html"/><content type="html">&lt;div &gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;table style="table-layout: fixed; width: 100%"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;div  id="blog_text"&gt;&#xD;
&lt;p&gt;1.final数据&lt;br /&gt;许多程序设计语言都有自己的办法告诉编译器某个数据是&amp;#8220;常数&amp;#8221;。常数主要应用于下述两个方面：&lt;br /&gt;(1) 编译期常数，它永远不会改变&lt;br /&gt;(2) 在运行期初始化的一个值，我们不希望它发生变化&lt;br /&gt;对于编译期的常数，编译器（程序）可将常数值&amp;#8220;封装&amp;#8221;到需要的计算过程里。也就是说，计算可在编译期间提前执行，从而节省运行时的一些开销。在Java中，这些形式的常数必须属于基本数据类型（Primitives），而且要用final关键字进行表达。在对这样的一个常数进行定义的时候，必须给出一个值。&lt;br /&gt;无论static还是final字段，都只能存储一个数据，而且不得改变。&lt;br /&gt;若随同对象句柄使用final，而不是基本数据类型，它的含义就稍微让人有点儿迷糊了。对于基本数据类型，final会将值变成一个常数；但对于对象句柄，final会将句柄变成一个常数。进行声明时，必须将句柄初始化到一个具体的对象。而且永远不能将句柄变成指向另一个对象。然而，对象本身是可以修改的。Java对此未提供任何手段，可将一个对象直接变成一个常数（但是，我们可自己编写一个类，使其中的对象具有&amp;#8220;常数&amp;#8221;效果）。这一限制也适用于数组，它也属于对象。&lt;br /&gt;下面是演示final字段用法的一个例子：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;font size="+1"&gt;&lt;pre&gt;&lt;font color="#009900"&gt;//: FinalData.java&lt;/font&gt;&#xD;
&lt;font color="#009900"&gt;// The effect of final on fields&lt;/font&gt;&#xD;
&#xD;
&lt;font color="#0000ff"&gt;class&lt;/font&gt; Value {&#xD;
  &lt;font color="#0000ff"&gt;int&lt;/font&gt; i = 1;&#xD;
}&#xD;
&#xD;
&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; FinalData {&#xD;
  &lt;font color="#009900"&gt;// Can be compile-time constants&lt;/font&gt;&#xD;
  &lt;font color="#0000ff"&gt;final&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; i1 = 9;&#xD;
  &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;final&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; I2 = 99;&#xD;
  &lt;font color="#009900"&gt;// Typical public constant:&lt;/font&gt;&#xD;
  &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;final&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; I3 = 39;&#xD;
  &lt;font color="#009900"&gt;// Cannot be compile-time constants:&lt;/font&gt;&#xD;
  &lt;font color="#0000ff"&gt;final&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; i4 = (&lt;font color="#0000ff"&gt;int&lt;/font&gt;)(Math.random()*20);&#xD;
  &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;final&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; i5 = (&lt;font color="#0000ff"&gt;int&lt;/font&gt;)(Math.random()*20);&#xD;
  &#xD;
  Value v1 = &lt;font color="#0000ff"&gt;new&lt;/font&gt; Value();&#xD;
  &lt;font color="#0000ff"&gt;final&lt;/font&gt; Value v2 = &lt;font color="#0000ff"&gt;new&lt;/font&gt; Value();&#xD;
  &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;final&lt;/font&gt; Value v3 = &lt;font color="#0000ff"&gt;new&lt;/font&gt; Value();&#xD;
  &lt;font color="#009900"&gt;//! final Value v4; // Pre-Java 1.1 Error: &lt;/font&gt;&#xD;
                      &lt;font color="#009900"&gt;// no initializer&lt;/font&gt;&#xD;
  &lt;font color="#009900"&gt;// Arrays:&lt;/font&gt;&#xD;
  &lt;font color="#0000ff"&gt;final&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt;[] a = { 1, 2, 3, 4, 5, 6 };&#xD;
&#xD;
  &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; print(String id) {&#xD;
    System.out.println(&#xD;
      id + &lt;font color="#004488"&gt;": "&lt;/font&gt; + &lt;font color="#004488"&gt;"i4 = "&lt;/font&gt; + i4 + &#xD;
      &lt;font color="#004488"&gt;", i5 = "&lt;/font&gt; + i5);&#xD;
  }&#xD;
  &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; main(String[] args) {&#xD;
    FinalData fd1 = &lt;font color="#0000ff"&gt;new&lt;/font&gt; FinalData();&#xD;
    &lt;font color="#009900"&gt;//! fd1.i1++; // Error: can't change value&lt;/font&gt;&#xD;
    fd1.v2.i++; &lt;font color="#009900"&gt;// Object isn't constant!&lt;/font&gt;&#xD;
    fd1.v1 = &lt;font color="#0000ff"&gt;new&lt;/font&gt; Value(); &lt;font color="#009900"&gt;// OK -- not final&lt;/font&gt;&#xD;
    &lt;font color="#0000ff"&gt;for&lt;/font&gt;(&lt;font color="#0000ff"&gt;int&lt;/font&gt; i = 0; i &amp;lt; fd1.a.length; i++)&#xD;
      fd1.a[i]++; &lt;font color="#009900"&gt;// Object isn't constant!&lt;/font&gt;&#xD;
    &lt;font color="#009900"&gt;//! fd1.v2 = new Value(); // Error: Can't &lt;/font&gt;&#xD;
    &lt;font color="#009900"&gt;//! fd1.v3 = new Value(); // change handle&lt;/font&gt;&#xD;
    &lt;font color="#009900"&gt;//! fd1.a = new int[3];&lt;/font&gt;&#xD;
&#xD;
    fd1.print(&lt;font color="#004488"&gt;"fd1"&lt;/font&gt;);&#xD;
    System.out.println(&lt;font color="#004488"&gt;"Creating new FinalData"&lt;/font&gt;);&#xD;
    FinalData fd2 = &lt;font color="#0000ff"&gt;new&lt;/font&gt; FinalData();&#xD;
    fd1.print(&lt;font color="#004488"&gt;"fd1"&lt;/font&gt;);&#xD;
    fd2.print(&lt;font color="#004488"&gt;"fd2"&lt;/font&gt;);&#xD;
  }&#xD;
} &lt;font color="#009900"&gt;///:~&lt;/font&gt;&lt;/pre&gt;&lt;/font&gt;&lt;/blockquote&gt;&lt;br /&gt;由于i1和I2都是具有final属性的基本数据类型，并含有编译期的值，所以它们除了能作为编译期的常数使用外，在任何导入方式中也不会出现任何不同。I3是我们体验此类常数定义时更典型的一种方式：public表示它们可在包外使用；Static强调它们只有一个；而final表明它是一个常数。注意对于含有固定初始化值（即编译期常数）的fianl static基本数据类型，它们的名字根据规则要全部采用大写。也要注意i5在编译期间是未知的，所以它没有大写。&lt;br /&gt;不能由于某样东西的属性是final，就认定它的值能在编译时期知道。i4和i5向大家证明了这一点。它们在运行期间使用随机生成的数字。例子的这一部分也向大家揭示出将final值设为static和非static之间的差异。只有当值在运行期间初始化的前提下，这种差异才会揭示出来。因为编译期间的值被编译器认为是相同的。这种差异可从输出结果中看出：&lt;br /&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;font size="+1"&gt;&lt;pre&gt;fd1: i4 = 15, i5 = 9&#xD;
Creating &lt;font color="#0000ff"&gt;new&lt;/font&gt; FinalData&#xD;
fd1: i4 = 15, i5 = 9&#xD;
fd2: i4 = 10, i5 = 9&lt;/pre&gt;&lt;/font&gt;&lt;/blockquote&gt;&lt;br /&gt;注意对于fd1和fd2来说，i4的值是唯一的，但i5的值不会由于创建了另一个FinalData对象而发生改变。那是因为它的属性是static，而且在载入时初始化，而非每创建一个对象时初始化。&lt;br /&gt;从v1到v4的变量向我们揭示出final句柄的含义。正如大家在main()中看到的那样，并不能认为由于v2属于final，所以就不能再改变它的值。然而，我们确实不能再将v2绑定到一个新对象，因为它的属性是final。这便是final对于一个句柄的确切含义。我们会发现同样的含义亦适用于数组，后者只不过是另一种类型的句柄而已。将句柄变成final看起来似乎不如将基本数据类型变成final那么有用。&lt;br /&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2.空白final&lt;br /&gt;Java 1.1允许我们创建&amp;#8220;空白final&amp;#8221;，它们属于一些特殊的字段。尽管被声明成final，但却未得到一个初始值。无论在哪种情况下，空白final都必须在实际使用前得到正确的初始化。而且编译器会主动保证这一规定得以贯彻。然而，对于final关键字的各种应用，空白final具有最大的灵活性。举个例子来说，位于类内部的一个final字段现在对每个对象都可以有所不同，同时依然保持其&amp;#8220;不变&amp;#8221;的本质。下面列出一个例子：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;font size="+1"&gt;&lt;pre&gt;&lt;font color="#009900"&gt;//: BlankFinal.java&lt;/font&gt;&#xD;
&lt;font color="#009900"&gt;// "Blank" final data members&lt;/font&gt;&#xD;
&#xD;
&lt;font color="#0000ff"&gt;class&lt;/font&gt; Poppet { }&#xD;
&#xD;
&lt;font color="#0000ff"&gt;class&lt;/font&gt; BlankFinal {&#xD;
  &lt;font color="#0000ff"&gt;final&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; i = 0; &lt;font color="#009900"&gt;// Initialized final&lt;/font&gt;&#xD;
  &lt;font color="#0000ff"&gt;final&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; j; &lt;font color="#009900"&gt;// Blank final&lt;/font&gt;&#xD;
  &lt;font color="#0000ff"&gt;final&lt;/font&gt; Poppet p; &lt;font color="#009900"&gt;// Blank final handle&lt;/font&gt;&#xD;
  &lt;font color="#009900"&gt;// Blank finals MUST be initialized&lt;/font&gt;&#xD;
  &lt;font color="#009900"&gt;// in the constructor:&lt;/font&gt;&#xD;
  BlankFinal() {&#xD;
    j = 1; &lt;font color="#009900"&gt;// Initialize blank final&lt;/font&gt;&#xD;
    p = &lt;font color="#0000ff"&gt;new&lt;/font&gt; Poppet();&#xD;
  }&#xD;
  BlankFinal(&lt;font color="#0000ff"&gt;int&lt;/font&gt; x) {&#xD;
    j = x; &lt;font color="#009900"&gt;// Initialize blank final&lt;/font&gt;&#xD;
    p = &lt;font color="#0000ff"&gt;new&lt;/font&gt; Poppet();&#xD;
  }&#xD;
  &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; main(String[] args) {&#xD;
    BlankFinal bf = &lt;font color="#0000ff"&gt;new&lt;/font&gt; BlankFinal();&#xD;
  }&#xD;
} &lt;font color="#009900"&gt;///:~&lt;/font&gt;&lt;/pre&gt;&lt;/font&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;br /&gt;现在强行要求我们对final进行赋值处理&amp;#8212;&amp;#8212;要么在定义字段时使用一个表达 式，要么在每个构建器中。这样就可以确保final字段在使用前获得正确的初始化。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;3. final自变量&lt;br /&gt;Java 1.1允许我们将自变量设成final属性，方法是在自变量列表中对它们进行适当的声明。这意味着在一个方法的内部，我们不能改变自变量句柄指向的东西。如下所示：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;font size="+1"&gt;&lt;pre&gt;&lt;font color="#009900"&gt;//: FinalArguments.java&lt;/font&gt;&#xD;
&lt;font color="#009900"&gt;// Using "final" with method arguments&lt;/font&gt;&#xD;
&#xD;
&lt;font color="#0000ff"&gt;class&lt;/font&gt; Gizmo {&#xD;
  &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; spin() {}&#xD;
}&#xD;
&#xD;
&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; FinalArguments {&#xD;
  &lt;font color="#0000ff"&gt;void&lt;/font&gt; with(&lt;font color="#0000ff"&gt;final&lt;/font&gt; Gizmo g) {&#xD;
    &lt;font color="#009900"&gt;//! g = new Gizmo(); // Illegal -- g is final&lt;/font&gt;&#xD;
    g.spin();&#xD;
  }&#xD;
  &lt;font color="#0000ff"&gt;void&lt;/font&gt; without(Gizmo g) {&#xD;
    g = &lt;font color="#0000ff"&gt;new&lt;/font&gt; Gizmo(); &lt;font color="#009900"&gt;// OK -- g not final&lt;/font&gt;&#xD;
    g.spin();&#xD;
  }&#xD;
  &lt;font color="#009900"&gt;// void f(final int i) { i++; } // Can't change&lt;/font&gt;&#xD;
  &lt;font color="#009900"&gt;// You can only read from a final primitive:&lt;/font&gt;&#xD;
  &lt;font color="#0000ff"&gt;int&lt;/font&gt; g(&lt;font color="#0000ff"&gt;final&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; i) { &lt;font color="#0000ff"&gt;return&lt;/font&gt; i + 1; }&#xD;
  &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; main(String[] args) {&#xD;
    FinalArguments bf = &lt;font color="#0000ff"&gt;new&lt;/font&gt; FinalArguments();&#xD;
    bf.without(&lt;font color="#0000ff"&gt;null&lt;/font&gt;);&#xD;
    bf.with(&lt;font color="#0000ff"&gt;null&lt;/font&gt;);&#xD;
  }&#xD;
} &lt;font color="#009900"&gt;///:~&lt;/font&gt;&lt;/pre&gt;&lt;/font&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;br /&gt;注意此时仍然能为final自变量分配一个null（空）句柄，同时编译器不会捕获它。这与我们对非final自变量采取的操作是一样的。&lt;br /&gt;方法f()和g()向我们展示出基本类型的自变量为final时会发生什么情况：我们只能读取自变量，不可改变它。&lt;/p&gt;&#xD;
&lt;p&gt;4.final方法&lt;br /&gt;之所以要使用final方法，可能是出于对两方面理由的考虑。第一个是为方法&amp;#8220;上锁&amp;#8221;，防止任何继承类改变它的本来含义。设计程序时，若希望一个方法的行为在继承期间保持不变，而且不可被覆盖或改写，就可以采取这种做法。&lt;br /&gt;采用final方法的第二个理由是程序执行的效率。将一个方法设成final后，编译器就可以把对那个方法的所有调用都置入&amp;#8220;嵌入&amp;#8221;调用里。只要编译器发现一个final方法调用，就会（根据它自己的判断）忽略为执行方法调用机制而采取的常规代码插入方法（将自变量压入堆栈；跳至方法代码并执行它；跳回来；清除堆栈自变量；最后对返回值进行处理）。相反，它会用方法主体内实际代码的一个副本来替换方法调用。这样做可避免方法调用时的系统开销。当然，若方法体积太大，那么程序也会变得雍肿，可能受到到不到嵌入代码所带来的任何性能提升。因为任何提升都被花在方法内部的时间抵消了。Java编译器能自动侦测这些情况，并颇为&amp;#8220;明智&amp;#8221;地决定是否嵌入一个final方法。然而，最好还是不要完全相信编译器能正确地作出所有判断。通常，只有在方法的代码量非常少，或者想明确禁止方法被覆盖的时候，才应考虑将一个方法设为final。&lt;br /&gt;类内所有private方法都自动成为final。由于我们不能访问一个private方法，所以它绝对不会被其他方法覆盖（若强行这样做，编译器会给出错误提示）。可为一个private方法添加final指示符，但却不能为那个方法提供任何额外的含义。&lt;/p&gt;&#xD;
&lt;p&gt;5.final类&lt;br /&gt;如果说整个类都是final（在它的定义前冠以final关键字），就表明自己不希望从这个类继承，或者不允许其他任何人采取这种操作。换言之，出于这样或那样的原因，我们的类肯定不需要进行任何改变；或者出于安全方面的理由，我们不希望进行子类化（子类处理）。&lt;br /&gt;除此以外，我们或许还考虑到执行效率的问题，并想确保涉及这个类各对象的所有行动都要尽可能地有效。如下所示：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;font size="+1"&gt;&lt;pre&gt;&lt;font color="#009900"&gt;//: Jurassic.java&lt;/font&gt;&#xD;
&lt;font color="#009900"&gt;// Making an entire class final&lt;/font&gt;&#xD;
&#xD;
&lt;font color="#0000ff"&gt;class&lt;/font&gt; SmallBrain {}&#xD;
&#xD;
&lt;font color="#0000ff"&gt;final&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; Dinosaur {&#xD;
  &lt;font color="#0000ff"&gt;int&lt;/font&gt; i = 7;&#xD;
  &lt;font color="#0000ff"&gt;int&lt;/font&gt; j = 1;&#xD;
  SmallBrain x = &lt;font color="#0000ff"&gt;new&lt;/font&gt; SmallBrain();&#xD;
  &lt;font color="#0000ff"&gt;void&lt;/font&gt; f() {}&#xD;
}&#xD;
&#xD;
&lt;font color="#009900"&gt;//! class Further extends Dinosaur {}&lt;/font&gt;&#xD;
&lt;font color="#009900"&gt;// error: Cannot extend final class 'Dinosaur'&lt;/font&gt;&#xD;
&#xD;
&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; Jurassic {&#xD;
  &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; main(String[] args) {&#xD;
    Dinosaur n = &lt;font color="#0000ff"&gt;new&lt;/font&gt; Dinosaur();&#xD;
    n.f();&#xD;
    n.i = 40;&#xD;
    n.j++;&#xD;
  }&#xD;
} &lt;font color="#009900"&gt;///:~&lt;/font&gt;&lt;/pre&gt;&lt;/font&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;br /&gt;注意数据成员既可以是final，也可以不是，取决于我们具体选择。应用于final的规则同样适用于数据成员，无论类是否被定义成final。将类定义成final后，结果只是禁止进行继承&amp;#8212;&amp;#8212;没有更多的限制。然而，由于它禁止了继承，所以一个final类中的所有方法都默认为final。因为此时再也无法覆盖它们。所以与我们将一个方法明确声明为final一样，编译器此时有相同的效率选择。&lt;br /&gt;可为final类内的一个方法添加final指示符，但这样做没有任何意义。&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://www.cnblogs.com/xuehai/aggbug/1714713.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xuehai/archive/2010/04/18/1714713.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xuehai/archive/2009/09/26/1574539.html</id><title type="text">Flex 3 AdvancedDataGrid的使用(八)</title><summary type="text">我们继续来讲AdvancedDataGrid的使用。您可以通过创建自定义的条目渲染器(item renderers)或者条目编辑器(item editors)来定制AdvancedDataGrid中单元格的外观和行为&amp;#8230; 在AdvancedDataGrid中使用条目渲染器(item renderers)您可以通过创建自定义的条目渲染器(item renderers)或者条目编辑器(ite...</summary><published>2009-09-26T08:14:00Z</published><updated>2009-09-26T08:14:00Z</updated><author><name>月光石</name><uri>http://www.cnblogs.com/xuehai/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574539.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574539.html"/></entry><entry><id>http://www.cnblogs.com/xuehai/archive/2009/09/26/1574537.html</id><title type="text">Flex 3 AdvancedDataGrid的使用(七)</title><summary type="text">对分层数据进行列分组 和扁平数据一样，您使用分层数据进行列分组，以下例子修改自&amp;#8220;为导航树创建单独的列&amp;#8220;章节中的示例以将Actual和Estimates列归组到Revenues组列中：&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&amp;lt;mx:Application xmlns:mx="http://www.adobe.com/200...</summary><published>2009-09-26T08:13:00Z</published><updated>2009-09-26T08:13:00Z</updated><author><name>月光石</name><uri>http://www.cnblogs.com/xuehai/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574537.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574537.html"/></entry><entry><id>http://www.cnblogs.com/xuehai/archive/2009/09/26/1574536.html</id><title type="text">Flex 3 AdvancedDataGrid的使用(六)</title><summary type="text">创建多个汇总 您可以在单个GroupingField实例中指定多个SummaryRow实例。在下面的示例中，我们定义如下字段为Region组创建汇总数据：Min Actual、Max Actual、Min Estimate和Max Estimate：&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&amp;lt;mx:Application xmlns:mx="ht...</summary><published>2009-09-26T08:12:00Z</published><updated>2009-09-26T08:12:00Z</updated><author><name>月光石</name><uri>http://www.cnblogs.com/xuehai/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574536.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574536.html"/></entry><entry><id>http://www.cnblogs.com/xuehai/archive/2009/09/26/1574535.html</id><title type="text">Flex 3 AdvancedDataGrid的使用(五)</title><summary type="text">我们继续来讲AdvancedDataGrid的使用。 创建汇总行您可以使用GroupingField类的summaries属性来创建分组数据的汇总数据，然后您可以将汇总数据与原来数据显示同一行中，也可以将其显示在单独一行中。以下示例中，AdvancedDataGrid控件显示了两个汇总字段，Min Actual和Max Actual：顶部行的Min Actual和Max Actual字段对应分组中...</summary><published>2009-09-26T08:11:00Z</published><updated>2009-09-26T08:11:00Z</updated><author><name>月光石</name><uri>http://www.cnblogs.com/xuehai/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574535.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574535.html"/></entry><entry><id>http://www.cnblogs.com/xuehai/archive/2009/09/26/1574534.html</id><title type="text">Flex 3 AdvancedDataGrid的使用(四)</title><summary type="text">显示分层XML数据 前面章节的示例中使用ArrayCollection来创建AdvancedDataGrid控件。您也可以使用分层XML数据来创建AdvancedDataGrid控件。以下示例修改前面章节的数据格式化为XML，然后将数据传递给AdvancedDataGrid控件：&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&amp;lt;mx:Applicati...</summary><published>2009-09-26T08:10:00Z</published><updated>2009-09-26T08:10:00Z</updated><author><name>月光石</name><uri>http://www.cnblogs.com/xuehai/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574534.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574534.html"/></entry><entry><id>http://www.cnblogs.com/xuehai/archive/2009/09/26/1574533.html</id><title type="text">Flex 3 AdvancedDataGrid的使用(三)</title><summary type="text">设置分层数据的数据源 要配置AdvancedDataGrid显示分级数据和导航树，您传递给dataProvider属性以HierarchicalData类或者GroupingCollection类的实例，当您的数据以层次组织时使用HierarchicalData类。更多信息请查看&amp;#8220;显示分层数据&amp;#8221;。当您的数据以平面结构组织时使用GroupingCollection类，作为配置...</summary><published>2009-09-26T08:09:00Z</published><updated>2009-09-26T08:09:00Z</updated><author><name>月光石</name><uri>http://www.cnblogs.com/xuehai/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574533.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574533.html"/></entry><entry><id>http://www.cnblogs.com/xuehai/archive/2009/09/26/1574532.html</id><title type="text">Flex 3 AdvancedDataGrid的使用(二)</title><summary type="text">续第一部分，我们继续来讲AdvancedDataGrid的使用。 选择多个单元格及多行所有基于List的控件都支持allowMultipleSelection属性。将allowMultipleSelection属性设置为True可以使得您在控件中一次选择不止一个条目。例如，DataGrid控件可以让您选择多行这样您就可以将他们拖放到另一个DataGrid中。AdvancedDataGrid增加了可...</summary><published>2009-09-26T08:08:00Z</published><updated>2009-09-26T08:08:00Z</updated><author><name>月光石</name><uri>http://www.cnblogs.com/xuehai/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574532.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574532.html"/></entry><entry><id>http://www.cnblogs.com/xuehai/archive/2009/09/26/1574531.html</id><title type="text">Flex 3 advancedDataGrid的使用(一)</title><summary type="text">[转载：原创保留一切权力http://hi.baidu.com/lz0830/blog/item/b17dcc3433170d325bb5f589.html]Flex3 已经开始公测，其带来了诸多变化，所以由今天开始，我们将陆续和大家一起来学习其中的新特性，进行我们的Flex 3发现之旅。今天我们要说的是官方文档中用了整章介绍的AdvancedDataGrid，AdvancedDataGrid是D...</summary><published>2009-09-26T08:07:00Z</published><updated>2009-09-26T08:07:00Z</updated><author><name>月光石</name><uri>http://www.cnblogs.com/xuehai/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574531.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xuehai/archive/2009/09/26/1574531.html"/></entry></feed>
