Java 为什么变量不能在if内初始化

Java 为什么变量不能在if内初始化,java,swing,Java,Swing,第editRecord行的变量stock显示该变量可能未初始化 if(selection.equalsIgnoreCase("Flower")) { String filepath = "Stock.txt"; String name = "Flower"; String stock; if(add.isSelected())

第editRecord行的变量stock显示该变量可能未初始化

        if(selection.equalsIgnoreCase("Flower"))
        {

            String filepath = "Stock.txt";
            String name = "Flower";
            String stock;            
            if(add.isSelected())
            {
                stock = String.valueOf(id.getStock(0) + Integer.parseInt(jTextField1.getText()));
            }
            if(minus.isSelected())
            {
                stock = String.valueOf(id.getStock(0) - Integer.parseInt(jTextField1.getText()));
            }
            String price = "12.90";
            String amountSold = String.valueOf(id.getItemSold(0));

          editRecord(filepath,name,stock,price,amountSold);

        }

这并不是说它不能在
if
块中初始化,而是编译器对代码的静态分析表明,它有可能在未初始化的情况下进入
editRecord(…,stock,…)
方法调用

例如:如果
add.isSelected()
minus.isSelected()
都不是真的,那么它可以被引用而不被赋值,这是不好的


您可以通过将它初始化为null来解决这个问题,而不是仅仅声明它。

这并不是说它不能在
if
块中初始化,而是编译器对代码的静态分析表明它有可能在未初始化的情况下进入
editRecord(…,stock…)
方法调用

例如:如果
add.isSelected()
minus.isSelected()
都不是真的,那么它可以被引用而不被赋值,这是不好的


您可以通过将其初始化为null来解决这个问题,而不是仅仅声明它。

如果
add.isSelected
minus.isSelected
都为false会怎么样?因为您有两个独立的条件语句,其中设置了
stock
。可能您的代码是正确的,但Java仍然不理解这将涵盖所有情况。如果您确定如果未选择
add
,则将选择
减号
,您可以使用第二个条件语句作为第一个条件语句的
else
-子句。如果
add.isSelected
减号.isSelected
都为false会怎么样?因为您有两个独立的条件语句设置了
stock
的语句。可能您的代码是正确的,但Java仍然不理解这将涵盖所有情况。如果您确定如果未选择
add
,则将选择
,则可以使用第二条条件语句作为第一条条件语句的
else
-子句。