classZ{staticfinalintx=10;static{System.out.println("SIB");}}publicclassY{publicstaticvoidmain(String[]args){System.out.println(Z.x);}}输出:10为什么在这种情况下不加载静态初始化block??当静态x调用时,类z的所有静态成员必须至少加载一次,但静态初始化block不会加载。 最佳答案 Fieldsthathavethestaticmodifierintheirdeclarationarecalle
我注意到静态初始化器中的某些东西可能是javac中的错误。我构建了一个场景,我可以在其中为变量赋值但不读回该值。下面是两个示例,第一个编译正常,第二个在尝试从tmp读取值时出错,但出于某种原因允许将值分配给tmp。我可以理解它是否既不能读取也不能写入变量,因为tmp是在静态初始化程序之后声明的,但是只有其中一个错误对我来说没有意义。//CompilesSuccessfully:publicclassScript{publicstaticObjecttmp;static{tmp=newObject();System.out.println(tmp);}}//erroronlyonther
我的代码中有一堆常量,用于我系统的各种可调整属性。我将它们全部移动到中央.properties文件中。我当前的解决方案是使用一个Properties.java静态加载.properties文件并公开各种getter方法,如下所示:publicclassProperties{privatestaticfinalStringFILE_NAME="myfile.properties";privatestaticfinaljava.util.Propertiesprops;static{InputStreamin=Properties.class.getClassLoader().getRes
我记得几年前我使用静态初始化器来调用类级别的设置操作。我记得它有非常奇怪的行为,我只是决定避开它们。也许是因为我弄乱了上下顺序或者是新手。但我遇到了重新审视它们的需要,我想确保没有更好的方法同样简洁。我知道这不流行,但我经常使用数据驱动类来维护从数据库导入的静态实例列表。publicclassStratBand{privatestaticvolatileImmutableListstratBands=importFromDb();privatefinalintminRange;privatefinalintmaxRange;privatestaticImmutableListimpor
一个类的所有对象共享静态变量。但是什么时候为静态变量分配内存呢?是在为类创建第一个对象时吗?还是甚至在创建该类的任何实例之前就发生了?实例变量也在运行时分配内存。静态变量的内存是在运行时分配还是编译时分配? 最佳答案 当类被加载时,在运行时。详情可以找here. 关于java-什么时候为java中的静态变量分配内存?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/31110432
这个问题在这里已经有了答案:Non-staticvariablecannotbereferencedfromastaticcontext(15个答案)关闭6年前。我的Spring-Boot应用程序中有2个类:-任务-运行者runner类包含我的main方法,我在其中尝试从我的Tasks类调用方法:运行者:@ComponentpublicclassRunner{Taskstasks;@AutowiredpublicvoidsetTasks(Taskstasks){this.tasks=tasks;}publicstaticvoidmain(String[]args){//errorbei
我有一个静态导入org.junit.Assert.assertEquals方法的Junit4测试用例。importstaticorg.junit.Assert.assertEquals;在这个类中,我创建了一个实用方法来断言一些复杂的内部类,这些类没有实现equals(并且也很难实现)。privatevoidassertEquals(MyObjo1,MyObjo2){assertEquals(o1.getSomething(),o2.getSomething());assertEquals(o1.getSomethingElse(),o2.getSomethingElse());...
好的,所以我得到了一个静态ImageIcon,但图像没有显示出来。在同一个程序中,我使用了其他ImagesIcon,但它们不是静态的,所以当我声明它们时,我是这样做的:publicImageIconblabla=newImageIcon(getClass().getResource(blabla.png));但是,如果我声明一个ImageIconStatic,我就无法使用该行,因为无法从静态值访问getClass()。现在这些图像没有使用这个显示:publicstaticImageIconblabla=newImageIcon(blabla.png);感谢您的帮助!publicstat
我有一个没有连接到Internet的linuxbox。我已经在上面安装了Firefox24.0和jre1.7.0_40(还有1.7.0_17)当我使用本地安装在盒子上的Web应用程序启动FF时,我收到一个警告弹出窗口JavaUpdateNeeded;YourJavaversionisoutofdate我不明白Java是如何知道“过时”的???什么比较什么?我假设检查oracle.com上的可用版本,如果系统上安装的当前版本太旧,则删除此警告。或者启动的应用程序本身带有一些关于Java版本的信息,哪些是可用的,哪些是在编译时使用的?? 最佳答案
在开发一个二维vector类作为数学库的一部分时,出于风格和可用性的原因,我正在考虑使用静态方法和实例方法对。也就是说,两个等价的函数,但一个是静态的和非变异的,另一个是实例化的和变异的。我知道我不是第一个考虑这个问题的人(例如,参见here),但我还没有找到任何直接解决这个问题的信息。拥有静态和实例方法对的优点:有些人更喜欢使用其中一种,在某些情况下,能够进行选择会使代码更易于阅读。这意味着当同时提供静态方法和实例方法时,静态方法不会发生变化。这可以使调用代码更加清晰,例如:someVector=Vector2d.add(vec1,vec2);someVector=(newVecto