关于Thread类的方法setName()中的final关键字

时间:2016-08-14 05:27:42

标签: java multithreading

最终是java中的访问修饰符还是非访问修饰符?

这个Thread类的setName()方法 public final void setName(string name)真的是最终的吗?如果是,这意味着一旦线程名称被更改,则由于最终关键字而无法在以后更改。?

或者final不是方法setName()的一部分?

Plz指导我正确答案..

1 个答案:

答案 0 :(得分:0)

请理解:

之间存在差异
  1. member variables定为最终

    • 每当任何班级的variables被标记为最终时,都意味着以后无法更改
    • 指向记住:正如@GhostCat指出的那样,当将member variables标记为final时,一旦指定了最终变量,它总是包含相同的值,但是,它所指的对象可能会被改变。例如,考虑这个List对象:

      final List<Integer> list = new ArrayList<Integer>();  
      list = new ArrayList<Integer>(); // Invalid  
      list.add(2); //Valid  
      

      请参阅this答案了解详情。

  2. method declarations标记为最终

    • 每当任何method被声明为final时,就意味着它不能被子类覆盖。
  3. 在java中将class es作为最终
    • 每当任何类被声明为final时,意味着它不能被子类化,即它不能被任何其他类扩展。 (例如,String类)
  4. 现在setName()类的Thread方法final并不意味着我们无法更改此name的{​​{1}}。相反,它只是意味着Thread这个类的类不能覆盖此方法。