Java基础:关键字final,static

一 . final

  含义:adj.最后的,最终的; 决定性的; 不可更改的。在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。

  1)修饰成员变量、局部变量:在编写程序时,我们经常需要说明一个数据是不可变的,我们成为常量。在java中,用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。更重要的是,final会告诉编译器,这个数据是不会修改的,那么编译器就可能会在编译时期就对该数据进行替换甚至执行计算,这样可以对我们的程序起到一点优化。针对引用类型和基本类型有点不一样。

class Value{  
    private int i;  
  
    public Value(){  
    }  
    public Value(int i){  
        this.i = i;  
    }  
    public int getI() {  
        return i;  
    }  
  
    public void setI(int i) {  
        this.i = i;  
    }  
}  
public void finalTest(){  
    //基本数据类型  
    final int a ;  
    a = 1;  
//        a = 2; 编译提醒报错  
    final Value value = new Value(2);  
    value.i = 3;//改变对象的属性值,编译没报错  
//         value = new Value(4);//新对象,编译报错  
} 

  final修饰基本数据类型的时候,变量的值不可以改变;final修饰引用类型的时候,变量引用的对象的地址不可以改变(只能指向该对象,无法再指向其他对象),但是引用的对象是可以改变的。

  2)修饰方法:方法前面加上final关键字,代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为final。

class Value{  
    public final int test(){  
    return 1;  
    }  
}  
class SubValue extends Value{  
//   @Override  
//   public final int test(){//compilation error:override method is final  
//            return 2;  
//   }  
} 

  3)修饰方法参数:方法的形参使用final修饰,代表在这个方法里面该参数都无法被修改(基础数据类型无法修改,引用类型无法修改引用对象的地址)。

public void fianlParams1(final int i){  
//  i = 3;//compilation error: can not assign a value to final variable "i"  
}  
public void fianlParams2(final Value i){  
//  i = new Value(12);//compilation error: can not assign a value to final variable "i"  
}  

  4)修饰类:使用final来修饰的类叫作final类。final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。

猜你喜欢

转载自www.cnblogs.com/knsbyoo/p/9032314.html