编译以下代码时出错:
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
?
答案 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)
关键字初始化对象。