的几种用法《说说final、finally、finalize的区别?这是一个非常经典的问题。最后是Java保证关键代码一定要执行的机制。finalize是基础类java.lang.Object的一个方法,其设计目的是保证对象在被垃圾回收前完成特定资源的回收。今天我们将重点关注决赛。多年的面试经验告诉我,很多人其实是因为final丢分,而不是其他两个。final可以用来修饰类、方法、变量,各有不同的含义。1、final修饰的类,意味着不能被继承和扩展;2.final修饰的方法意味着不能被覆盖(override);3、final修饰的变量不可修改。如果你能给出以上答案,至少通过。但这样的回答隐藏了很多信息。这里真正改变的是final修改变量的时候。首先,上面的描述不够准确。准确的说,“被final修饰的变量一旦赋值就不能被修改”。请看下面的代码:publicclassMyClass{publicMyClass(intfoo){this.foo=foo;}privatefinalfoo;}这段代码中,类MyClass的成员变量foo被修饰为final,但是没有赋值,而是在构造函数中为其指定的值。当然,你不能认为“最后修改的变量不能修改”是错误的,但至少没有表达出这个意思。其实Java语言的设计是合理的。利用这个特性可以达到这样的目的:当我们发明一个类的时候,有时候会发现有一些参数需要从外部传入。在销毁之前,预计不会更改。在这种情况下,我们可以将这些参数定义为final成员变量,然后外界只能通过构造函数的参数来指定。final可以用来修饰函数参数或者内部变量吗?答案是肯定的。事实上,这种行为是被推荐的,因为它确保变量不会被意外修改。而且,final修饰的变量和参数也可以传递给匿名类。比如Java在实现内部类的时候,实际上会复制一份,而不是直接使用局部变量。final可以防止这里出现数据一致性问题。.外界有很多文章或资料会介绍,final可能会有性能上的好处。例如,使用final可能有助于JVM内联方法,提高编译器执行条件编译的能力等等。坦率地说,很多类似的结论都是基于假设。比如高性能的JVM(比如HotSpot)现在判断内联不一定依赖final提示。我们必须相信JVM还是很聪明的。同样,final变量对性能的影响,在大多数情况下是不需要考虑的。不要指望从这些小技巧中获得所谓的性能优势。相反,使用final更重要的原因应该是提高代码的可读性,防止变量被误修改。***还要强调的是,虽然final会带来不可变的效果,但不代表无论如何都是如此。例如,最后修改java.util.List类型的变量不会阻止修改列表的内容。实际作用是防止变量指向的List对象被重新创建。而如果你需要的是一个不允许修改的List,你可以使用Collections.unmodifiableList()来获取。
