final:最终的
- final可以用来修饰的结构:类,方法,属性
- final用来修饰一个类:此类不可以被其他类所继承
例如:String类,System类,StringBuffer类 - final用来修饰方法:此方法不可以被重写
比如Object类中的,getClass()方法 - final用来修饰变量:此时"变量"就称为一个常量了。
5.1.final修饰属性:可以考虑赋值的位置有:显示初始化,代码块中初始化,使用构造器初始化。
5.2. final修饰局部变量:
尤其是使用final修饰形参时,表明此参数是一个常量,当我们调用此方法时,给这个常量形参赋一个实参,一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。
package demo9; public class FinalTest { int num; private void SetText(final int num){ // num=20; //编译不通过,不能给final 变量赋值 System.out.println(num); } public static void main(String[] args) { FinalTest f1=new FinalTest(); f1.SetText(20); } }
一、final使用细节一
对应的案例代码如下:
public class FinalDetail01 { public static void main(String[] args) { CC cc = new CC(); EE ee = new EE(); ee.cal();//输出结果:cal()方法 } } class AA { /** * 1.定义时:如public final double TAX_RATE = 0.08; * 2.在构造器中 * 3.在代码块中 */ public final double TAX_RATE = 0.08;//定义时赋值 public final double TAX_RATE1; public final double TAX_RATE2; public AA() { //在构造器中赋值 TAX_RATE1 = 1.1; } {//在代码块中 赋值 TAX_RATE2 = 2.2; } } class BB { /** * 如果final修饰的属性是静态的,则初始化的位置只能是 * 1、定义时 * 2、在静态代码块,不能在构造器中赋值。 */ public static final double TAX_RATE = 99.9; public static final double TAX_RATE1; static { TAX_RATE1 = 1.1; } } //final类不能继承,但是可以实例化对象 final class CC { } //如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承 //即,仍然遵守继承的机制 class DD { public final void cal() { System.out.println("cal()方法"); } } class EE extends DD{ }
二、final使用细节二
public class FinalDetail02 { public static void main(String[] args) { /* //输出结果: BB静态代码块执行 10000 */ System.out.println(BBB.num); /* 输出结果: 10 */ System.out.println(CCC.num); } } //final和static 搭配使用,效果更高,不会导致类的加载,底层编译器做了优化处理 class CCC { public final static int num = 10; static { System.out.println("CCC静态代码块执行"); } } class BBB { public static int num = 10000; static { System.out.println("BBB静态代码块执行"); } } final class AAA { //一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法 // public final void cry(){ // // } }
以上是fina关键字的详解,如有任何不当之处,可在评论区指正!
共勉:人生没有重来的机会,不要做一个懒人!身懒毁了你的身材,心懒毁了你的梦想!