对于类赋值,我需要将对象写入文件。我们的教授给了我们一段代码来完成这个,但显然这是错误的,因为我收到了一个错误。这是我的代码。
class InvMaintenance {
//create an OutputStream to write data to a file
FileOutputStream fos = new FileOutputStream(inven.dat);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
final long MAX_SIZE = 100; //constant for array length
Inventory cInventory = new Inventory(MAX_SIZE); //instantiate Inventory object
oos.writeObject(cInventory); //write initial Inventory to file
public static void main(String[] args) {
//Output options
/* Inventory Maintenance
1) Add Item
2) Remove Item
3) Sell Item
4) Receive Item
5) Display Inventory
6) Quit
Please Select NUMBER: */
//switch on options
//call appropriate method
oos.writeObject(cInventory);
oos.close();
}
}
我的错误发生在oos.writeObject(cInventory);
Item.java:150: <identifier> expected oos.writeObject(cInventory); //write initial Inventory to file ^ Item.java:150: <identifier> expected oos.writeObject(cInventory); //write initial Inventory to file ^ 2 errors
是的,出于某种原因,它说这是两个完全相同的错误。
任何帮助调试将不胜感激。怎么了?
答案 0 :(得分:2)
必须在主方法
中//create an OutputStream to write data to a file
FileOutputStream fos = new FileOutputStream(inven.dat);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
Inventory cInventory = new Inventory(MAX_SIZE); //instantiate Inventory object
更改了代码:
class InvMaintenance {
final static long MAX_SIZE = 100; //constant for array length
public static void main(String[] args)
{
//Output options
/* Inventory Maintenance
1) Add Item
2) Remove Item
3) Sell Item
4) Receive Item
5) Display Inventory
6) Quit
Please Select NUMBER: */
//switch on options
//call appropriate method
//create an OutputStream to write data to a file
FileOutputStream fos = new FileOutputStream(inven.dat);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
Inventory cInventory = new Inventory(MAX_SIZE); //instantiate Inventory object
oos.writeObject(cInventory);
oos.close();
}
}
提示:将常量更改为最终的静态长度。使用静态值,在编译时复制值
提示2:照顾例外..
答案 1 :(得分:0)
编译器抱怨以下行:
oos.writeObject(cInventory); //write initial Inventory to file
除了所有方法之外,你不能拥有这样的独立代码。将其移至main()
。
在它之前的变量声明(FileOutputStream fos ...
)也应该移到main()
。他们会像现在一样编译,但以后会引起你的问题。
答案 2 :(得分:0)
如writeObject
方法的javadoc所述,它会抛出IOException
。所以你应该通过在try-catch
块中设置语句来捕获异常,或者让main方法抛出异常
此外,您正尝试从静态上下文访问非静态字段,这些字段也无法正常工作。
最后,您的主要方法之外的陈述oos.writeObject(cInventory);
将无法正常工作,因为您不能在班级中找到陈述。
答案 3 :(得分:0)
方法调用等可执行代码必须位于方法或可能是静态块中,但在您的情况下,它明显属于main
方法。将代码移到那里就可以了。
此外,main
方法是程序入口点。除非控制流有某种方式从main
方法内部转移到你想要执行的代码,否则什么都不会发生。
答案 4 :(得分:0)
您在哪里定义以下代码?
//create an OutputStream to write data to a file
FileOutputStream fos = new FileOutputStream(inven.dat);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
final long MAX_SIZE = 100; //constant for array length
Inventory cInventory = new Inventory(MAX_SIZE); //instantiate Inventory object
oos.writeObject(cInventory); //write initial Inventory to file
你有你的班级,你有一个“主要方法”,但代码在哪里? 附加的事情:它是什么“invent.dat”
顺便说一句,如果你有编译错误,你就无法真正调试你的代码,因为你的代码应该是编译器之前的代码......