当前位置: 首页 > 面试题库 >

调用不带名称的Java方法

潘辰龙
2023-03-14
问题内容

我在看下面的代码,发现有些奇怪:

public class Sequence {
    Sequence() {
        System.out.print("c ");
    }

    {
        System.out.print("y ");
    }

    public static void main(String[] args) {
        new Sequence().go();
    }

    void go() {
        System.out.print("g ");
    }

    static {
        System.out.print("x ");
    }
}

我期望这样做会导致编译错误,因为System.out带有“ y”的不仅仅属于方法声明{ }。为什么这样有效?我不知道如何或应该调用此代码。

运行它时x y c g,它还会产生,为什么static { }在序列构造函数之前调用get?


问题答案:

这个:

static {
        System.out.print("x ");
    }

是一个 静态初始化块 ,并在加载类时调用。您可以根据需要在类中添加任意数量的对象,它们将按照其出现顺序(从上到下)执行。

这个:

    {
        System.out.print("y ");
    }

是一个 初始化块
,并将代码复制到该类的每个构造函数的开头。因此,如果您的类有许多构造函数,并且它们都需要在开始时做一些普通的事情,则只需编写一次代码,并将其放在这样的
初始化块中

因此,您的输出非常合理。

正如Stanley在下面评论的那样,有关更多信息,请参见Oracle教程中描述初始化块的部分。



 类似资料:
  • 问题内容: 从http://cs-fundamentals.com/tech-interview/java/which-java-package-is- imported-by-default.php 在每个Java程序中,可以有一个未命名的程序包,它只是一个没有名称的程序包。如果在编写类定义时省略了package语句,则将类名放入默认包中,该包没有名称。Java编译器会自动导入此软件包。 真的吗

  • 问题内容: 如果我在字符串中有一个对象和一个方法名称,该如何调用该方法? 问题答案: 使用内置功能: 您还可以用于通过名称设置类属性。

  • 问题内容: 要修复测试用例,我需要确定是否从特定的调用程序函数中调用了该函数。我负担不起添加布尔值参数,因为它会破坏定义的接口。怎么办呢? 这是我想要实现的。在这里,我无法更改operation()的参数,因为它是接口实现。 问题答案: 你可以试试

  • 问题内容: 我想针对XSD架构验证XML文件。XML文件根元素没有任何名称空间或xsi详细信息。它没有属性,只是。 我已经尝试从http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi.html尝试以下代码,但运气不佳 xml可以使用包含的名称空间标头等(通过xmlspy添加)很好地验证,但是我想可以不用手动编辑源文件就可以声明

  • 类的每个实例都有一个类的实例。应该根据其成员变量调用中的不同方法。这是一个实现,做我想要的: 但是,我希望能够以某种方式直接传递B的方法1或方法2,而不是执行myA.method_num=1。我怎么能那样做?

  • 问题内容: Python:如何在被调用方法中获取调用者的方法名称? 假设我有2种方法: 如果我不想对method1进行任何更改,如何在method2中获取调用者的名称(在本示例中,名称为method1)? 问题答案: inspect.getframeinfo和其他相关功能可以帮助: 该自省旨在帮助调试和开发;建议不要将其用于生产功能。