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

Web应用程序中Java静态成员的范围

鞠凌龙
2023-03-14
问题内容

是否在同一Web应用程序的实例之间共享Java静态变量?

class MyClass
{
    private static SomeClass myStaticObject = new SomeClass();
}

如果Web应用程序使用 MyClass 并且该应用程序的多个实例在Web服务器上运行, myStaticObject 是否被 多次
初始化?


问题答案:

通常,是的。大多数容器将为每个Web应用程序提供单独的类加载器。当多个应用程序使用该类时,这将导致该类被多次加载,从而导致该静态变量的多个实例。

陈述Java语言规范以供参考:

在运行时,具有相同二进制名称的几种引用类型可以由不同的类加载器同时加载。这些类型可能代表相同的类型声明,也可能不代表相同的类型声明。即使两个这样的类型确实表示相同的类型声明,它们也被认为是不同的。

通过推论,将存在多个静态变量实例,除非这些类由父类加载器仅加载一次,而从未由其他任何类加载器加载到其他地方。



 类似资料:
  • 这个问题相当复杂,我不知道以前是否有人问过,因为我不知道如何在搜索框中表达这个问题。 下面是代码: 静态成员将在更多静态方法中再次使用,但我需要首先将其时区设置为“UTC”。有没有方法调用<code>。setTimeZone(“UTC”)一劳永逸?或者我必须调用<code>。setTimeZone(“UTC”)在每个静态方法中?

  • 问题内容: 我想不,不是,因为每个进程当然都有自己的内存空间。 但是整个JVM实际如何工作?我启动的每个Java程序在单独的进程中是否都有单独的JVM?系统中运行的Java程序是否共享任何东西?操作系统和JVM实现之间有区别吗?是否可以 使 程序共享变量(即直接通过JVM而不是通常的IPC机制)?是否有更多特殊用途的单进程JVM? 通常,关于JVM胆量的推荐读物是什么?该规范?一些实现的源代码?网

  • 我已经知道java中的内部类不能有静态成员,除非它们被宣布为最终的。但是,理论上不应该在局部类中声明静态成员吗? 例如。 我知道内部类的标准初始化是这样发生的: 但为什么不这样呢?? 当创建OuterClass实例时,它还包含innerClass的副本。因此,如果允许在innerClass中存在静态(只是静态的,但不是最终的)成员,那么应该(或可以)以这种方式访问它们 outer class in

  • 问题内容: 假设我有以下课程: 以及这两个子类: 和 我的问题是这两个子类从父类共享相同的静态curID成员,而不是拥有不同的成员。 所以,如果我这样做: r1,r2,r3的ID为0,1,2,而t1,t2,t3的ID为3,4,5。除了这些,我希望t1,t2,t3的值分别为0、1、2,即使用curID静态变量的另一个副本。 这可能吗?如何? 问题答案: 正如其他人已经写过的,静态成员已绑定到该类,因

  • 本文向大家介绍C++中静态成员函数与静态成员变量(static ),包括了C++中静态成员函数与静态成员变量(static )的使用技巧和注意事项,需要的朋友参考一下 C++中静态成员函数与静态成员变量(static ) 这篇介绍了静态成员函数与静态成员变量,是我的读书笔记,我希望它够简短但又比较全面,起到复习的作用。如果有一些C++知识记不清楚了,它可以帮你很快回忆起来。 复习C语言的stati

  • 主要内容:1、静态属性,2、静态函数在 C# 中,我们可以使用 static 关键字声明属于类型本身而不是属于特定对象的静态成员,因此不需要使用对象来访问静态成员。在类、接口和结构体中可以使用 static 关键字修饰变量、函数、构造函数、类、属性、运算符和事件。 注意:索引器和析构函数不能是静态的。 若在定义某个成员时使用 static 关键字,则表示该类仅存在此成员的一个实例,也就是说当我们将一个类的成员声明为静态成员时,无论创