Java 在字符串实例上调用格式

Java 在字符串实例上调用格式,java,Java,在花了很长时间使用scala之后,我一直在研究Java8。在我进行黑客攻击时,被困在scala模式中,我编写了类似于“#实例_方法:%s线程:%d”的东西;“。奇怪的编译器没有抱怨,尽管我在字符串文档中找不到名为“format”的实例方法(原来我没有意识到静态方法的文档与此相关)。因此,下面的代码: public class Weird{ public static void main(String[] args){ String testStr = "hmm";

在花了很长时间使用scala之后,我一直在研究Java8。在我进行黑客攻击时,被困在scala模式中,我编写了类似于
“#实例_方法:%s线程:%d”的东西;“
。奇怪的编译器没有抱怨,尽管我在字符串文档中找不到名为“format”的实例方法(原来我没有意识到静态方法的文档与此相关)。因此,下面的代码:

public class Weird{
    public static void main(String[] args){
        String testStr = "hmm";
        Long testNum = 7L;
        String weird = "# instance_method:%s thread:%d".format(testStr, testNum);
        String msg = String.format("# static:%s thread:%d", testStr, testNum);
        System.err.println(weird);
        System.err.println(msg);
    }
}   
给出的输出:

hmm
# static:hmm thread:7

因此,
“#实例_方法:%s线程:%d”。format(testStr,testNum)
的计算结果为
testStr
。我可能做了一些愚蠢的事情,但这里发生了什么?

您在下面的表达式中调用了
static
format
方法

"# instance_method:%s thread:%d".format(testStr, testNum);
i、 e.使用参数设置
testStr
的格式。由于
中没有占位符,“hmm”
这只是计算为
“hmm”


使用实例调用
静态
方法在java中是有效的,但应该避免,因为这很容易导致混淆。表达式的类型用于确定在这种情况下调用的方法。

您在下面的表达式中调用的是
静态
格式
方法

"# instance_method:%s thread:%d".format(testStr, testNum);
i、 e.使用参数设置
testStr
的格式。由于
中没有占位符,“hmm”
这只是计算为
“hmm”


使用实例调用
静态
方法在java中是有效的,但应该避免,因为它很容易导致混淆。表达式的类型用于确定在这种情况下调用的方法。

是的,很难找到:。无论是在实例上还是在类本身上调用静态方法(第一个是未链接的/a代码味道)。实例方法在哪里?公共静态字符串格式(字符串格式,对象…args)@sgldiv没有实例方法。但是Java允许您在实例上调用
static
方法。是的,很难找到:。无论您是在实例上调用静态方法还是在类本身上调用静态方法(第一个方法是未链接的/a code-smose),实例方法在哪里?公共静态字符串格式(字符串格式,Object…args)@sgldiv没有实例方法。但是Java允许您在实例上调用
静态
方法。