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

在Java中使用静态变量的优势

史鹏云
2023-03-14
问题内容

说我有两个这样的课程:

class A{  
    private static Random random = new Random();

    public A(){  
        // Do something.
    }

    public Integer methodGetsCalledQuiteOften(){
        return random.nextInt();
    }
}

class B{  
     private Random random;

     public A(){  
         random = new Random();
         // Do something.
     }

     public Integer methodGetsCalledQuiteOften(){
         return random.nextInt();
     }
}

在两个实例都被多次实例化并且这两个类的实例的方法methodGetsCalledQuiteOften被大量调用的情况下,使用在A类中持有的静态变量而不是在其中使用任何
实际的 优点/缺点(时间,内存)在每个单独的实例中Random()创建一个新Random()对象,例如在类B中?

该应用程序是多线程的,并且具有更高的随机性,因此我认为我要使用static
SecureRandom。如果在分析后这将是一个真正的速度因素,我可能会选择其他东西。


问题答案:

实际的 优缺点取决于 实际的
代码。换句话说,它取决于B创建该方法的频率与调用该方法的频率等的比率。等等。您应该对应用程序进行概要分析,看看它是否产生合理的影响。

A会比B更有表现吗?当然。但是您是否会注意到取决于您的用法。A会比B使用更少的内存吗?当然可以,但是是否在乎取决于您要保留多少个A / B实例。

真正唯一的其他考虑因素是确定性。由于您没有为Random实例指定种子,因此我认为您不在乎是否可以从Random中再现数字序列。但值得注意的是…如果您有一个共享的Random,那么要保证A的某些实例的确定性数字序列比B中的每个实例要难得多。



 类似资料:
  • 问题内容: 根据Java,静态变量可以通过类名访问,但是即使Java不建议使用静态变量,类对象也可以访问它们,并且给出相同的答案。 我知道该变量只有一个副本,并且所有对象和其他事物的值都相同。Java为什么建议使用类名而不是类对象? 问题答案: 因为可能会造成混淆!静态成员上没有动态调度。 看一下这个令人困惑的代码:(可能是语法错误;我的Java生锈了) 看起来很混乱,因为方法似乎是多态的,所以输

  • 问题内容: 在android中,推荐使用静态变量吗?例如,用Java实现Singleton模式,我通常这样做: 此外,Android JVM何时可以清除此漏洞? 问题答案: 字段会整体附加到实例,而实例又附加到加载了类的。整个回收时将被卸载。我确信这会在销毁该应用程序时发生(不是在它进入后台或暂停但完全关闭时发生)。 因此,只要你的应用程序运行,就可以将其视为生存。Singleton是个好主意吗?

  • 我不知道什么时候在程序中使用一个静态/非静态变量。 我理解非静态/静态变量之间的区别,但我只是不知道何时使用每一个变量。那么在上面的代码中,为什么函数不能是静态的呢?(什么时候应该是静态的?)

  • 当使用静态变量确保触发器只触发一次时,我们注意到测试类中的一些有趣行为。考虑以下触发器、类和testclass: 触发: 类: 测试类: 基于这一点,我期望100%的代码覆盖率,但当您运行这一行时,就会出现RecursiveClass。DostuffinUpdate();中,触发器将不会执行,因为静态变量似乎仍在设置中。根据我在文档中读到的内容,静态变量仅在整个事务中保存(即插入或更新)。测试类中

  • 问题内容: 我想要以下设置: 这在Java中可能吗?怎么样?如果可以避免的话,我宁愿不使用实例变量/方法。 谢谢! 编辑: 常量是数据库表的名称。每个子对象都是一个微型ORM。 问题答案: 您无法完全按照自己的意愿去做。也许可以接受的折衷方案是:

  • 我有以下代码: 当我尝试编译它时,会出现以下错误: 因此,我尝试使dbConnect静态如下: