﻿<?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/klpk222/category/26729.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 23 Nov 2007 06:00:46 GMT</lastBuildDate><pubDate>Fri, 23 Nov 2007 06:00:46 GMT</pubDate><ttl>60</ttl><item><title>Java中的volatile关键字</title><link>http://www.blogjava.net/klpk222/archive/2007/11/21/162039.html</link><dc:creator>最後の騎士</dc:creator><author>最後の騎士</author><pubDate>Wed, 21 Nov 2007 03:12:00 GMT</pubDate><guid>http://www.blogjava.net/klpk222/archive/2007/11/21/162039.html</guid><wfw:comment>http://www.blogjava.net/klpk222/comments/162039.html</wfw:comment><comments>http://www.blogjava.net/klpk222/archive/2007/11/21/162039.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/klpk222/comments/commentRss/162039.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/klpk222/services/trackbacks/162039.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们知道，在Java中设置变量值的操作，除了long和double类型的变量外都是原子操作，也就是说，对于变量值的简单读写操作没有必要进行同步。&nbsp;&nbsp;<a href='http://www.blogjava.net/klpk222/archive/2007/11/21/162039.html'>阅读全文</a><img src ="http://www.blogjava.net/klpk222/aggbug/162039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/klpk222/" target="_blank">最後の騎士</a> 2007-11-21 11:12 <a href="http://www.blogjava.net/klpk222/archive/2007/11/21/162039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个很酷也很实用的RIA工具，在线visio</title><link>http://www.blogjava.net/klpk222/archive/2007/11/16/160903.html</link><dc:creator>最後の騎士</dc:creator><author>最後の騎士</author><pubDate>Fri, 16 Nov 2007 01:17:00 GMT</pubDate><guid>http://www.blogjava.net/klpk222/archive/2007/11/16/160903.html</guid><wfw:comment>http://www.blogjava.net/klpk222/comments/160903.html</wfw:comment><comments>http://www.blogjava.net/klpk222/archive/2007/11/16/160903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/klpk222/comments/commentRss/160903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/klpk222/services/trackbacks/160903.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Best4C提供的功能与微软的流程图制作工具Visio类似,这是一款新上线的来自于国内网络工具,目前提供基础图形、流程图、网络图、家居设计图、办公室布局图,UML图多个种类,每种种类都提供了相应的模版.能够让你随时,随地的方便的创建,修改,分享各种图表.Best4c图表可以使消息变得更为简练,帮助人们记住要点,同时帮助人们跨越文化和技术障碍. <br>&nbsp;&nbsp;<a href='http://www.blogjava.net/klpk222/archive/2007/11/16/160903.html'>阅读全文</a><img src ="http://www.blogjava.net/klpk222/aggbug/160903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/klpk222/" target="_blank">最後の騎士</a> 2007-11-16 09:17 <a href="http://www.blogjava.net/klpk222/archive/2007/11/16/160903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ant介绍以及基本使用指南</title><link>http://www.blogjava.net/klpk222/archive/2007/11/15/160750.html</link><dc:creator>最後の騎士</dc:creator><author>最後の騎士</author><pubDate>Thu, 15 Nov 2007 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/klpk222/archive/2007/11/15/160750.html</guid><wfw:comment>http://www.blogjava.net/klpk222/comments/160750.html</wfw:comment><comments>http://www.blogjava.net/klpk222/archive/2007/11/15/160750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/klpk222/comments/commentRss/160750.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/klpk222/services/trackbacks/160750.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Ant 是著名Java开源组织Apache的一个项目，是一个基于java的build工具。它可以使你通过ant脚本语言，自动你的项目拷贝到某个目录，发布项目，或者生成一些代码，执行SQL语言。总之它可以帮助你完成项目开发中除了开发代码以外的大部分辅助性工作。&nbsp;&nbsp;<a href='http://www.blogjava.net/klpk222/archive/2007/11/15/160750.html'>阅读全文</a><img src ="http://www.blogjava.net/klpk222/aggbug/160750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/klpk222/" target="_blank">最後の騎士</a> 2007-11-15 14:57 <a href="http://www.blogjava.net/klpk222/archive/2007/11/15/160750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]通用分页标签【废弃以前的两个设计不合理的标签】</title><link>http://www.blogjava.net/klpk222/archive/2007/11/02/157764.html</link><dc:creator>最後の騎士</dc:creator><author>最後の騎士</author><pubDate>Fri, 02 Nov 2007 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/klpk222/archive/2007/11/02/157764.html</guid><wfw:comment>http://www.blogjava.net/klpk222/comments/157764.html</wfw:comment><comments>http://www.blogjava.net/klpk222/archive/2007/11/02/157764.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/klpk222/comments/commentRss/157764.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/klpk222/services/trackbacks/157764.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 通用分页标签【废弃以前的两个设计不合理的标签】 &nbsp;&nbsp;<a href='http://www.blogjava.net/klpk222/archive/2007/11/02/157764.html'>阅读全文</a><img src ="http://www.blogjava.net/klpk222/aggbug/157764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/klpk222/" target="_blank">最後の騎士</a> 2007-11-02 15:33 <a href="http://www.blogjava.net/klpk222/archive/2007/11/02/157764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关乱码的处理－－－中国程序员永远无法避免的话题</title><link>http://www.blogjava.net/klpk222/archive/2007/10/26/156116.html</link><dc:creator>最後の騎士</dc:creator><author>最後の騎士</author><pubDate>Fri, 26 Oct 2007 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/klpk222/archive/2007/10/26/156116.html</guid><wfw:comment>http://www.blogjava.net/klpk222/comments/156116.html</wfw:comment><comments>http://www.blogjava.net/klpk222/archive/2007/10/26/156116.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/klpk222/comments/commentRss/156116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/klpk222/services/trackbacks/156116.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 为什么说乱码是中国程序员无法避免的话题呢？这个首先要从编码机制上说起，大家都是中文和英文的编码格式不是一样，解码也是不一样的！如果中国的程序员不会遇到乱码，那么只有使用汉语编程。&nbsp;&nbsp;<a href='http://www.blogjava.net/klpk222/archive/2007/10/26/156116.html'>阅读全文</a><img src ="http://www.blogjava.net/klpk222/aggbug/156116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/klpk222/" target="_blank">最後の騎士</a> 2007-10-26 13:47 <a href="http://www.blogjava.net/klpk222/archive/2007/10/26/156116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java语法总结 - 内部类</title><link>http://www.blogjava.net/klpk222/archive/2007/10/24/155508.html</link><dc:creator>最後の騎士</dc:creator><author>最後の騎士</author><pubDate>Wed, 24 Oct 2007 02:53:00 GMT</pubDate><guid>http://www.blogjava.net/klpk222/archive/2007/10/24/155508.html</guid><wfw:comment>http://www.blogjava.net/klpk222/comments/155508.html</wfw:comment><comments>http://www.blogjava.net/klpk222/archive/2007/10/24/155508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/klpk222/comments/commentRss/155508.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/klpk222/services/trackbacks/155508.html</trackback:ping><description><![CDATA[从Java1.1开始引入了内部类以来，它就引起了人们的激烈争论。其实任何优秀的语言特性用得不好就是滥用，内部类用得不好就会导致代码像迷宫一样，导致出现毫无重用的综合征。<br />
<br />
1、内部类分为成员内部类、静态嵌套类、方法内部类、匿名内部类。<br />
几种内部类的共性：<br />
A、内部类仍然是一个独立的类，在编译之后会内部类会被编译成独立的.class文件，但是前面冠以外部类的类命和$符号。<br />
B、内部类不能用普通的方式访问。内部类是外部类的一个成员，因此内部类可以自由地访问外部类的成员变量，无论是否是private的。<br />
<br />
2、成员内部类：形式如下<br />
&nbsp;&nbsp; &nbsp;class Outer {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;class Inner{}<br />
&nbsp;&nbsp; &nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
编译上述代码会产生两个文件：Outer.class和Outer$Inner.class。<br />
成员内部类内不允许有任何静态声明！下面代码不能通过编译。<br />
&nbsp;&nbsp; &nbsp;class Inner{<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;static int a = 10;<br />
&nbsp;&nbsp; &nbsp;} <br />
能够访问成员内部类的唯一途径就是通过外部类的对象！<br />
<br />
A、从外部类的非静态方法中实例化内部类对象。<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee" twffan="done"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000" twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">class</span><span style="color: #000000" twffan="done">&nbsp;Outer&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">private</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">int</span><span style="color: #000000" twffan="done">&nbsp;i&nbsp;</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #000000" twffan="done">10</span><span style="color: #000000" twffan="done">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">public</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">void</span><span style="color: #000000" twffan="done">&nbsp;makeInner(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inner&nbsp;in&nbsp;</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">new</span><span style="color: #000000" twffan="done">&nbsp;Inner();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.seeOuter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">class</span><span style="color: #000000" twffan="done">&nbsp;Inner{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">public</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">void</span><span style="color: #000000" twffan="done">&nbsp;seeOuter(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
表面上，我们并没有创建外部类的对象就实例化了内部类对象，和上面的话矛盾。事实上，如果不创建外部类对象也就不可能调用makeInner()方法，所以到头来还是要创建外部类对象的。<br />
你可能试图把makeInner()方法修饰为静态方法，即static public void makeInner()。这样不创建外部类就可以实例化外部类了！但是在一个静态方法里能访问非静态成员和方法吗？显然不能。它没有this引用。没能跳出那条规则！但是如果在这个静态方法中实例化一个外部类对象，再用这个对象实例化外部类呢？完全可以！也就是下一条的内容。<br />
<br />
B、从外部类的静态方法中实例化内部类对象。<br />
&nbsp;&nbsp; &nbsp;class Outer {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;private int i = 10;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;class Inner{<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void seeOuter(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.print(i);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Outer out = new Outer();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Outer.Inner in = out.new Inner();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//Outer.Inner in = new Outer().new Inner();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;in.seeOuter();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
被注释掉的那行是它上面两行的合并形式，一条简洁的语句。<br />
对比一下：在外部类的非静态方法中实例化内部类对象是普通的new方式：Inner in = new Inner();<br />
在外部类的静态方法中实例化内部类对象，必须先创建外部类对象：Outer.Inner in = new Outer().new Inner();<br />
<br />
C、内部类的this引用。<br />
普通的类可以用this引用当前的对象，内部类也是如此。但是假若内部类想引用外部类当前的对象呢？用&#8220;外部类名&#8221;.this；的形式,如下例的Outer.this。<br />
&nbsp;&nbsp; &nbsp;class Outer {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;class Inner{<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void seeOuter(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(this);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(Outer.this);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
D、成员内部类的修饰符。<br />
对于普通的类，可用的修饰符有final、abstract、strictfp、public和默认的包访问。<br />
但是成员内部类更像一个成员变量和方法。<br />
可用的修饰符有：final、abstract、public、private、protected、strictfp和static。<br />
一旦用static修饰内部类，它就变成静态内部类了。<br />
<br />
<br />
3、方法内部类。<br />
顾名思义，把类放在方法内。<br />
&nbsp;&nbsp; &nbsp;class Outer {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void doSomething(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;class Inner{<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void seeOuter(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;}<br />
A、方法内部类只能在定义该内部类的方法内实例化，不可以在此方法外对其实例化。<br />
<br />
B、方法内部类对象不能使用该内部类所在方法的非final局部变量。<br />
因为方法的局部变量位于栈上，只存在于该方法的生命期内。当一个方法结束，其栈结构被删除，局部变量成为历史。但是该方法结束之后，在方法内创建的内部类对象可能仍然存在于堆中！例如，如果对它的引用被传递到其他某些代码，并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长，所以内部类对象不能使用它们。<br />
下面是完整的例子：<br />
&nbsp;&nbsp; &nbsp;class Outer {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void doSomething(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;final int a =10;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;class Inner{<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void seeOuter(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(a);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Inner in = new Inner();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;in.seeOuter(); <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Outer out = new Outer();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;out.doSomething();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp;&nbsp; &nbsp;}<br />
<br />
C、方法内部类的修饰符。<br />
与成员内部类不同，方法内部类更像一个局部变量。<br />
可以用于修饰方法内部类的只有final和abstract。<br />
<br />
D、静态方法内的方法内部类。<br />
静态方法是没有this引用的，因此在静态方法内的内部类遭受同样的待遇，即：只能访问外部类的静态成员。<br />
<br />
<br />
4、匿名内部类。<br />
顾名思义，没有名字的内部类。表面上看起来它们似乎有名字，实际那不是它们的名字。<br />
<br />
A、继承式的匿名内部类。<br />
&nbsp;&nbsp; &nbsp;class Car {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void drive(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("Driving a car!");<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;class Test{<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Car car = new Car(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void drive(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("Driving another car!");<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&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;car.drive();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;}<br />
结果输出了：Driving another car! Car引用变量不是引用Car对象，而是Car匿名子类的对象。<br />
建立匿名内部类的关键点是重写父类的一个或多个方法。再强调一下，是重写父类的方法，而不是创建新的方法。因为用父类的引用不可能调用父类本身没有的方法！创建新的方法是多余的。简言之，参考多态。<br />
<br />
B、接口式的匿名内部类。<br />
&nbsp;&nbsp; &nbsp;interface&nbsp; Vehicle {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void drive();<br />
&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;class Test{<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Vehicle v = new Vehicle(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void drive(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("Driving a car!");<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&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;v.drive();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;}<br />
上面的代码很怪，好像是在实例化一个接口。事实并非如此，接口式的匿名内部类是实现了一个接口的匿名类。而且只能实现一个接口。<br />
<br />
C、参数式的匿名内部类。<br />
class Bar{<br />
&nbsp;&nbsp; &nbsp;void doStuff(Foo f){}<br />
}<br />
<br />
interface Foo{<br />
&nbsp;&nbsp; &nbsp;void foo();<br />
}<br />
<br />
class Test{<br />
&nbsp;&nbsp; &nbsp;static void go(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Bar b = new Bar();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;b.doStuff(new Foo(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void foo(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("foofy");<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;});<br />
&nbsp;&nbsp; &nbsp;}<br />
}<br />
<br />
<br />
5、静态嵌套类。<br />
从技术上讲，静态嵌套类不属于内部类。因为内部类与外部类共享一种特殊关系，更确切地说是对实例的共享关系。而静态嵌套类则没有上述关系。它只是位置在另一个类的内部，因此也被称为顶级嵌套类。<br />
静态的含义是该内部类可以像其他静态成员一样，没有外部类对象时，也能够访问它。静态嵌套类不能访问外部类的成员和方法。<br />
&nbsp;&nbsp; &nbsp;class Outer{<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;static class Inner{}<br />
&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;class Test {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static void main(String[] args){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Outer.Inner n = new Outer.Inner();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;} 
<img src ="http://www.blogjava.net/klpk222/aggbug/155508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/klpk222/" target="_blank">最後の騎士</a> 2007-10-24 10:53 <a href="http://www.blogjava.net/klpk222/archive/2007/10/24/155508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>