2016-08-14 52 views
-1

最终是java中的访问修饰符还是非访问修饰符?关于Thread类的setName()方法中的final关键字

线程类的这个setName()方法public final void setName(string name)真的最后?如果是的话,这意味着一旦线程名称被改变,那么由于最终的关键字,它不能被更改。

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

PLZ指导我正确答案..

+0

另一个很好的问题来为你读:http://stackoverflow.com/questions/1351568/java-basics-about-final-keyword –

+0

@ErwinBolwidt非常感谢 – Lalaboy

+0

公共final void setName(String name) “你不明白吗? “final”的哪一部分你不明白? – EJP

回答

0

请理解之间存在差异:制作member variables作为最终和

  • 的任何每当variables

    1. 班级被标记为最终,这意味着他们不能在以后更改

    2. 要记住的点:正如@GhostCat指出的那样,在将member variables标记为final时,一旦最终变量被赋值,它总是包含相同的值,但是它所引用的对象可能会被更改。例如,考虑此List对象:

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

      看到this回答更多的细节。

  • 标记method declarations作为最终

    • 每当任何method被声明为final的,这意味着它不能是不能被子类覆盖。
  • 制作class ES在Java作为最终
    • 每当任何类被声明为最终,这意味着它不能子类,即,它不能由任何其他类扩展。 (如String类)

  • 现在,因为Thread类的setName()方法final并不意味着我们不能改变这个Threadname。相反,它只是意味着这个方法不能被这个类的类覆盖。

    +0

    您也可以添加有关制作课程的信息。也许可以指出,是的,最终变量指向的引用也不能改变;但变量本身仍然可以“改变”(如:当该变量是列表时添加/删除元素)。 – GhostCat

    +0

    @Raman Sahasi非常感谢! – Lalaboy

    +0

    @GhostCat谢谢 – Lalaboy