当前位置: 首页 > 面试题库 >

Java的“ final”关键字是否真正提高了安全性?

叶稳
2023-03-14
问题内容

尽管在Java中使用’final’关键字有很多原因,但我不断反复听到的一个原因是它使您的代码更安全。尽管在这种琐碎的情况下这似乎很有意义:

public class Password
{
    public final String passwordHash;
    ...
}

使用final关键字,您希望没有恶意代码能够更改变量passwordHash。但是,使用反射可以更改passwordHash字段上的最终修饰符。

那么“最终”是否提供任何真正的安全性,还是仅仅是安慰剂?

编辑: 有一些非常有趣的讨论,我希望我可以接受多个答案。谢谢各位的意见。


问题答案:

从“经受攻击”的意义上说,这不是“安全”;它更像是“很难被错误搞乱”。

我更喜欢“安全”一词;我觉得这更像是预防事故,而不是恶意。



 类似资料:
  • 问题内容: 在Java中,我们看到了很多可以使用该关键字但很少使用的地方。 例如: 在上述情况下,可以,但是通常不这样做。 当一个方法永远不会被覆盖时,我们可以使用关键字。类似地,对于不会被继承的类。 在任何或所有这些情况下使用final关键字是否真的可以提高性能?如果是这样,那又如何?请解释。如果对性能的正确使用确实很重要,那么Java程序员应该养成什么习惯来充分利用关键字? 问题答案: 通常不

  • volatile的写操作,无法保证线程安全。例如假如线程1,线程2 在进行read,load 操作中,发现主内存中count的值都是5,那么都会加载这个最新的值,在线程1对count进行修改之后,会write到主内存中,主内存中的count变量就会变为6;线程2由于已经进行read,load操作,在进行运算之后,也会更新主内存count的变量值为6;导致两个线程及时用volatile关键字修改之后,还是会存在并发的情况。

  • 问题内容: 似乎几乎没有人意识到这一点,但是Java中的“ thisreference”是最终的。在正常的编程天中,我认为可以通过在自己的类中重新定义此引用来重新定义整个实例: 为什么此引用在Java中是最终的? 问题答案: 问题不在于它是参考,而是它本身根本不是参考。是一个 关键字 ,“表示一个值,该值是对为其调用实例方法或默认方法的对象的引用”(JLS§15.8.3)。 此外,从可以重新分配变

  • 本文向大家介绍Java final static abstract关键字概述,包括了Java final static abstract关键字概述的使用技巧和注意事项,需要的朋友参考一下 一,抽象类:abstract 1,只要有一个或一个以上抽象方法的类,必须用abstract声明为抽象类; 2,抽象类中可以有具体的实现方法; 3,抽象类中可以没有抽象方法; 4,抽象类中的抽象方法必须被它的子类实

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

  • 本文向大家介绍Java中的final关键字深入理解,包括了Java中的final关键字深入理解的使用技巧和注意事项,需要的朋友参考一下  java final关键字详解: 前言: Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的