关键字 final

时间:2022-01-14 18:57:14
package com.zyw.reusableClass;

import java.util.Random;

/**
* Created by zyw on 2016/3/26.
* from think in java
* final数据
* 1.static final VALUE_THREE 做为编译期常量 大写字母命名,字与字下划线分开
* 2.不能因为数据为final就认为在编译时其值固定
* 3.final引用 表示引用不能指向新的对象 数组就是一种引用
*/
public class FinalData {
private static Random random=new Random(47);//private Random random=new Random(47);
// Non-static field 'random' cant be referenced from a static context
private static final int VALUE_TWO=99;
private static final int VALUE_THREE=39;
public static final int i4= random.nextInt(20);
static final int INT_5=random.nextInt(20);
final int b=random.nextInt();
final Value value=new Value(11);
private final int[] a={1,2,4,5};
public static void main(String args[]){
FinalData finalData=new FinalData();
FinalData finalData2=new FinalData();
finalData.value.i++;
for(int i=0;i<finalData.a.length;i++){finalData.a[i]++;}//finalData.value=new Value(22); error
System.out.println(FinalData.i4);
System.out.println(FinalData.INT_5);
System.out.println(finalData.a);
System.out.println(finalData2.a);
}
}
class Value{
int i;
public Value(int i){this.i=i;}
}
package com.zyw.reusableClass;

/**
* Created by zyw on 2016/3/26.
* blank final 只要保证在使用前,被初始化即可
* 因此一个类的final域可以根据对象有所不同,又保持其恒定不变的特性
*/
public class BlankFinal {
private final Poppet p; public BlankFinal(int i) {
this.p = new Poppet(i);
}
public static void main(String args[]){
BlankFinal blankFinal=new BlankFinal(10);
System.out.println(blankFinal.p.toString());
}
}
class Poppet{
private int i;
Poppet(int i){this.i=i;}
public String toString(){return "poppet("+i+")";}
}
package com.zyw.reusableClass;

/**
* Created by zyw on 2016/3/26.
* 1.private 修饰类中方法隐式指定为final,此方法不需于基类接口的一部分
* ,仅是一些隐藏在类中的程序代码。
* 2.final 修饰方法,以防被继承覆盖。
* 3.final 修饰类 不允许被继承,最终类。
*/
class WithFinals{
private final void f(){System.out.println("withFinal.f()");}
private void g(){System.out.println("withFinal.g()");}
}
class OverridingPrivate extends WithFinals{
public final void f(){System.out.println("OverridingPrivate.f()");}
public void g(){System.out.println("OverridingPrivate.g()");}
}
class OverridingPrivate2 extends OverridingPrivate{
// public final void f(){System.out.println("OverridingPrivate2.f()");}
public final void g(){System.out.println("OverridingPrivate2.g()");}
}
public class FinalOverridingIllusion {
public static void main(String args[]){
OverridingPrivate2 op2=new OverridingPrivate2();
op2.f();
op2.g();
OverridingPrivate op=op2;
op.f();
WithFinals wf=op2;
//wf.g();
}
}