final的使用

final修饰类、方法、属性。但不能修饰抽象类,因为抽象类一般需要被继承,final修饰后就不能被继承了。

  1. final修饰类,则该类不能被继承。
  2. final修饰方法,则方法不能被重写,但能被重载。重载和重写要区分开,父子之间是重写,同一个类里面是重写。
  3. final修饰属性,此属性就是一个常量,不能被再次赋值;属性的引用地址不可变,但是地址中的内容可以变。
    (1)对于一个final变量,如果是基本数据类型的变量,则其数值一旦初始化之后便不能被更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
    (2)根据下面的代码,可以看出StringBuilder中的内容变了,但所指向的哈希编码却没发生变化,在java中每个对象都有自己独一无二的哈希编码,根据这个编码就能确定这个对象。因而使用final关键字修饰一个变量时,是指引用变量不能变,引用变量指向的对象中内容还是可以变的。
public class final1 {
    public static void main(String[] args) {
        final StringBuilder sb = new StringBuilder("金毛");
        System.out.println("sb的内容是"+sb);
        System.out.println(sb+"的哈希编码是:"+sb.hashCode());
        sb.append("叫大黄");
        System.out.println("sb更改后的内容是:"+sb);
        System.out.println(sb+"的哈希编码是:"+sb.hashCode());
    }
}
输出:
sb的内容是金毛
金毛的哈希编码是:1163157884
sb的内容是:金毛叫大黄
金毛叫大黄的哈希编码是:1163157884
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务