﻿<?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/linq/category/6519.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:32:44 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:32:44 GMT</pubDate><ttl>60</ttl><item><title>Java中final用法小结</title><link>http://www.blogjava.net/linq/articles/26079.html</link><dc:creator>未来刀客</dc:creator><author>未来刀客</author><pubDate>Fri, 30 Dec 2005 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/linq/articles/26079.html</guid><wfw:comment>http://www.blogjava.net/linq/comments/26079.html</wfw:comment><comments>http://www.blogjava.net/linq/articles/26079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/linq/comments/commentRss/26079.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/linq/services/trackbacks/26079.html</trackback:ping><description><![CDATA[Java中final关键字用在以下三种情况： <BR>1、声明常量 <BR>2、将某个方法声明为final <BR>3、将某个类声明为final <BR>第一种情况很简单，而且它经常配合static使用，因为既然是常量，则对于所有实例都是 <BR>一样的，它不随着实例而变化，所以将其声明为static。但有一点需要注意，即当声明了 <BR>一个final的object reference时，注意，这时谁为常量？<IMG height=20 src="http://www.blogjava.net/Emoticons/QQ/01.gif" width=20 border=0>是reference本身还是referenc <BR>e指向的对象？答案是前者，例： <BR>public class Circle <BR>{ <BR>private double rad; <BR>public Circle(double r) <BR>{ <BR>&nbsp; rad = r; <BR>} <BR>public void setRadius(double r) <BR>{ <BR>&nbsp; rad = r; <BR>} <BR>public double getRadius() <BR>{ <BR>&nbsp; return rad; <BR>} <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static final Circle p = new Circle(5); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p.setRadius(7);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //OK,因为p为常量，但它所引用的 <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = new Circle(7);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Error，改变了常量p的值 <BR>} <BR>
<HR>
<BR>由于缺省情况下，classes所有的non-private,non-static函数都可以被子类所复写(over <BR>ride)，那么如何做才能阻止子类复写某个函数呢？答案是将该方法声明为final。例： <BR><BR>public class Base <BR>{ <BR>public void foo() <BR>{ <BR>&nbsp; <BR>} <BR>public final void bar() <BR>{ <BR>&nbsp; <BR>} <BR>} <BR>public class Derived extends Base <BR>{ <BR>public void foo() <BR>{ <BR>&nbsp; <BR>} <BR>/** <BR>&nbsp; * can't override the final method of base class <BR>&nbsp; */ <BR>// public void bar() <BR>// { <BR>//&nbsp; <BR>// } <BR>} <BR>
<HR>
<BR>那么关于final class，我想大家都可以猜出来了，对，它的目的就是防止它派生出子类， <BR>其实，它的作用等价于将该class里面的所有方法都声明为final了。《完》<BR><img src ="http://www.blogjava.net/linq/aggbug/26079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/linq/" target="_blank">未来刀客</a> 2005-12-30 16:15 <a href="http://www.blogjava.net/linq/articles/26079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>