【问题标题】:Java run code when class is imported导入类时的 Java 运行代码
【发布时间】:2015-05-03 06:06:03
【问题描述】:

我知道这里有一个问题在回答这个问题,正如我之前读过的那样。我这辈子都找不到,也找不到在谷歌上。

我记得以前的问题是关于调用各种方法和代码片段的顺序,并且有一个特定的部分显然被称为第二个类被导入(它也可以用来做令人讨厌的意外事情)。这叫什么/我该怎么做?

如果我没记错的话是这样的:

Java 文件 1:

...
import somepackage.myclass; //prints "class imported"
...
myclass a = new myclass(); //print "constructor"
...

Java 文件 2

package somepackage;

public class myclass {
    ...
    //Something to print out "class imported"
    ...
    public void myclass(){
      System.out.println("constructor");
    }
}

问题/答案有几个这样的结构,但我不记得它们中的任何一个叫什么。有人能指出我正确的方向吗?

【问题讨论】:

    标签: java class import


    【解决方案1】:

    试试这个:

    public class Myclass {
        static {
            System.out.println("test");
        }
    }
    

    这称为Static Initialization Block

    【讨论】:

    • 就是这样。谢谢。还有其他类似的构造吗?
    • 有一个非静态初始化块,通常用于初始化非静态字段(删除static关键字即可)。但是当类是 first used 时不会调用其他任何东西。
    • 啊我找到了,其他都是没有static关键字的。
    • 它说实例初始化器被“复制到每个构造函数中”。复制的代码是放在已经存在的代码之前还是之后?
    • 在(通常是隐式的)super() 构造函数调用之前,但之后。
    【解决方案2】:

    你可能在想static initializer:

    package somepackage;
    
    public class myclass {
        static{
          System.out.println("class imported");
        }
    
        public void myclass(){
          System.out.println("constructor");
        }
    }
    

    类的静态初始化程序在第一次访问该类时运行,以创建实例或访问静态方法或字段。

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 2012-10-14
      相关资源
      最近更新 更多