为什么方法体用分号填充可接受的语法?

时间:2014-04-01 23:01:32

标签: java methods

public static void main(String[] args) {
        System.out.println("World Hello!");;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;
               ;;;;;;;;;
               ;;;;;;;
               ;;;;;;;;;;;;;; 
               ;;;;;
}

正常人是我想说的:"那些分号在那里做的是什么!?"

3 个答案:

答案 0 :(得分:11)

因为另一个分号旁边的一个简单分号是一个空语句。所以,很多半冒号彼此相邻都是很多空洞的陈述。它编译并运行没有任何问题。

答案 1 :(得分:7)

根据Oracle Java Language Specification

  

空语句什么都不做。

EmptyStatement:
    ;
     

空语句的执行总是正常完成。

由于它自己允许连续分号的语言,编译器不会产生错误。

您还可以检查字节码,看看发生了什么,代码中有很多&#34 ;;" :

// Stack: 1, Locals: 1
public Duh1();
0  aload_0 [this]
    1  invokespecial java.lang.Object() [8]
    4  return
      Line numbers:
        [pc: 0, line: 3]
      Local variable table:
        [pc: 0, pc: 5] local: this index: 0 type: Duh

  // Method descriptor #15 ([Ljava/lang/String;)V
  // Stack: 2, Locals: 1
  public static void main(java.lang.String[] args);
    0  getstatic java.lang.System.out : java.io.PrintStream [16]
    3  ldc <String "World Hello!"> [22]
    5  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]
    8  return
      Line numbers:
        [pc: 0, line: 5]
        [pc: 8, line: 15]
      Local variable table:
        [pc: 0, pc: 9] local: args index: 0 type: java.lang.String[]

Line numbers:
        [pc: 0, line: 5]
        [pc: 8, line: 6]

和代码只有1&#34;;&#34; :

// Method descriptor #6 ()V
  // Stack: 1, Locals: 1
  public Duh2();
    0  aload_0 [this]
    1  invokespecial java.lang.Object() [8]
    4  return
      Line numbers:
        [pc: 0, line: 3]
      Local variable table:
        [pc: 0, pc: 5] local: this index: 0 type: Duh2

  // Method descriptor #15 ([Ljava/lang/String;)V
  // Stack: 2, Locals: 1
  public static void main(java.lang.String[] args);
    0  getstatic java.lang.System.out : java.io.PrintStream [16]
    3  ldc <String "World Hello!"> [22]
    5  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]
    8  return
      Line numbers:
        [pc: 0, line: 5]
        [pc: 8, line: 6]
      Local variable table:
        [pc: 0, pc: 9] local: args index: 0 type: java.lang.String[]

Line numbers:
        [pc: 0, line: 5]
        [pc: 8, line: 6]

正如您可以检查单个&#34 ;;&#34;的两个版本的字节码完全相同连续多次&#34;;&#34;。

答案 2 :(得分:0)

因为分号仅表示换行符。这意味着我们可以简单地写:

cout << "Hello World\n"; return 0;

甚至没有在换行符上书写。请记住,在单独的行上书写更加整洁。