当前位置: 首页 > 知识库问答 >
问题:

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

唐涛
2023-03-14

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

Thread类公共最终无效setName(字符串名称)的setName()方法真的是最终的吗?如果是,是否意味着一旦线程名称更改,以后就不能更改,因为最终关键字...?

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

请给我正确的答案。。

共有1个答案

谢泽语
2023-03-14

请理解以下两者之间的区别:

>

  • 成员变量作为最终变量和

    >

  • 每当任何类的变量被标记为最终值时,这意味着它们以后不能更改
  • 要记住的一点:正如@Ghost Cat指出的,当将成员变量标记为最终变量时,一旦分配了最终变量,它总是包含相同的值,但是,它引用的对象可能会被更改。例如考虑这个List对象:

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

    有关更多详细信息,请参阅此答案。

    将方法声明标记为最终声明

    • 每当任何方法被声明为final时,这意味着它不能被子类重写
    • 每当任何类被声明为final时,都意味着它不能被子类化,也就是说,它不能被任何其他类扩展。(例如,字符串类)

    既然类的方法是final,并不意味着我们不能更改这个线程的名称。相反,它只是意味着该方法不能被扩展该类的类重写。

  •  类似资料:
    • 问题内容: 在尝试做一些尝试时,我遇到了一个在本页中描述的问题。 为什么可以使用这种功能?我不知道为什么仅通过覆盖方法就可以将最终参数设置为非最终参数。为什么在方法签名中忽略了final关键字?以及如何让子类在其方法中使用最终变量? 问题答案: Java通过值将参数传递给方法。 因此,对参数的任何更改都不能传播回调用方。由此可见,无论是否声明参数,对调用者而言绝对没有区别。因此,它是方法 实现 的

    • 问题内容: 我经常遇到如下所示的方法: 如果在未传递最终参数的情况下调用此方法会发生什么。例如,可以将稍后更改的Object1(因此未声明为final)传递给此方法 问题答案: Java总是在将参数发送给方法之前先对其进行复制。这意味着最终的调用代码没有任何区别。这仅意味着无法在方法内部重新分配变量。(请注意,如果你有最终对象,则仍然可以更改对象的属性)。

    • 使(或其他集合)成为final的优点/缺点是什么?如果我们尝试这样做呢: 这是有效的吗?现在引用A将指向L所指向的这个数组列表?请帮帮忙。

    • 我刚刚在玩final关键字,并观察到下面的行为,这里我使用一个方法赋值一个final变量,并且该方法在构造函数之前被调用 下面的代码输出如下 我知道在构造函数完成之前需要赋值final变量,这就是这里发生的事情 我找不到的是如何在构造函数之前调用方法,我非常感谢对此的任何解释

    • 问题内容: 我找不到与Python 等效的Java文档,有这样的事情吗? 我正在创建一个对象的快照(用于在任何失败的情况下用于还原);一旦分配了此备份变量,就不应对其进行修改-Python中类似final的功能将非常有用。 问题答案: 在Java中拥有一个变量基本上意味着您一旦分配了变量,就不能重新分配该变量以指向另一个对象。实际上,这并不意味着不能修改该对象。例如,以下Java代码可以很好地运行

    • 修饰类方法的关键字 通过在func关键字之前使用static关键字来定义一个类型方法. 类同样可以使用class关键字来定义一个类型方法, 区别在于class修饰的方法, 允许子类重写 e.g. static static func talk() -> Void { print("\(self) talk method") } class class Pe