static-initializer相关内容
..
我在博客上看到了建议以下是在 Java 枚举中使用 getCode(int) 进行“反向查找"的合理方法: 公共枚举状态{等待(0),准备好(1),跳过(-1),已完成(5);private static final Map抬头= new HashMap();静止的 {for(Status s : EnumSet.allOf(Status.class))lookup.put(s.getCode(
..
所以我最近一直在复习我的 Java 技能,并且发现了一些我以前不知道的功能.静态和实例初始化器就是两种这样的技术. 我的问题是什么时候会使用初始化程序而不是将代码包含在构造函数中?我已经想到了几个明显的可能性: 静态/实例初始化器可用于设置“最终"静态/实例变量的值,而构造函数不能 静态初始化器可用于设置类中任何静态变量的值,这应该比在开始时使用“if (someStaticVa
..
为什么 Java 不允许从静态初始化块中抛出已检查的异常?这个设计决定背后的原因是什么? 解决方案 因为无法在您的源中处理这些已检查的异常.您无法控制初始化过程,并且无法从源中调用静态块,因此您可以使用 try-catch 包围它们. 由于您无法处理已检查异常指示的任何错误,因此决定禁止抛出已检查异常静态块. 静态块不得抛出已检查异常,但仍允许抛出未检查/运行时异常.但根据上述
..
我正在使用静态代码块来初始化我拥有的注册表中的一些控制器.因此,我的问题是,我能否保证在第一次加载类时,这个静态代码块只会被绝对调用一次?我知道我不能保证什么时候会调用这个代码块,我猜它是在类加载器第一次加载它的时候.我意识到我可以在静态代码块中的类上进行同步,但我猜这实际上是发生了什么? 简单的代码示例是; class FooRegistry {静止的 {//这段代码只能被调用一次add
..
假设一个项目包含多个类,每个类都有一个静态初始化块.这些块以什么顺序运行?我知道在一个类中,这些块按照它们在代码中出现的顺序运行.我读过它在各个类中都是相同的,但是我编写的一些示例代码不同意这一点.我使用了这个代码: package pkg;公共类负载测试{公共静态无效主(字符串 [] args){System.out.println("开始");新的孩子();System.out.printl
..
我的问题是关于 static 关键字的一种特殊用法.可以使用 static 关键字来覆盖类中不属于任何函数的代码块.例如下面的代码编译: 公共类测试{private static final int a;静止的 {一 = 5;做某事(一);}私有静态 int doSomething(int x) {返回 (x+5);}} 如果删除 static 关键字,它会抱怨,因为变量 a 是 final.
..
我的问题是关于 static 关键字的一种特殊用法.可以使用 static 关键字来覆盖类中不属于任何函数的代码块.例如下面的代码编译: 公共类测试{private static final int a;静止的 {一 = 5;做某事(一);}私有静态 int doSomething(int x) {返回 (x+5);}} 如果删除 static 关键字,它会抱怨,因为变量 a 是 final.
..
您可能会问,我为什么要这样做-这是因为我正在使用一个类(来自外部库),该类在其静态初始化程序中进行填充,因此我需要知道它是否已完成. 我查看了ClassLoader,但没有发现任何有用的内容.有什么想法吗? 解决方案 您可以使用ClassLoader.findLoadedClass()方法.如果返回null,则不会加载该类.这样,如果尚未加载该类,则不会加载它. 警告:此代码在
..
我有几个班级,如下所示 public class TrueFalseQuestion implements Question{ static{ QuestionFactory.registerType("TrueFalse", "Question"); } public TrueFalseQuestion(){} } ... public c
..
我最近收到此警告(VC ++ 2010) warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators 我假设这是关键部分.自从我的操作系统课程开始已经有一段时间了,所以我真的无法弄清楚这意味着什么.如果我没记错的话,关键部分可以使用共享资源.那么,该警告与
..
我正在尝试使用相同的初始值设定项来初始化大量元素. 64个元素只是一个例子-我想使其至少16k.不幸的是,一个简单的 let array : [AllocatedMemory; 64] = [AllocatedMemory::{mem:&mut []};64]; 不起作用,因为AllocatedMemory结构未实现Copy error: the trait `co
..
static boolean isClassLoaded(String fullname) { try { Class.forName(fullname, false, Loader.instance().getModClassLoader()); return true; } catch (Exception e) { return
..
我有一个静态的指向函数的指针数组,该指针作为类的成员. 我需要对其进行初始化,但事实证明此数组的长度为64K,因此使用像{ x, y, z, ... }这样的静态初始化程序进行初始化是不切实际的,因为这样会使代码混乱. 我必须通过几个循环的代码来初始化它. 我想到的方法是通过在构造函数中初始化static数组并为其设置一个标志,因此只有构造该类的第一个实例时才会触发该初始化.
..
Quoth JLS#8.1 .3 : 内部类不能声明静态初始化程序( 这是这样证明的: class A { class B { static { // Compile-time Error: Cannot define static initializer in inner type A.B System.out.println("Cl
..
我有以下代码,错误已注释 public final class MyStaticClass { private MyStaticClass(){} static { a = new A(); b =新B(a); //在定义字段之前无法访问字段 } private static final A a; 私人静态决赛B b; } 我对使用静态初
..
我遇到过我的程序挂起的情况,看起来像死锁。但我试着用jconsole和visualvm搞清楚,但他们没有发现任何死锁。示例代码: public class StaticInitializer { private static int state = 10; static { 线程t1 =新线程(新的Runnable(){ @Override public void ru
..
我正在使用静态代码块来初始化我所拥有的注册表中的某些控制器。因此,我的问题是,我可以保证这个静态代码块只在首次加载类时才会被调用一次吗?我知道我无法保证何时会调用此代码块,我猜它是在Classloader首次加载时。我意识到我可以在静态代码块中的类上进行同步,但我的猜测实际上这是怎么回事? 简单的代码示例是; class FooRegistry { static { //这个
..
为什么Java不允许从静态初始化块中抛出已检查的异常?这个设计决定背后的原因是什么? 解决方案 因为无法在源代码中处理这些已检查的异常。您无法控制初始化过程,并且无法从源中调用静态{}块,因此您可以使用try-catch包围它们。 因为您不能处理由已检查异常指示的任何错误,决定禁止抛出已检查的异常静态块。 静态块不得抛出已检查异常但仍允许抛出未经检查/运行时异常。但根据上述原因
..
假设一个项目包含几个类,每个类都有一个静态初始化块。这些块以什么顺序运行?我知道在类中,这些块按照它们在代码中出现的顺序运行。我已经读过它在各个类中都是一样的,但我写的一些示例代码不同意这一点。我使用了这段代码: package pkg; 公共类LoadTest { public static void main(String [] args){ System.out.print
..