Final
1. final关键字
在Java中, 可以使用final关键字修饰类、方法以及成员变量。
(1).final标记的类不能被继承;
(2).final标记的方法不能被子类复写;
(3).final标记的变量即成为常量,只能被赋值一次,对于基本类型,不可变指的是值对于引用类型,不可变指的是引用地址
注意: 如果使用final来声明常量,请遵守以下常规: final标记的变量名,所有单词字母都需大写.
Final Class
Afinalclasscannot be subclassed.
package me.testfinal; final class Sub{ } class SuSu extends Sub{}//由于Sub是Final定义,所以不能继承 //cannot inherit from final Sub
Finalmethods
Afinalmethodcannot beoverriddenor hidden by subclasses.
package me.testfinal; class Test{ final int I=8; final void say(){ System.out.println("Final定义 允许修改"); } } class Sub extends Test{ void say(){} } public class TestFinal{ public static void main(String[] args){ Sub your=new Sub(); your.say();//编译错误 /*输出:ay() in Sub cannot override say() in Test *///Final定义的不能更改了 } }
Finalvariables
Afinalvariablecan only be initialized once, either via an initializer or an assignment statement.
1.Final 常量 的定义
//Final 1.Final的变量值不能改变 2.Final 的方法不能重写 3.Final的方法不能被继承 package me.testfinal; class Test{ final int I=8; } public class TestFinal{ public static void main(String[] args){ Test my=new Test(); //my.I=100; /*输出: cannot assign a value to final variable i *///Final定义,不能改变这个值~ } }
2.Final & Static Final 常量的定义
//final与static final package me.testfinal; class Test{ //要用大写书写常量 private final String NAME="Gino"; private final int A=100; public final int B=80; public static final int C=60; //空白final public final int D;//必须在构造器时候初始化 Test(){ D=99;//要不在定义时候初始化,要不在构造器初始化 } // public static final int E;//编译错误 /* variable E might not have been initialized *///静态的必须在定义时候就初始化 public void set(){ D=66; /*cannot assign a value to final variable D D=66;*///只能在构造器或者定义的时候初始化他 } } public class TestFinal{ public static void main(String[] args){ Test coco=new Test(); } }
3.Final 修饰 形参
//Final修饰参数 package me.testfinal; class Test{ public void say(final int i){ i=9;//编译错误 /*输出: TestFinal.java:8: error: final parameter i may not be assigned i=9; ^ 1 error *///一旦形参接受了传过来的值,就不能在修改这个值了。这个值只读; System.out.println(i); } } public class TestFinal{ public static void main(String[] args){ Test coco=new Test(); coco.say(5);//传5过去,但是在say方法里面i的值就只能是5了 coco.say(9);//可以传9过去,同理现在say方法里面,i固定是9了 } }
作者:YangGan出处: http://blog.csdn.net/incyanggan本文基于 署名 2.5 中国大陆 许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan (包含链接).