【问题标题】:I'm a beginner in Java and got stuck here... When I tried to call block a error occurred我是 Java 的初学者并被困在这里......当我尝试调用 block 时发生错误
【发布时间】:2017-06-26 13:23:35
【问题描述】:

类示例

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

任何人都可以帮我..告诉我为什么我会出错,它可以解决吗?或者我走错了方向..

【问题讨论】:

  • 为什么向下...谁能理清思路n解释我帮助我理解这个概念而不是向下。一个Java新手。
  • 无法解决。是的,你走错了方向。
  • @Thomas 但是通过 break 和 continue 我们到达那个区块
  • 不,使用break block;continue block; 您可以跳出该块。该标签并不意味着从外部 in 跳转。
  • 我建议您忘记 Java 中的标签,因为它们很少使用。我的 Java 代码中从不需要标签,也从未在其他人的 Java 代码中看到标签。

标签: java


【解决方案1】:

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

通过从第一个到最后一个(从左到右)的顺序执行每个局部变量声明语句和其他语句来执行一个块。如果所有这些块语句正常完成,则该块正常完成。如果这些块语句中的任何一个由于任何原因突然完成,则该块由于相同的原因而突然完成。

【讨论】:

  • 问题是我们能不能调用like函数
【解决方案2】:

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

公共类 ConstructorBlockExample{ { System.out.println("这是第一个构造函数块"); } 公共构造函数块示例(){ System.out.println("这是无参构造函数"); } 公共构造函数块示例(字符串参数 1){ System.out.println("这是单参数构造函数"); } 公共构造函数块示例(字符串参数 1,字符串参数 2){ System.out.println("这是二参数构造函数"); } { System.out.println("这是第二个构造函数块"); } 公共静态无效主要(字符串[]参数){ 构造函数块示例 constrBlockEx = 新的 ConstructorBlockExample(); 构造函数块示例 constrBlockEx1 = new ConstructorBlockExample("param1"); 构造函数块示例 constrBlockEx2 = new ConstructorBlockExample("param1", "param2"); } }

输出是

这是第一个构造函数块 这是第二个构造函数块 这是无参数构造函数 这是第一个构造函数块 这是第二个构造函数块 这是单参数构造函数 这是第一个构造函数块 这是第二个构造函数块 这是两个参数的构造函数

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

外: for(int i=...){ for(int j=..){ ... 打破外部; // 离开两个循环 } }

【讨论】:

  • 在主要方法中我不是从课堂上问的
  • 我刚刚给了你完整的 java 程序来看看这个块是如何工作的,它也是一个主类,它包含 main() 方法,你可以看到这个类的输出,然后想象输出你的代码
  • 你不理解我的问题
  • 是的,你的意思是我们可以为块使用标签,如果我们使用标签那么我们如何调用块?是JVM自动调用blocks,你不能调用blocks。
【解决方案3】:

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

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

【讨论】:

  • 投反对票需要一个解释。
  • 我绝不会因为某人给我答案/意见而投反对票,除非它是错误的。
  • 那是问我们是否不能使用 go to 我们可以调用
【解决方案4】:

不,你不能。标记代码块不是 java 中的有效语法。在某些编程语言(如 C)中,它是有效的。您可以使用goto 关键字将执行转移到由该标签标识的代码块。但是在Java中,没有。你不能。任何关于“为什么不允许”的其他问题,您都可以搜索旧答案。

【讨论】:

  • 反对者,这个答案有什么问题?你认为答案是“是的,这是允许的”吗?
  • 块与 break 和 continue 一起使用 .. 所以我们可以称之为问题是这个
  • @ShubhamMaheshwari、breakcontinue 是专门用于循环的关键字。
【解决方案5】:

Java 7 允许 String 作为开关。 可以使使用 MyEnum.valueOf(str) 的 Enum 解决方法起作用。 切换字符串(或对象)的哈希码加上更多的 if-then-else if 是可能的,但只对很多可能性有意义,在这种情况下,整个事情可能需要大修。

【讨论】:

  • 我的问题是我们可以打电话
  • 在这种情况下,是的,根据手册:块是大括号内的语句序列、局部类声明和局部变量声明语句。块:{ BlockStatementsopt } BlockStatements:BlockStatement BlockStatements BlockStatement BlockStatement:LocalVariableDeclarationStatement ClassDeclaration Statement
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 2013-03-14
  • 2020-12-30
  • 2022-12-05
  • 1970-01-01
相关资源
最近更新 更多