final是java中的访问修饰符还是非访问修饰符?
线程类public final void setName(字符串名称(的这个setName((方法真的是final吗?如果是的话,这是否意味着一旦线程名称被更改,那么由于最终关键字..,它以后就不能更改了。。?
或者final不是方法setName((的一部分?
请给我一个正确的答案。。
请理解以下两者之间的区别:
-
将
member variables
作为最终和- 每当任何类的
variables
被标记为final时,就意味着以后不能更改它们 -
请记住:正如@GhostCat所指出的,当将
member variables
标记为final时,一旦指定了final变量,它总是包含相同的值,然而,它所引用的对象可能会更改。例如,考虑这个List
对象:final List<Integer> list = new ArrayList<Integer>(); list = new ArrayList<Integer>(); // Invalid list.add(2); //Valid
有关更多详细信息,请参阅此答案。
- 每当任何类的
-
将
method declarations
标记为最终- 每当任何
method
被声明为final时,就意味着它不能被子类覆盖
- 每当任何
-
将java中的
class
es作为最终版本- 每当任何类被声明为final时,就意味着它不能被子类化,也就是说,它不能被任何其他类扩展。(例如,字符串类(
既然Thread
类的setName()
方法是final
,并不意味着我们不能更改该Thread
的name
。相反,它只是意味着这个方法不能被extends
这个类的类重写。