java - 为什么 Eclipse 建议我将我的方法设为静态

标签 java eclipse methods static-methods

我正在从一个类中调用一个方法,它给我一个错误,让我将方法设为静态。当我问这个问题时,我对为什么感到困惑 What's the difference between a class variable and a parameter in a constructor?我的理解是类变量是静态的。

患者类别:

public  String  setOption(String option) throws IOException
{
        option = stdin.readLine();
        //stuff here
    return option;
}

患者管理系统:

public class PatientManagementSystem
{
    static BufferedReader stdin = new BufferedReader(new InputStreamReader(
            System.in));
    public static void main(String[] args) throws IOException
    {
        Patient.setOption(null);    
    }
}

错误:
enter image description here

我是将方法更改为静态方法还是创建局部变量?

最佳答案

根据您之前的问题,我认为可能没有充分挖掘局部变量 的概念。在这个方法中:

public String setOption(String option) throws IOException
{
    option = stdin.readLine();
    return option;
}

option 是一个局部变量。每次调用 setOption 方法时,您都将该变量的初始值 作为参数传递给它(而您碰巧忽略了该值),但该细节不在顺便说一句,这和

public String setOption() throws Exception
{
    String option = stdin.readLine();
    return option;
}

现在,局部变量与实例或类变量完全不同:它们仅在方法体内有效,并且仅在方法执行期间存在。考虑到这一点,让我们看一下这段代码:

static BufferedReader stdin = new BufferedReader(new InputStreamReader(
        System.in));
public static void main(String[] args) throws IOException
{
    Patient.setOption(null);    
}

在这里,您基本上是在滥用类变量 stdin 来处理本应是局部变量的内容:

public static void main(String[] args) throws IOException
{
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    Patient.setOption(null);    
}

关于您的方法调用的问题...setOption 目前是一个实例 方法,这意味着它必须在实例的上下文中调用。您按原样调用它,不涉及任何 Patient 实例。如果你继续沿着这条路走下去,你将只能代表一个病人,这可能不是你的想法。所以你想保持方法不变并创建一个 Patient 的实例:

Patient p = new Patient();
p.setOption(...);

在你的整体设计中,不清楚setOption应该扮演什么角色,但是它使用静态stdin变量并不是一个好主意(我已经做到了本地以上)。您希望将从 stdin 读取的任何数据传递给 setOption 方法,从而将其与输入读取逻辑分离。

关于java - 为什么 Eclipse 建议我将我的方法设为静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19812989/

相关文章:

java - Apache 电子邮件 validator 的错误

java - 错误: Could not find or load main class Mac Eclipse

eclipse - Robot框架和python selenium组合时的调试测试用例

java - 目标: package in maven .是什么意思

java - 找不到java中以下方法的错误

java - java中如何在一个方法中有一个return语句?

java - 如何在 jOOQ 生成器中强制所有 DATE 列为 LocalDateTime?

java - 我们可以在soapui中使用apache poi jar吗?

javac 选项递归编译给定目录下的所有 java 文件

Promise.prototype.then 中的 Javascript 函数不执行