当前位置: 首页 > 知识库问答 >
问题:

为什么我们必须在Java的if语句之外声明变量[duplicate]

靳越
2023-03-14

在Java,如果我们运行:

public class HelloWorld{

     public static void main(String []args){
         if (true) {
             int test = 1;
         } else {
             int test = 2;
         }
        System.out.println(test);
     }
}

它将抛出:

HelloWorld.java:9: error: cannot find symbol
        System.out.println(test);
                           ^
  symbol:   variable test
  location: class HelloWorld
1 error

但是,在php中,如果我们运行:

php prettyprint-override"><?php
        //Enter your code here, enjoy!

if (true) {
    $test = 1;
} else {
    $test = 2;
}

echo $test;

它将打印%1。

我怀疑这是否是因为Java是强类型语言,而php是弱类型语言。能不能有人给出一个更深层次、更低层次的解释?

共有2个答案

谢唯
2023-03-14

这与静态和动态类型之间的差异无关。这里Java和PHP的区别是可变的作用域。

>

  • 在PHP中$test=1;将根据文档成为全局作用域的一部分。

    在Java,int test=1;将是本地范围的一部分,在您的情况下,仅限于if块。

  • 谷梁宏恺
    2023-03-14

    在Java中,变量的可见性范围受到{}的限制

    if (true) {
        int test = 1;
    } else {
        int test = 2;
    }
    System.out.println(test);// Will fail to compile
    

    注意死代码也很重要,如下所示:

    int test;
    if (true) {
        test = 1;
    } else {
        test = 2;// Dead code
    }
    System.out.println(test);
    

    由于if(true)else块将永远不会执行,导致test=2成为死代码。

     类似资料:
    • 问题内容: 以下Java代码无法编译。 为什么?在没有先声明的情况下,没有代码路径可导致程序将1分配给该路径。 我想到的范围可能仅限于第一条陈述,但后来我不明白为什么。如果我真的不想不必要地声明以提高性能怎么办?我不喜欢声明后不使用变量。 (您可能想争论一下,我不可以在第二条语句中简单地声明b ,在这种情况下,请想象一下它可能在其他地方处于循环中。) 问题答案: 为什么?如果没有先声明,没有代码路

    • 问题内容: 我刚刚开始学习go lang,而对于在go lang中声明变量感到困惑 例如我已经声明,里面if … else语句。 但是终端出现错误 好像我在If语句中声明的任何内容都不起作用…我该如何解决? 问题答案: 因为变量仅在声明它们的范围内定义: 去玩 之间的区别,并是仅仅是分配和对变量的声明和分配新建分配FY语法 这个: 等效于: 您可能想要的是:

    • 我不完全确定这在Java中是否可行,但在if语句中声明的字符串之外,如何使用if语句中声明的字符串呢?

    • 问题内容: 有时我们有几个类,这些类的某些方法具有相同的签名,但是与声明的Java接口不对应。例如,和(在中的其他几个 )中都有一个方法 现在,假设我希望对具有该方法的对象进行一些操作。然后,我想有一个接口(或者自己定义),例如 这样我可以写: 但是,可悲的是,我不能: 此演员表将是非法的。编译器 知道 这 是不是 一个,因为类没有宣布实现该接口...... 然而“实际上”实现它 。 有时这会带来

    • 我无法编译这个程序。有人看到我做错了什么吗?在if语句之后,变量matchOdds似乎不存在。但是我想打印出来。

    • my-app.ear my-ejb.jar my-webapp.war lib my-lib.jar 为了构造几何图形和存储数据,my-ejb需要oracle库与oracle spatial一起工作。JBoss8(wildfly)正确地加载了oracle的模块。 当我启动应用程序时,我收到。 当我启动应用程序时,我收到。我知道,当我从resultset读取数据时,resultset中的对象是类的实