java final相关总结

1、final类不能在派生子类。即:不能被继承。

plus:final类中的成员可以是final的也可以不是。但是其中的方法默认就是final的。这是很自然的,一个类不能被修改,其中的方法自然也不能被修改。

2、final方法不能被重写,但可以重载。

plus:JAVA中的final方法还有一个用处就是,它相当于c++中的内联函数,即在执行该方法时直接展开,而没有像调用普通方法那样内部繁琐的过程。由于当方法调用的消耗明显大于方法执行的消耗时,内联方法的优势才能体现出来。所以在java中会自动判断final方法的规模大小来决定是否将其视为内联方法。

3、final变量一经赋值就不能更改。可以用来定义常量:final int num=999;

public class ClassA {
	final int i;
        final int j=0;
	public ClassA() {
		i = 0;//未初始化成员final变量,必须在构造函数内赋值,且只能赋值一次。             
	}

	void method1() {
		final int k;
		k = 0;//未初始化局部final变量,必须在方法内赋值,且只能赋值一次。


	}

}

下面针对final成员变量,成员对象再来看一段代码(代码以注释为重,多余可以忽略。)

final对于基本数据类型的含义:数值恒定不变;对于对象类型的含义:引用恒定不变,而所指向的对象的内容可以改变。

class Value {
  int i; // Package access
  public Value(int i) { this.i = i; }
}

public class FinalData {
  private static Random rand = new Random(47);
  private String id;
  public FinalData(String id) { this.id = id; }
  private final int valueOne = 9;
  private static final int VALUE_TWO = 99;//1、static final域只占据一段不能改变的存储空间。
  public static final int VALUE_THREE = 39;
  private final int i4 = rand.nextInt(20);
  static final int INT_5 = rand.nextInt(20);
  private Value v1 = new Value(11);//指向对象的引用
  private final Value v2 = new Value(22);
  private static final Value VAL_3 = new Value(33);
  // Arrays:
  private final int[] a = { 1, 2, 3, 4, 5, 6 };
  public String toString() {
    return id + ": " + "i4 = " + i4 + ", INT_5 = " + INT_5;
  }
  public static void main(String[] args) {
    FinalData fd1 = new FinalData("fd1");
    //! fd1.valueOne++; // Error: can't change value
    fd1.v2.i++; // 引用所指向的对象可以改变
    fd1.v1 = new Value(9); // 非final值
    for(int i = 0; i < fd1.a.length; i++)
      fd1.a[i]++; // Object isn't constant!
    //! fd1.v2 = new Value(0); // final引用不能变
    //! fd1.VAL_3 = new Value(1); // change reference
    //! fd1.a = new int[3];//数组也被看做一个对象
    
    System.out.println(fd1);
    System.out.println("Creating new FinalData");
    FinalData fd2 = new FinalData("fd2");
      System.out.println(fd1);
      System.out.println(fd2);
  }
}

针对注释1:很好理解:static强调只有一份,final强调是一个常量。

注:对于参数,同样可以使用final关键字,性质相同。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值