writeObject()</identifier>期望的Java <identifier>

时间:2012-01-22 09:56:12

标签: java compiler-errors

对于类赋值,我需要将对象写入文件。我们的教授给了我们一段代码来完成这个,但显然这是错误的,因为我收到了一个错误。这是我的代码。

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

是的,出于某种原因,它说这是两个完全相同的错误。

任何帮助调试将不胜感激。怎么了?

5 个答案:

答案 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”

顺便说一句,如果你有编译错误,你就无法真正调试你的代码,因为你的代码应该是编译器之前的代码......