java final
2016-04-05 10:48
501 查看
final:
1.修饰:非抽象类、非抽象类成员方法、变量2.类是final的,方法也是final的,没有子类
方法是final的,可以被子类调用,不能被重写,不能修饰构造方法
变量是final的,静态变量、实例变量和局部变量,只能被赋值一次
Note:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的
Code:
1.final类
(父)public final class TestFinalFather { public final void Methold(){} }
(子)
public final class TestFinalSon extends TestFinalFather{//*不能被继承 <span style="white-space:pre"> </span> }报错
Note:不能被继承
2.final方法
(父)public class TestFinalFather { <span style="white-space:pre"> </span>public final void Methold1(){} <span style="white-space:pre"> </span>public void Methold2(){} <span style="white-space:pre"> </span>private void Methold3(){} }
(子)
</pre><pre name="code" class="java">public final class TestFinalSon extends TestFinalFather{ public final TestFinalSon(){//不能修饰构造方法 } public void Methold1(){}//*不能被子类的方法覆盖 public void Methold2(){} public static void main(String args[]){ TestFinalSon ts=new TestFinalSon(); ts.Methold1(); ts.Methold2(); ts.Methold3();//*final方法可以被子类调用,但是private方法不能被子类调用 } }
(报错)
Note:不能修饰构造方法
Note:不能被子类的方法覆盖
Note: final方法可以被子类调用,但是private方法不能被子类调用
3.final变量
public class TestFinalFather { public String args0; public final String args1;//可以先声明,而不给初值 public final String args2="wwww"; public TestFinalFather(String x) { args1 = x; //赋值 } public static void main(String []args){ TestFinalFather ts= new TestFinalFather("1"); ts.args0="www"; ts.args1="www";//* ts.args2="www";//* System.out.println(ts.args0); } }
(报错)
Note:final类必须初始化,但可以先申明,再初始化
Note:一旦给final变量初值后,值就不能再改变了
深入解析final对象
<pre name="code" class="java"><pre name="code" class="java">public class TestFinal { public static void main(String [] args){ //基本类型 Integer a1=3; int a=3; Integer b1=4; int b=4; Integer c1=a1+1; int c=a+1; //String类型 String Test="aaa"; // public String TestPublic="aa"; String argString="aa"; String argStringTest="aa"; final String argFinal="aa"; String TestString=argString+"a"; String TestFinal=argFinal+"a"; //对象类型 TestFinal tF= new TestFinal(); TestFinal tF2=new TestFinal(); final TestFinal tF1= new TestFinal(); TestClass tC= new TestClass(); System.out.println(b1==c1);//值的比较 System.out.println(b==c);//值的比较 System.out.println(argString==argFinal);//地址比较 true System.out.println(argStringTest==argString);//地址比较 true System.out.println(TestString==Test);//"+" System.out.println(TestFinal==Test);//"+" System.out.println(TestFinal.equals(Test)); System.out.println(TestString.equals(Test)); System.out.println(tF==tF2); System.out.println(tF.equals(tF2)); tF2=tF; // tF1=tF;//*不能改变final类型所指的对象,可以改变对象的内容(属性) } }
http://www.cnblogs.com/dolphin0520/p/3736238.html
Note:"=="和equals没区别,但是String对equals方法进行了重写
一般"=="比较的是对象的地址
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树