final
<span style="color: #ff0000;"> 特点:
final可以修饰类,该类不能被继承。
final可以修饰方法,该方法不能被重写。(覆盖,复写)
final可以修饰变量,该变量不能被重新赋值。因为这个变量其实常量。
<span style="color: #ff0000;">常量:
A:字面值常量
"hello",10,true
B:<a href="/tag/zidingyi/" target="_blank" class="keywords">自定义</a>常量
final int x = 10;
<span style="color: #008000;">*/
<span style="color: #008000;">//<span style="color: #008000;">final class Fu <span style="color: #008000;">//<span style="color: #008000;">无法从最终Fu进行继承
<span style="color: #0000ff;">class<span style="color: #000000;"> Fu {
<span style="color: #0000ff;">public <span style="color: #0000ff;">int num = 10<span style="color: #000000;">;
<span style="color: #0000ff;">public <span style="color: #0000ff;">final <span style="color: #0000ff;">int num2 = 20<span style="color: #000000;">;
</span><span style="color: #008000;">/*</span><span style="color: #008000;">
public final void show() {
}
</span><span style="color: #008000;">*/</span><span style="color: #000000;">
}
<span style="color: #0000ff;">class Zi <span style="color: #0000ff;">extends<span style="color: #000000;"> Fu {
<span style="color: #008000;">//<span style="color: #008000;"> Zi中的show()无法覆盖Fu中的show()
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> show() {
num = 100<span style="color: #000000;">;
System.out.println(num);
</span><span style="color: #008000;">//</span><span style="color: #008000;">无法为最终变量num2分配值
</span><span style="color: #008000;">//</span><span style="color: #008000;">num2 = 200;</span>
<span style="color: #000000;"> System.out.println(num2);
}
}
<span style="color: #0000ff;">class<span style="color: #000000;"> FinalDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
Zi z = <span style="color: #0000ff;">new<span style="color: #000000;"> Zi();
z.show();
}
}
final修饰变量的特点:
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">局部变量是基本数据类型
<span style="color: #0000ff;">int x = 10<span style="color: #000000;">;
x = 100<span style="color: #000000;">;
System.out.println(x);
<span style="color: #0000ff;">final <span style="color: #0000ff;">int y = 10<span style="color: #000000;">;
<span style="color: #008000;">//<span style="color: #008000;">无法为最终变量y分配值
<span style="color: #008000;">//<span style="color: #008000;">y = 100;
<span style="color: #000000;"> System.out.println(y);
System.out.println("--------------"<span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;">局部变量是引用数据类型</span>
Student s = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Student();
System.out.println(s.age);
<span style="color: #ff0000;">s.age </span></span><span style="color: #ff0000;">= 100</span><span style="color: #000000;"><span style="color: #ff0000;">;//对象的堆内存是可以改变的</span>
System.out.println(s.age);
System.out.println(</span>"--------------"<span style="color: #000000;">);
</span><span style="color: #0000ff;">final</span> Student ss = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Student();
System.out.println(ss.age);
ss.age </span>= 100<span style="color: #000000;">;
System.out.println(ss.age);
</span><span style="color: #008000;">//</span><span style="color: #008000;">重新分配内存空间
</span><span style="color: #ff0000;">//无法为最终变量ss分配值(地址值)</span>
ss = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Student();
}
}
final修饰变量的初始化时机
<span style="color: #0000ff;">int</span><span style="color: #000000;"> num;
</span><span style="color: #0000ff;">final</span> <span style="color: #0000ff;">int</span><span style="color: #000000;"> num2;
{
</span><span style="color: #008000;">//</span><span style="color: #008000;">num2 = 10;</span>
<span style="color: #000000;"> }
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Demo() {
num </span>= 100<span style="color: #000000;">;
</span><span style="color: #008000;">//</span><span style="color: #008000;">无法为最终变量num2分配值</span>
num2 = 200<span style="color: #000000;">;
}
}
<span style="color: #0000ff;">class<span style="color: #000000;"> FinalTest2 {<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
Demo d = <span style="color: #0000ff;">new<span style="color: #000000;"> Demo();
System.out.println(d.num);
System.out.println(d.num2);
}
}