JAVA基础知识(二)------final修饰符

final具有“不可改变的”含义,它可以修饰非抽象类、非抽象成员方法和变量。

  •  用final修饰的类不能被继承,没有子类。
  •  用final修饰的方法不能被子类方法覆盖。
  • 用final修饰的变量表示常量,只能被赋值一次。

1、final类

    在以下情况下,可以考虑把类定义成final类型,使得这个类不能被继承:

  •  不是专门为继承而设计的类,类本身的方法之间有复杂的调用关系。假如随意创建这些类的子类,子类有可能错误地修改父类的实现细节。
  •  出于安全的原因,类的实现细节不允许有任何改动。
  • 在创建对象模型时,确定这个类不会再被护。

2、final方法

    在某些情况下,出于安全的原因,父类不允许子类覆盖某个方法,此时可以把这个方法声明为final类型

3、final变量

    final变量具有以下特征:

    (1)final修饰符可以修饰静态变量、实例变量、局部变量分别表示静态常量、实例常量、局部常量。

    (2)被final修饰的成员变量必须显式初始化,否则会导致编译错误。如:

          

public class Sample {
  final int va1;                       //编译出错,va1实例常量必须被显式初始化
 final static int val2;             //编译出错,val2静态常量必须被显式初始化
 
 int val3;                              //合法,被初始化默认值0
  static int val4;                    //合法,被初始化默认值0
}

    对于final类型的实例变量,可以在定义变量或在构造方法中进行初始化;对于final类型的静态变量,可以在定义变量时进行初始化,也可以在静态代码块中进行初始化。例如:

        

public class Sample {
  final int a = 1;                       //合法
  final int b;
  static final int c = 3;              //合法
  static final int d;
	
  static{
    d = 4; //合法
 }
  public Sample() {
    b = 2; //合法
  }
}

 

   (3)final变量只能赋值一次。例如:

         

public class Sample {
  private final int var1 = 1;           //定义并初始化var1实例变量  
  public Sample() {
    var1 = 2;                                 //编译出错,不允许改变val1实例变量的值
 }

  public void method(fina int param) {
     final int var2 = 1;                   //定义并初始化var2局部变量
   var2++;                                //编译出错,不允许改变var2局部变量的值
   param++;                             //编译出错,不允许改变final类型参数的值
 }
}

   (4)如果引用类型的变量用final修饰,那么该变量只能始终引用一个对象,但可以改变对象的内容。例如:

         

public class Sample {
  public int var;
  public Sampe(int var){this.var = var;}

  public static void main(String args[]) {
    final Sample s = new Sample(1);  //合法,定义并初始化final类型的引用变量s
    s.var = 2;             //合法,修改引用变量s所引用的Sample的对象var属性
   
   s = new Sample(2);                     //编译错误,不能改变引用变量s所引用的Sample对象
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值