Java中final

2016-04-17  本文已影响123人  WilsonMing

谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法。

  1. 修饰类
    • 当用final修饰一个类时,表明这个类不能被继承。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。


      示例代码
  2. 修饰方法

"使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。"

因此,如果想明确禁止指定方法在子类中不被重写,就将该方法设置为final(类的private方法会隐式地被指定为final方法)

  1. 修饰变量:对于修饰为final的变量,它就不能再赋值。
    • 如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;


      示例代码

      上面的一段代码中,对变量i和obj的重新赋值都报错了。

    • 如果是引用类型的变量,则在对其初始化之后便不能在赋值,但该对象行为不被final影响,也就是对象里面
public class Year {
    private int year;
    private String name;

    public Year(int year, String name) {
        this.year = year;
        this.name = name;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Year{" +
                "year=" + year +
                ", name='" + name + '\'' +
                '}';
    }

    public static void main(String[] args) {
        final Year year=new Year(1,"2");
        System.out.println(year.toString());
        year.setYear(3);
        System.out.println(year.toString());
    }

}

输出

Year{year=1, name='2'}
Year{year=3, name='2'}
上一篇 下一篇

猜你喜欢

热点阅读