初始化对象变量错误

时间:2015-06-20 20:26:32

标签: java

编译以下代码时出错:

class TapeDeck 
{
    boolean canRecord = false;

    void playTape() 
    {
        System.out.println("tape playing");
    }

    void recordTape() 
    {
        System.out.println("tape recording");
    }
}

class TapeDeckTestDrive
{
    public static void main(String [] args)
    {
        TapeDeck t; 
        t.canRecord = true;
        t.playTape();

        if(t.canRecord == true) 
        {
            t.recordTape();
        }
    }
}

错误是:

TapeDeck.java:21: error: variable t might not have been initialized
        t.canRecord = true;
        ^
1 error

如何在类中初始化变量t

6 个答案:

答案 0 :(得分:3)

使用new关键字初始化对象。

TapeDeck t = new TapeDeck();

答案 1 :(得分:1)

您可以将代码更改为:

sed -n -E -e '/And/,$p' file

答案 2 :(得分:1)

实例化您的TapeDeck对象

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.monitorjbl.json.JsonView;
import com.monitorjbl.json.JsonViewSerializer;
import static com.monitorjbl.json.Match.match;

//initialize jackson
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(JsonView.class, new JsonViewSerializer());
mapper.registerModule(module);

 //get a list of the objects
List<MyObject> list = myObjectService.list();

String json;
if(user.getRole().equals('ADMIN')){
    json = mapper.writeValueAsString(list);
} else {
    json = mapper.writeValueAsString(JsonView.with(list)
        .onClass(MyObject.class, match()
           .exclude("*")
           .include("name")));
}

System.out.println(json);

答案 3 :(得分:1)

您需要创建TapeDeck的实例并将其分配给t引用。您可以使用new关键字

创建实例
TapeDeck t; 
t = new TapeDeck();

或一行

TapeDeck t = new TapeDeck();

否则t保持未初始化状态,您无法在未初始化的变量上调用任何方法。

BTW if(t.canRecord == true)被视为代码嗅觉,因为它可能会导致if(variable=true)等问题,我们将true分配给变量(=true)而非比较({{1} }})。要避免此类问题,请使用

==true

或者如果您希望if(t.canRecord) ==提高可读性,那么您不想删除它们,请使用yoda-condition

true

答案 4 :(得分:1)

您可以使用new初始化您的班级名称TapeDesck();

TapeDeck t = new TapeDeck();

如果你不这样做,你将无法使用班级TapeDesck()内的任何方法。

如果你有一个构造函数,那么你可以用它来初始化它。例如,如果你有这个构造函数(它只是一个例子,不要专注于变量的名称):

class TapeDesck
{
   private int number;
   private String prove;

   public TapeDesck(int number, String prove)
   {
       this.number = number;
       this.prove = prove;
   }
}

您可以像这样初始化它:

TapeDeck t = new TapeDeck(1,"This is a prove"); 

我希望它会对你有所帮助!

答案 5 :(得分:0)

您刚刚在main()中的TapeDeck t; // Variable just declared not initialized. 声明了变量:

TapeDeck t = new TapeDeck();  // Initialize it to use members.  

解决方案:

C++

您似乎来自C++背景。 Java允许这种对象初始化,但new不允许。您必须使用$(VAR:FROM=TO)关键字初始化对象。