Java final关键字使用

    Java中的final关键字非常重要,它可以应用于类、方法以及变量。final修饰的类不可被继承,方法不可被重写,变量值不可以被改变。

    final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。


    什么是final变量?
    凡是对成员变量或者局部变量声明为final的都叫作final变量。final变量经常和static关键字一起使用,作为常量。

    这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变,但引用变量所指向的对象中的内容还是可以改变的。

class Animal {
	private static final int COUNT = 80;
	public static void main(String[] args) {
		final StringBuffer sb = new StringBuffer("helloworld");
		sb.append("java");
		sb = new StringBuffer("hello");  //编译报错
	}
}
    

    什么是final方法?
    final也可以声明方法。方法前面加上final关键字,代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为final。final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。下面是final方法的例子:

class Animal {
	public final String getName(){
		return "animal" ;
	}
}

class Dog extends Animal{
	@Override
	public final String getName(){
		return "dog" ; //compilation error: overridden method is final
	}
}
    

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

final class Animal {
	public String getName(){
		return "animal" ;
	}
}

class Dog extends Animal{ //compilation error: cannot inherit from final class
}

    下面总结了一些使用final关键字的好处:
    final关键字提高了性能。JVM和Java应用都会缓存final变量。
    final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
    使用final关键字,JVM会对方法、变量及类进行优化。


    关于final的重要知识点
    final关键字可以用于成员变量、本地变量、方法以及类。
    final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。例如

class Animal {
    final int count = 0; //在定义时便给址值
    final int i; //因为要在构造函数中进行初始化,所以此处便不可再给值
    final List list; //此变量也与上面的一样
    Animal() {
        i = 100;
        list = new LinkedList();
    }
    Animal(int k, List l) {
        i = k;
        list = l;
    }
}


    不能对final变量再次赋值。
    在匿名类中所有变量都必须是final变量。
    final方法不能被重写。
    final类不能被继承。
    final关键字不同于finally关键字,后者用于异常处理。
    final关键字容易与finalize()方法搞混,后者是在Object类中定义的方法,是在垃圾回收之前被JVM调用的方法。
    接口中声明的所有变量本身是final的。
    final和abstract这两个关键字是反相关的,final类就不可能是abstract的。
    final方法在编译阶段绑定,称为静态绑定(static binding)。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值