栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中的静态内存如何?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的静态内存如何?

导入与编译后的代码中的任何指令都不相关。它们建立仅在编译时使用的别名。

有一些反射性方法允许加载该类但尚未初始化,但是在大多数情况下,您可以假定只要引用了一个类,该类便已初始化。

静态成员初始化器和静态块的执行就像它们都是源代码顺序中的一个静态初始化器块一样。

通过静态成员变量引用的对象将被强烈引用,直到卸载该类为止。普通

ClassLoader
从不卸载类,但是应用服务器使用的类在正确的条件下可以卸载。但是,这是一个棘手的领域,并且是许多难以诊断的内存泄漏的根源,但这是不使用全局变量的另一个原因。


作为(切向)奖金,这是一个需要考虑的棘手问题:

public class Foo {  private static Foo instance = new Foo();  private static final int DELTA = 6;  private static int base = 7;  private int x;  private Foo() {    x = base + DELTA;  }  public static void main(String... argv) {    System.out.println(Foo.instance.x);  }}

此代码将打印什么?尝试一下,您会看到它显示“ 6”。这里有一些事情在起作用,其中之一是静态初始化的顺序。该代码的执行就像这样编写:

public class Foo {  private static Foo instance;  private static final int DELTA = 6;  private static int base;  static {    instance = null;    base = 0;    instance = new Foo();     base = 7;  }  private int x;  private Foo() {    x = base + 6;   }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452705.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号