Tag: static

静态方法内存分配

我们有两个分类堆和堆栈。 创建对象时,对象的内存存储在堆中。 如果类具有静态方法,可以使用类名调用该怎么办。 如果没有创建对象,那么它将如何分配内存,如果它在哪里分配内存?

Java – 最终变量

我知道,一旦最终变量赋值给它,就无法更改。 但是我对此有几个问题: 当我有一个字段时,说static final JButton button; 在一个类之外,然后在main方法中,尝试为它赋值, button = new JButton(“OK”); ,我收到错误告诉我删除最终修饰符? 但是,由于原始button变量尚未引用一个对象,我的印象是我可以分配一次? 其次,如果我完全删除对button引用,那么我只有static final JButton button; 在课堂外,我的IDE声称“空白的最终字段按钮可能尚未初始化”。 这是否意味着必须初始化所有最终字段? 如果是这样,他们必须在那里初始化,然后我似乎无法在以后初始化它。 另外,愚蠢的问题,但我最初的假设是,当一个实例或数据类型引用最终变量时,它无法分配给其他任何东西是正确的,对吗? 此代码不完整,但提供说明我的观点: public class FinalVarTester { static final JButton button; public static void main(String[] args) { JFrame frame = new JFrame(); Container container = frame.getContentPane(); container.setLayout(new BorderLayout()); button = new JButton(“OK”); container.add(button, BorderLayout.SOUTH); } }

Java中的最终静态变量是否安全?

我已经阅读了很多,但没有找到明确的答案。 我有一个看起来像这样的课程: public class Foo() { private static final HashMap sharedData; private final HashMap myRefOfInnerHashMap; static { // time-consuming initialization of sharedData final HashMap innerMap = new HashMap; innerMap.put… innerMap.put… …a sharedData.put(someKey, java.util.Collections.unmodifiableMap(innerMap)); } public Foo(String key) { this.myRefOfInnerHashMap = sharedData.get(key); } public void doSomethingUseful() { // iterate over copy for (Map.Entry entry : this.myRefOfInnerHashMap.entrySet()) […]

在Java中访问静态字段的正确方法是什么?

我刚开始学习Java,我写了一个类来测试使用静态字段。 一切正常但在Eclipse中我看到一个图标,当它hover时出现:“应该以静态方式访问 CarCounter类型的静态方法getCounter。” 什么是正确的方式呢? 这是class级: public class CarCounter { static int counter = 0; public CarCounter(){ counter++; } public static int getCounter(){ return counter; } } 这是我尝试访问变量计数器的地方: public class CarCounterTest { public static void main( String args[] ){ CarCounter a = new CarCounter(); System.out.println(a.getCounter()); //This is where the icon is marked } }

如何在Java中扩展最终类

这是我现在面临的问题。 我有一个类,让我们说Foo ,这个类定义了一个名为getBar的方法,它返回一个Bar实例。 类Bar在Foo定义,并且被声明为public static final 。 我想要做的是定义一个扩展Foo的类MyFoo ,但我也希望通过添加我自己的function(方法,属性等)来扩展Bar与MyBar 。 我也想让getBar返回MyBar 。 问题是Bar是最终的。 以下是我想要做的事情的说明: public class Foo { Bar bar = new Bar(); public Bar getBar(){ return bar; } …. public static final class Bar { } } 我想做的是: public class MyFoo extends Foo { public MyBar getBar(){ // here I want to return an […]

注入静态EJB,废话?

我想写这段代码: @Stateless public class MyEjb { @EJB private static MyOtherEjbWhichIWantStatic myOtherEjb; } 我有意义的是,由于各种原因,我想在我的类中注入一个EJB,作为静态元素。 遗憾的是,Java对此并不满意 com.sun.enterprise.container.common.spi.util.InjectionException: Illegal use of static field private static MyOtherEjbWhichIWantStatic myOtherEjb on class that only supports instance-based injection 我不明白,为什么我不能将静态EJB注入另一个EJB?

Java:如何“重启”静态类?

我有一个静态类(Foo)和一个主类(Main) 请参阅Main.java: public class Main { public static void main(String[] args) { System.out.println(Foo.i); // 0 Foo.i++; System.out.println(Foo.i); // 1 // restart Foo here System.out.println(Foo.i); // 1 again…I need 0 } } 见Foo.java: public class Foo { public static int i = 0; } 有没有办法重启或重置静态类? 注意:我需要这个,因为我正在使用jUnit测试静态类,我需要在第二次测试之前清理参数。 编辑 几乎解决方案: 使用StanMax答案,我可以这样: Main.java public class Main { public static […]

为什么Java中没有本地静态变量?

在C / C ++中,我们使用静态局部变量来维护方法的状态。 但是为什么Java不支持它? 是的,我可以为此目的使用静态字段。 但创建一个只保留一个方法状态的字段是不是有点奇怪?

何时使用静态方法和字段?

我知道静态是什么,但不知道何时使用它。 静态变量:我只将它用于常量字段。 有时类中有几十个常量,因此使用静态常量可以节省大量内存。 还有其他典型的用例吗? 静态方法:我在编写关于算法的类时使用它。 例如,提供不同排序算法的类。 它是否反对OOP设计? 我认为保持这种方式比在每个需要使用它们的类中实现排序算法更好。 我错了吗? 什么是好用例? 此外,使用静态和非静态字段/方法之间是否存在性能差异?

为什么Java编译器允许通过null对象进行静态变量访问?

我指着一些技巧并遇到了这个。 在以下代码中: public class TestClass1 { static int a = 10; public static void main(String ar[]){ TestClass1 t1 = null ; System.out.println(t1.a); // At this line } } t1对象为null 。 为什么这段代码没有抛出NullPointerException ? 我知道这不是访问static变量的正确方法,但问题是关于NullPointerException 。