Java 方法返回null[simple]

Java 方法返回null[simple],java,null,encapsulation,instance-variables,Java,Null,Encapsulation,Instance Variables,对于介绍性Java,我将创建一个Door类和一个DoorTester类。本质上,我们正在试验实例变量并创建公共方法。我创建了door类,如下所示,但是我的DoorTester在查找.getState时返回“null” Door.java public class Door { // Create instance variables of type String private String name; private String state; // Declare method 'open

对于介绍性Java,我将创建一个Door类和一个DoorTester类。本质上,我们正在试验实例变量并创建公共方法。我创建了door类,如下所示,但是我的DoorTester在查找.getState时返回“null”

Door.java

public class Door {
// Create instance variables of type String
private String name;
private String state;

// Declare method 'open' and 'close'
public void open() {
    state = "open";
}
public void close() {
    state = "closed";
}

// Add a constructor for the Door class
public Door(String name, String state) {
}

// Create an accessor of 'state'
public String getState() {
    return name;
}

// Set the state
public void setState(String newState) {
    state = newState;
}
}

DoorTester.java

public class DoorTester {
public static void main(String[] args) {
   Door frontDoor = new Door("Front", "open");
   System.out.println("The front door is " + frontDoor.getState());
   System.out.println("Expected:  open");
   Door backDoor = new Door("Back", "closed");
   System.out.println("Expected:  closed");        
   // Use the mutator to change the state variable
   backDoor.setState("open");
   System.out.println("The back door is " + backDoor.getState());
   System.out.println("Expected:  open");
   // Add code to test the setName mutator here 
  }
}

您的
getState()
方法不会返回
state
,而是返回
name

// Create an accessor of 'state'
public String getState() {
    return name; // <-- Simply change this
}

您必须修改
Door
类的构造函数,如

public Door(String name, String state) {
this.name=name;
this.state=state;
}
实际上,
name
state
没有初始化。 另请参见此


修改的代码片段:

public class Door {
// Create instance variables of type String
private String name;
private String state;

// Declare method 'open' and 'close'
public void open() {
    state = "open";
}
public void close() {
    state = "closed";
}

// Add a constructor for the Door class
public Door(String name, String state) {
 this.name=name;
 this.state=state;
}

// Create an accessor of 'state'
public String getState() {
    return state;            //<<<<<<<----------also make an Edit here 
}

// Set the state
public void setState(String newState) {
    state = newState;
}
}
公共类门{
//创建字符串类型的实例变量
私有字符串名称;
私有字符串状态;
//声明方法“打开”和“关闭”
公开作废{
state=“打开”;
}
公众假期结束(){
state=“已关闭”;
}
//为Door类添加构造函数
公共门(字符串名称、字符串状态){
this.name=name;
这个状态=状态;
}
//创建“状态”的访问器
公共字符串getState(){

返回状态;//您的
门中存在问题

public class Door {
private String name;
private String state;

public void open() {
    state = "open";
}

public void close() {
    state = "closed";
}

public Door(String name, String state) { // argument passed here need to set
// set like
  this.name=name;
  this.state=state;
}

public String getState() {
    return name;
}

public void setState(String state) { 
    state = state; // you need to use this.state=state
 }
}

Java

中关键字的重要性您没有在构造函数中设置私有变量…..您从未在构造函数中分配过变量。我将其更改为state,但仍然返回null。@mshades:这只是两个问题中的一个。您需要做我提到的两个更正。谢谢,这两个问题一起解决了。您需要做什么“this”的意思是?-Java新手-这意味着您希望引用封闭类的上下文,无需使用
this.state
,因为参数名为
newState
。有没有办法不用“this”就可以这样做? @Keppil@mshades:当然可以,只需为字段和参数使用不同的名称,例如
state
newState
public class Door {
private String name;
private String state;

public void open() {
    state = "open";
}

public void close() {
    state = "closed";
}

public Door(String name, String state) { // argument passed here need to set
// set like
  this.name=name;
  this.state=state;
}

public String getState() {
    return name;
}

public void setState(String state) { 
    state = state; // you need to use this.state=state
 }
}