相关疑难解决方法(0)

静态和非静态初始化代码块之间有什么区别

我的问题是静态关键字的一个特定用法.可以使用static关键字来覆盖不属于任何函数的类中的代码块.例如,以下代码编译:

public class Test {
    private static final int a;    
    static {
        a = 5;
        doSomething(a);
    }
    private static int doSomething(int x) {
        return (x+5);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你删除static它抱怨的关键字,因为变量afinal.但是,可以删除两个finalstatic关键字并使其编译.

这两种方式让我感到困惑.我怎么能有一个不属于任何方法的代码部分?如何调用它?一般来说,这种用法的目的是什么?或者更好,我在哪里可以找到关于此的文档?

java static static-initializer

345
推荐指数
8
解决办法
23万
查看次数

如何解析静态块之间的对象依赖性?

我最近在工作中遇到过这个问题.虽然我不确定这是一个好主意,但我不明白编译器如何处理静态块.

这是一个例子:

考虑你有类AB:

public class A {

    public final static List<Integer> list;
    static {
        list = new ArrayList<>();
    }
}

public class B {

    public final static int dependsOnA;
    static {
        dependsOnA = A.list.size();
    }
}
Run Code Online (Sandbox Code Playgroud)

还有一个只读的主要课程B.dependsOnA.

静态块B依赖于in A,因为它使用list静态变量.

现在,代码正确执行,并且NullPointerException在运行时不会引发.但是什么是确保list在其他地方潜在使用之前进行初始化的机制是什么?

java jvm classloader

33
推荐指数
7
解决办法
1481
查看次数

Java静态代码块

我注意到最近在很多项目中,我都注意到了

static {
    //some code here
}
Run Code Online (Sandbox Code Playgroud)

我只是在寻找一些关于此的信息,特别是我习惯于在方法中使用的代码块,或者只是类,这只是用静态修饰符设置块中的所有代码,还是有更多的东西给它?

java

16
推荐指数
1
解决办法
2万
查看次数

C++类型在列表中自行注册的最佳方法是什么?

假设我有一些每类数据:(AandB.h)

class A
{
public:
   static Persister* getPersister();
}

class B
{
public:
   static Persister* getPersister();
}
Run Code Online (Sandbox Code Playgroud)

......还有很多课程.我想做的事情如下:

persistenceSystem::registerPersistableType( A::getPersister() );
persistenceSystem::registerPersistableType( B::getPersister() );
...
persistenceSystem::registerPersistableType( Z::getPersister() );
Run Code Online (Sandbox Code Playgroud)

......为每个班级.

我的问题是:有没有办法自动构建每类数据列表,这样我就不必枚举大块中的每个类型(如上例所示)?

例如,您可以这样做的一种方法是:(AutoRegister.h)

struct AutoRegisterBase
{
   virtual ~AutoRegisterBase() {}
   virtual void registerPersist() = 0;
   static AutoRegisterBase*& getHead()
   {
      static AutoRegisterBase* head= NULL;
      return head;
   }

   AutoRegisterBase* next;
};

template <typename T>
struct AutoRegister : public AutoRegisterBase
{
   AutoRegister() { next = getHead(); getHead() = this; }

   virtual void registerPersist()
   {
       persistenceSystem::registerPersistableType( T::getPersister() …
Run Code Online (Sandbox Code Playgroud)

c++

10
推荐指数
1
解决办法
2815
查看次数

Java EE7 WebSocket初始化-在第一个@OnOpen之前实现逻辑

我认为这比直接编码问题更多是针对设计的问题。

我想实现一个websocket服务,该服务将来自国外http://资源的更新数据集提供给客户端。但是我想在第一个客户端连接之前就可以使用数据,所以@OnLoad表示法不会做。

HttpServlet世界上我会

@Override public void init() throws...

仅使用JSR-356我无法找到合适的方法。我尝试使用custom,ServerEndpointConfig.Configurator但这似乎无法让我访问类似于init()from的方法HttpServlet

所以我的问题是:

让websocket Endpoint类扩展HttpServlet使我可以访问该init()方法,并且可以在其中放置初始逻辑。这是解决我的问题的合适方法,还是我错过了JSR-356中的某些功能,它可以很好地完成工作并且无需导入大部分未使用的servlet包?

非常感谢你!

java websocket glassfish-4 java-ee-7 tomcat8

5
推荐指数
1
解决办法
1239
查看次数

在具有静态初始化程序可接受/惯用的类中使用空静态方法?

我遇到了以下情况:

class Foo {

  static {
    // setup for logging and configuration
  }

  public static void setup() {
    // do nothing
  }

}
Run Code Online (Sandbox Code Playgroud)

这是惯用的Java代码吗?是否应该避免这种具体原因?

这是在测试套件中找到的.

我最初担心的是理论上可以在不调用#setup()的情况下进行初始化.

java static idioms initialization

5
推荐指数
1
解决办法
532
查看次数

什么是Java`static {}`关键字本身?

可能重复:
Java中的静态块

我遇到了以下用途,static并没有弄清楚它的作用.我知道使用例如static String hello = "World";但我不明白以下内容.

static {
   loadFromProperties(new Properties());
}
Run Code Online (Sandbox Code Playgroud)

java static

4
推荐指数
1
解决办法
780
查看次数

什么是Java中静态字段的初始化程序

我从Oracle Java教程得到以下代码你可以在这里找到这个在"12.4.类和接口的初始化"标题下的执行

类的初始化包括执行其静态初始化程序和类中声明的静态字段(类变量)的初始化程序.

如果有人向我解释如何"静态字段的初始化器"指的是"类变量",那将会很棒.

java initialization member java-8

4
推荐指数
1
解决办法
87
查看次数

什么是Java中的"静态{}"?

我不是OOP的专业人员所以请耐心等待我.

这段代码来自android的自动生成Master/Detail Flow项目:

static {
        // Add 3 sample items.
        addItem(new DummyItem("1", "Item 1"));
        addItem(new DummyItem("2", "Item 2"));
        addItem(new DummyItem("3", "Item 3"));
    }
Run Code Online (Sandbox Code Playgroud)

那是什么?我的意思是它是一个方法?一个构造函数?或者是什么?

java oop static

3
推荐指数
1
解决办法
599
查看次数

这是静态方法吗?"静态的 {...}"

我正在Head First Java中进行练习.它具有以下代码:

static {
System.out.println("Super constructor block");
}
Run Code Online (Sandbox Code Playgroud)

我没有得到大括号之前的静态修饰符.这叫什么?我知道静态变量等我尝试在线搜索但无法得到答案.谢谢.

java

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

何时在Java类中实例化静态块

假设一个类中有一个静态块

public class Menu {

    private static Map<String, String> buttonEventMap = new HashMap<String, String>();

    static {
        buttonEventMap.put("show-user","show");
        buttonEventMap.put("delete-user","delete");
    }

    public static Map<String, String> getHashMap() // To get the hash map
}
Run Code Online (Sandbox Code Playgroud)

什么是块的生命周期,何时实例化,程序启动时或者我们创建类的第一个对象时

java static static-block

0
推荐指数
1
解决办法
503
查看次数

这种单一的静态方法有什么作用?

我不确定这是做什么的,我以前没见过,也找不到任何有关它的信息.

private static String[] names = { "A.ttf" };

private static Map<String, Font> cache = new ConcurrentHashMap<String, Font>(names.length);

static {
  for (String name : names) {
    cache.put(name, getFont(name));
  }
}
Run Code Online (Sandbox Code Playgroud)

java fonts static

0
推荐指数
1
解决办法
114
查看次数

在匿名对象的情况下,不会执行静态块

当我没有为该类的对象(匿名)创建引用变量时,为什么不执行类中的静态块?

例如,让我们考虑一下这个简单的类:

public class StaticDemo {

    private static int x;

    public static void display(){
        System.out.println("Static Method: x = "+x);
    }

    static {
        System.out.println("Static Block inside class");
    }

    public StaticDemo(){
        System.out.println("Object created.");
    }

}
Run Code Online (Sandbox Code Playgroud)

使用它的另一个类:

public class UseStaticDemo {
    public static void main(String[] args) {
        StaticDemo Obj = new StaticDemo();
        Obj.display();

        System.out.println("------------");

        new StaticDemo().display();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Static Block inside class
Object created.
Static Method: x = 0
------------
Object created.
Static Method: x = 0
Run Code Online (Sandbox Code Playgroud)

java static

0
推荐指数
1
解决办法
44
查看次数