相关疑难解决方法(0)

Java中的静态嵌套类,为什么?

我正在查看Java代码,LinkedList并注意到它使用了静态嵌套类Entry.

public class LinkedList<E> ... {
...

 private static class Entry<E> { ... }

}
Run Code Online (Sandbox Code Playgroud)

使用静态嵌套类而不是普通内部类的原因是什么?

我能想到的唯一原因是,Entry无法访问实例变量,因此从OOP的角度来看,它具有更好的封装.

但我认为可能有其他原因,也许是表现.可能是什么?

注意.我希望我的条款正确,我会称之为静态内部类,但我认为这是错误的:http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html

java static class member

208
推荐指数
7
解决办法
11万
查看次数

内部类是轻量级的吗?

内部类比普通类更轻量级,还是最终java像普通类一样编译内部类?

我知道在java类不都是非常轻巧自己,他们占据了PermGen的内存的一部分,所以我想知道这是否是最好用的类似于闭包功能的内部类,或者如果标准类也做得很好?

java closures permgen inner-classes

8
推荐指数
2
解决办法
1955
查看次数

静态方法很慢

我正在用java编写一个简单的游戏.我用30 FPS进行了碰撞测试,我必须得到窗口的大小.因为我还没有访问GUI实例,所以我认为我会创建一个共享实例,因为这在Objective-C中非常标准,我来自这里.

class GUI extends JFrame {
    private static GUI _sharedInstance;

    public static GUI sharedInstance() {
        if (_sharedInstance == null) {
            _sharedInstance = new GUI();
        }
        return _sharedInstance;
    }
}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,它真的很慢.然后我用public static final大小的实例替换了共享实例,它现在可以快速工作,即使是60 FPS或更高.

谁能解释我为什么会这样?

编辑

所以不是打电话GUI.sharedInstance().getWidth(),而是打电话GUI.windowSize.width.我用过了public static final Dimension windowSize.

编辑

这是碰撞检测.所以,int width = GUI.kWindowWidth;我没有打电话,而是在打电话int width = GUI.sharedInstance().getWidth();.

// Appears on other side
if (kAppearsOnOtherSide) {
    int width = GUI.kWindowWidth;
    int height = GUI.kWindowHeight;

    // Slow
    // …
Run Code Online (Sandbox Code Playgroud)

java performance

6
推荐指数
1
解决办法
1102
查看次数

标签 统计

java ×3

class ×1

closures ×1

inner-classes ×1

member ×1

performance ×1

permgen ×1

static ×1