我是Java的初学者并且被困在这里......当我试图调用块时发生错误

时间:2017-02-08 18:54:57

标签: java

类示例

public static void main (String        ARGS[]){
         Block: {
                         System.out.println("hi");
                      }
     Block;
           }

任何人都可以帮助我......告诉我原因n概念为什么会出现错误并且可以解决?或者我的方向错误..

5 个答案:

答案 0 :(得分:0)

不,你不能。标记代码块不是java中的有效语法。在某些编程语言中,如C,它是有效的。您可以使用goto关键字将执行转移到该标签标识的代码块。但在Java中,没有。你不能。如果你的另一个问题是“为什么不允许这样做”,你可以搜索旧的答案。

答案 1 :(得分:0)

这需要使用goto关键字,这在Java中不可用,因为它可能会导致 Spaghetti Code 。结构良好的程序不应该需要这样的块。有关goto为何不好的更多信息,请阅读:

http://www.drdobbs.com/jvm/programming-with-reason-why-is-goto-bad/228200966

答案 2 :(得分:-1)

当我们在JVM中加载类时会自动调用块方法,首先执行块然后执行main方法。 像

public class ConstructorBlockExample{

    {
        System.out.println("This is first constructor block");
    }

    public ConstructorBlockExample(){
        System.out.println("This is no parameter constructor");
    }

    public ConstructorBlockExample(String param1){
        System.out.println("This is single parameter constructor");
    }

    public ConstructorBlockExample(String param1, String param2){
        System.out.println("This is two parameters constructor");
    }

    {
        System.out.println("This is second constructor block");
    }

    public static void main(String[] args){
        ConstructorBlockExample constrBlockEx = 
                     new ConstructorBlockExample();
        ConstructorBlockExample constrBlockEx1 = 
                     new ConstructorBlockExample("param1");
        ConstructorBlockExample constrBlockEx2 = 
                     new ConstructorBlockExample("param1", "param2");
    }
}

和输出

This is first constructor block 
This is second constructor block
This is no parameter constructor
This is first constructor block
This is second constructor block
This is single parameter constructor
This is first constructor block
This is second constructor block
This is two parameters constructor

你可以使用标签作为一个块,但它主要用于打破或继续块内的循环,如:

 outer:
 for(int i=...){
   for(int j=..){
     ...
     break outer; // leaves both loops   

   } 

 }

答案 3 :(得分:-1)

https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html

通过从头到尾(从左到右)按顺序执行每个局部变量声明语句和其他语句来执行块。如果所有这些块语句都正常完成,则块正常完成。如果这些块语句中的任何一个因任何原因突然完成,则块会因同样的原因突然完成。

enter image description here

答案 4 :(得分:-3)

Java 7允许String作为交换机。 使用MyEnum.valueOf(str)的Enum解决方法可以正常工作。 如果可能的话,可以切换String(或Object)的哈希码以及更多if-then-else,但只有很多可能性才有意义,在这种情况下整个事情可能需要进行大修。 / p>