2014-09-04 71 views
1

我写了如下简单的代码。基本上在setString,我输入“句子”作为字符串,并在getString,它应该返回字符串。当我在Junit中测试时,它说getString返回null而不是“句子”。Java代码返回null而不是字符串

public class MyString implements MyStringInterface{ 
    public String str; 

    //Sets the value of the current string 
    public void setString(String str){ 
     str = "Sentence"; 
    } 

    // Returns the current string 
    public String getString(){ 
     return str; 
    } 
} 
+0

您应该使用一个IDE。 – 2014-09-04 02:35:42

回答

0

的问题是setString()应该

public void setString(String str){ 
     this.str = str; 
    } 

然后你需要从你的主要方法

MyString s = new MyString(); 
s.setString("Sentence"); 
+0

感谢您的评论。我必须先创建一个接口,然后开发一个实现接口的类。然后我需要在Junit中创建测试用例来测试程序。我的问题是:主要方法在哪里?由于我使用Junit,我相信我们不会创建主要方法。在那种情况下,我应该从哪里获得用于从主方法调用的代码? – javabeginner 2014-09-04 02:46:23

5
public void setString(String str){ 
    str = "Sentence"; 
} 

调用在你的代码,当你调用str = "Sentence"你实际上是改变当地的变数。

在您的setString方法中,您将值设置为方法局部变量,而不是实例变量。所以你的实例变量值不会被改变,并且它的默认值是null。 你可以改变你的方法如下

public void setString(String str){ 
    this.str = "Sentence"; // this.str = str; 
} 

P.S

在你的代码被设置在setter方法修复价值。这是一个非常糟糕的做法,你不需要有一个做这样的事情的二传手。

+0

@javabeginner记住它不是使用setter方法的正确方法。如果str将具有固定值。为它创建setter方法没有意义。 Setter方法意味着允许更改实例字段的值 – Bren 2014-09-04 02:36:25

0
public void setString(String str){ 
     str = "Sentence"; 
    } 

此处“STR”在方法体指的是被作为参数传递给该方法的字符串变量“STR”。如果您有一个与参数名称相同的实例变量,则使用

this.str = str; 

“this”指向self,因此this.str指实例变量。在上面的例子中,我们覆盖了变量,因此值没有被设置为实例变量。

否则,你可以做如下:

public void setString(String formalParamStr){ 
     str = formalParamStr; 
    } 

现在所说的方法如下:

instanceVar.setString("Sentence");