标签: static-block

如何在Java中初始化ThreadLocal对象

我遇到了一个问题,我正在创建一个ThreadLocal并用新的ThreadLocal初始化它.问题是,我在概念上只是想要一个持久的列表,这个列表会延续线程的生命,但我不知道是否有办法在Java中初始化每个线程的东西.

例如,我想要的是:

ThreadLocal static {
  myThreadLocalVariable.set(new ArrayList<Whatever>());
}
Run Code Online (Sandbox Code Playgroud)

这样它就可以为每个线程初始化它.我知道我可以这样做:

private static Whatever getMyVariable() {
  Whatever w = myThreadLocalVariable.get();
  if(w == null) {
    w = new ArrayList<Whatever>();
    myThreadLocalVariable.set(w);
  }
  return w; 
}
Run Code Online (Sandbox Code Playgroud)

但是每次使用它时我都不需要检查它.我能在这做什么更好的事情吗?

java static-block thread-local

21
推荐指数
3
解决办法
2万
查看次数

"当一个类加载时"实际意味着什么?

据说java中的静态块只在加载该类时运行一次.但它究竟意味着什么?在哪一点上是由JVM(Java虚拟机)加载的类?

是在调用该类中的main方法时?并且当main方法开始执行时,是否还加载了同一类的所有超类?

考虑A扩展B和B扩展C.所有都有静态块.如果A有main方法,那么静态块的执行顺序是什么?

java static-block classloader

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

Java静态块是否等同于C#静态构造函数?

C#静态构造函数和Java静态块之间的真正区别是什么?

它们都必须是无参数的.当首次使用相关类时,它们都只被调用一次.

我错过了什么,或者他们是同一件事,只是用不同的名字?

c# java static-block static-constructor

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

如何从magento的cms页面传递带有块表单内容的参数

我想用magento中的JSON类型的块代码传递一个变量,

{{block type="multibanners/multibanners" category_id="9" name="multibanners" alias="multibanners" template="multibanners/multibanners.phtml"}}
Run Code Online (Sandbox Code Playgroud)

来自cms页面的内容区域,但我没有收到任何东西.
如果我使用块动作方法比我轻易获得我的价值.任何人都知道如何使用我的自定义块传递变量?

static-block magento

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

什么是c或c ++中的静态块?

我想通过一个例子知道c或c ++中的静态块是什么?我知道什么是静态但静态和静态块有什么区别?

c c++ static-block

10
推荐指数
3
解决办法
2万
查看次数

静态代码块可以抛出异常吗?

在假设的情况下,我有一个这样的课:

import java.io.File;
import java.util.Scanner;
class X
{
    static Scanner scanner;
    static
    {
        scanner = new Scanner(new File("X.txt"));
    }
}
Run Code Online (Sandbox Code Playgroud)

在编译时,我明白了

未报告的例外java.io.FileNotFoundException; 必须被抓住或宣布被抛出

因为public Scanner(File source) throws FileNotFoundException.

要解决这个问题,我可以scanner = new...在try/catch语句中添加一行:

    static
    {
        try
        {
            scanner = new Scanner(new File("X.txt"));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,我有什么方法可以做到这样的事情:

    static throws java.io.FileNotFoundException
    {
        scanner = new Scanner(new File("X.txt"));
    }
Run Code Online (Sandbox Code Playgroud)

这是一个假设的情况.请不要说"那你为什么要那样做?" 或者"这是制作扫描仪的更好方法!"

java static static-block try-catch throws

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

没有初始化就不执行静态块

我有一个关于静态块的问题:

假设我的班级看起来像这样:

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

我在SomeClass某处定义了一个类型的变量.

public static void main(String args[]) {
    SomeClass foo;
}
Run Code Online (Sandbox Code Playgroud)

现在我认为静态块将被执行,但事实并非如此.据我所知,只要类加载器加载SomeClass类,就会执行静态块.现在我真正的问题:

一旦我定义了该类型的变量,是不是加载了类?.如果是,为什么不执行静态块?

如果答案应该是no,那么我怎么知道类加载器是否已经加载了类以及加载类的不同可能性(我知道2:初始化变量并使用静态字段/方法)

java static-block

7
推荐指数
2
解决办法
1171
查看次数

在创建对象的同时在JAVA中执行静态块?

class DemoClass {
    public static void main(String args[]) {
        System.out.println("Start");
        A a=new D();
    }
}
class A {
    static {
        System.out.println("Static A");
        A c=new C();
    }

    public A() {
        System.out.println("Constr A");
    }
}

class B extends A {
    static {
        System.out.println("Static B"); 
    }

    public B() {
        System.out.println("Constr B");
    }
}

class C extends B {
    static {
        System.out.println("Static C");
    }

    public C() {
        System.out.println("Constr C");
    }
}

class D extends C {
    static {
        System.out.println("Static D");
    }

    public D() { …
Run Code Online (Sandbox Code Playgroud)

java static-block execution

7
推荐指数
2
解决办法
592
查看次数

静态块使用中的抽象类

我可以在静态初始化块中添加abstract关键字,但我不能添加抽象方法

abstract void draw();
Run Code Online (Sandbox Code Playgroud)

所以我只能在静态块中添加抽象类,如下所示:

static {
    abstract class Abstract { 
        abstract String test();
    }
    class Extends extends Abstract {

        @Override
        String test() {
            return null;
        }           
    }
    new Extends().test();
Run Code Online (Sandbox Code Playgroud)

但是在静态块中添加类层次结构并不是真实的,它将在低于私有的访问级别,abstract静态块内是否有其他用法?

java abstract-class static-block

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

Why static block is not executed

As per java doc, static block is executed when the class is initialized.

Could anyone please tell me why static block is not executed when I run below code?

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

public class Main {

    public static void example1() {
        Class<?> class1 = A.class;
        System.out.println(class1);
    }


    public static void example2() {
        try {
            Class<?> class1 = Class.forName("ClassLoading_Interview_Example.ex1.A");
            System.out.println(class1);
        }catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        example1();
    }
}
Run Code Online (Sandbox Code Playgroud)

java static-block classloading

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