Java <identifier>ожидается с writeObject () - PullRequest
0 голосов
/ 22 января 2012

Для назначения класса мне необходимо записать объект в файл.Наш профессор дал нам часть кода, чтобы завершить это, но, видимо, это неправильно, потому что я получаю ошибку.Вот мой код.

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 ]

2 голосов
/ 22 января 2012

, который должен был быть в основном методе

//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: позаботьтесь об исключениях ..

0 голосов
/ 22 января 2012

где вы определяете следующий код?

//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   

у вас есть ваш класс, у вас есть "основной метод", но где же код? Дополнительная вещь: что это такое "inven.dat"

Кстати, если у вас есть ошибка компиляции, вы не можете отладить ваш код, потому что ваш код должен быть компилятором раньше ...

0 голосов
/ 22 января 2012

Исполняемый код, такой как вызовы методов, должен находиться либо внутри метода, либо, возможно, в статическом блоке, но в вашем случае он явно принадлежит методу main.Переместите туда код, и он будет работать.

Кроме того, метод main является точкой входа в программу.Если поток управления не может каким-то образом перейти из метода main к коду, который вы хотите выполнить, в любом случае ничего не произойдет.

0 голосов
/ 22 января 2012

Как указано в javadoc метода writeObject, он выдает IOException.Поэтому вы должны либо перехватить исключение, установив оператор в блоке try-catch, либо позволить вашему методу main вызвать исключение

Далее, вы пытаетесь получить доступ к нестатическим полям из статического контекста, который выиграл 'либо не работает.

Наконец, ваше утверждение oos.writeObject(cInventory); вне вашего основного метода также не будет работать, так как вы не можете иметь операторы, лежащие в вашем классе.

0 голосов
/ 22 января 2012

Компилятор жалуется на следующую строку:

oos.writeObject(cInventory);            //write initial Inventory to file   

Вы не можете иметь отдельный код, подобный этому, вне всех методов. Переместите его в main().

Объявления переменных, которые предшествуют этому (FileOutputStream fos ...), вероятно, также должны быть перемещены в main(). Они будут компилироваться так, как они есть сейчас, но позже у вас возникнут проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...