Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对静态方法的这两个调用之间有什么区别吗?_Java_Static - Fatal编程技术网

Java 对静态方法的这两个调用之间有什么区别吗?

Java 对静态方法的这两个调用之间有什么区别吗?,java,static,Java,Static,在下面的代码中,ABC.getSomeNumber()之间有什么区别吗和getSomeNumber()。我理解在同一个类中使用类名来调用静态方法似乎是多余的,但是如果我们显式地使用类名,是否存在任何性能问题或其他问题?在编译时如何解决这些问题vsgetSomeNumber() 不,没有区别ClassName.methodName()仅在从类外部调用时使用。没有区别ClassName.methodName()仅在从类外部调用时使用。在这种情况下没有区别 如果从其他类(直接或通过静态导入)调用,则需

在下面的代码中,
ABC.getSomeNumber()之间有什么区别吗
getSomeNumber()。我理解在同一个类中使用类名来调用静态方法似乎是多余的,但是如果我们显式地使用类名,是否存在任何性能问题或其他问题?在编译时如何解决这些问题
vs
getSomeNumber()


不,没有区别
ClassName.methodName()
仅在从类外部调用时使用。

没有区别
ClassName.methodName()
仅在从类外部调用时使用。

在这种情况下没有区别

如果从其他类(直接或通过静态导入)调用,则需要该名称

您可以在同一个类中使用任意一种形式。这实际上取决于偏好。如果您从许多类中调用类似命名的方法,您可以选择显式使用类名,因为这将帮助您在阅读时消除歧义


对性能没有影响,因为它们在编译后会变得相同。

在这种情况下没有区别

如果从其他类(直接或通过静态导入)调用,则需要该名称

您可以在同一个类中使用任意一种形式。这实际上取决于偏好。如果您从许多类中调用类似命名的方法,您可以选择显式使用类名,因为这将帮助您在阅读时消除歧义


这对性能没有影响,因为它们在编译后会变得相同。

让我们看看字节码是否存在差异:

Compiled from "ABC.java"
public class playground.ABC {
  public playground.ABC();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public static int getSomeNumber();
    Code:
       0: bipush        10
       2: ireturn

  public static void anotherMethod();
    Code:
       0: invokestatic  #17                 // Method getSomeNumber:()I
       3: pop
       4: invokestatic  #17                 // Method getSomeNumber:()I
       7: pop
       8: return
}
从“ABC.java”编译而来
公共课操场{
公共游乐场;
代码:
0:aload_0
1:invokespecial#8//方法java/lang/Object。“:()V
4:返回
公共静态int getSomeNumber();
代码:
0:bipush 10
2:我轮到你了
公共静态无效anotherMethod();
代码:
0:invokestatic#17//方法getSomeNumber:()I
3:流行音乐
4:invokestatic#17//方法getSomeNumber:()I
7:流行音乐
8:返回
}
invokestatic的
表示:参数

(…)用于构造索引 进入当前类的运行时常量池。(…)该索引处的运行时常量池项必须是符号 对方法或接口方法(…)的引用,其中 方法的名称(…)以及 方法所在的类或接口的符号引用 有待发现。已解析命名的方法


这两个调用都以相同的方式引用常量池的同一项(
#17
)。静态本地方法
getSomeNumber
被称为合格还是不合格,字节码之间没有区别。

让我们看看字节码是否有区别:

Compiled from "ABC.java"
public class playground.ABC {
  public playground.ABC();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public static int getSomeNumber();
    Code:
       0: bipush        10
       2: ireturn

  public static void anotherMethod();
    Code:
       0: invokestatic  #17                 // Method getSomeNumber:()I
       3: pop
       4: invokestatic  #17                 // Method getSomeNumber:()I
       7: pop
       8: return
}
从“ABC.java”编译而来
公共课操场{
公共游乐场;
代码:
0:aload_0
1:invokespecial#8//方法java/lang/Object。“:()V
4:返回
公共静态int getSomeNumber();
代码:
0:bipush 10
2:我轮到你了
公共静态无效anotherMethod();
代码:
0:invokestatic#17//方法getSomeNumber:()I
3:流行音乐
4:invokestatic#17//方法getSomeNumber:()I
7:流行音乐
8:返回
}
invokestatic的
表示:参数

(…)用于构造索引 进入当前类的运行时常量池。(…)该索引处的运行时常量池项必须是符号 对方法或接口方法(…)的引用,其中 方法的名称(…)以及 方法所在的类或接口的符号引用 有待发现。已解析命名的方法

这两个调用都以相同的方式引用常量池的同一项(
#17
)。静态本地方法
getSomeNumber
被称为合格还是不合格在字节码中没有区别