Error array dimension missing

I keep getting array dimension missing public static Planet[] readPlanets(String filename) { allPlanets = new Planet[]; In in = new In (filename); int nplanets = in.readInt(); dou...

I keep getting array dimension missing

public static Planet[] readPlanets(String filename) {

    allPlanets = new Planet[];
    In in = new In (filename);
    int nplanets = in.readInt();
    double radius = in.readDouble();
    for (int i = 0; i < allPlanets.length; i++) {
        double pxxPos = in.readDouble();
        double pyyPos = in.readDouble();
        double pxxVel = in.readDouble();
        double pyyVel = in.readDouble();
        double pmass = in.readDouble();
        String pimgFileName = in.readString();
    }
    return allPlanets;
}

Planet has six dimensions, and I have an array of multiple planets

hpopiolkiewicz's user avatar

asked Jan 27, 2016 at 6:52

Chimere Ibecheozor's user avatar

2

You have to declare size of the array before you can use it’s length attribute.

For example:

allPlanets = new Planet[6];

answered Jan 27, 2016 at 6:56

hpopiolkiewicz's user avatar

hpopiolkiewiczhpopiolkiewicz

3,0444 gold badges23 silver badges36 bronze badges

When you create an array, you have to specify the size. I strongly suspect you want:

In in = new In(filename);
int nPlanets = in.readInt();
allPlanets = new Planet[nPlanets];

Note that it’s odd that you’re assigning to a field and returning the reference from the method. It would be more usual to do one or the other, e.g. use a local variable:

Planet[] planets = new Planet[nPlanets];
...

return planets;

And then assign to the field in the calling code:

allPlanets = readPlanets(...);

answered Jan 27, 2016 at 6:57

Jon Skeet's user avatar

Jon SkeetJon Skeet

1.4m851 gold badges9045 silver badges9133 bronze badges

1

Содержание

  1. uchusjava
  2. Работа с массивами.
  3. Array dimension missing
  4. Output of Java Programs | Set 42 (Arrays)
  5. HELP: ImageIcon Array. array dimension missing
  6. All 4 Replies
  7. Сообщения об ошибках и предупреждения при компиляции
  8. Ошибка J0001
  9. INTERNAL COMPILER ERROR

uchusjava

Работа с массивами.

В предыдущих статьях стало немного понятно, как присвоить значение элементам массива, создать многомерный и что нужно для того, чтобы вывести все это на экран. Теперь представим задачу, в которой нужно создать массив в 1000 элементов и присвоить им одинаковые значения. Для решения этой проблемы нам понадобится команда Arrays.fill().

Создадим массив (сформируем объект), выделим необходимое количество памяти (которая заполниться значением null) и затем при помощи команды Arrays.fill() присвоим элементам одинаковые значения.

Если вы посмотрите на рисунок, то увидите ошибки на консоли, вот что они означают: 8 : error: class, interface, or enum expected >; — цифра указывает на строку в которой допущена ошибка, далее следует описание проблемы, а именно лишняя скобка, которая идет после основной закрывающей скобки главного класса. Следующая ошибка в том, что после создания объекта не стоят квадратные скобки: :8: error: ‘[‘ expected int[] rich = new int;

:8: error: ‘]‘ expected int[] rich = new int;

2 errors // означает количество ошибок при этой компиляции

И еще одна ошибка говорит о том, что для массива не выделено пространства :8: error: array dimension missing int[] = new int[]; 1 error

Для того, чтобы отображение было правильным применим команду Arrays.toString

System.out.println(Arrays.toString(rich));//выводим на экран

Теперь попробуем создать двухмерный массив с одинаковыми значениями.

public static void main(String[]args)<

int[][] rich = new int[10][50];//Создадим массив (сформируем объект),

// выделим необходимое количество памяти

Arrays.fill(int rich, 9, 2);

System.out.println(Arrays.toString(rich)); //выводим на экран

К сожалению этот финт мне не удалось сделать, т.к. при компиляции ошибок не возникло, а вот при выполнении кода получилось: exception in thread “main” java.lang.arraystore… Буду разбираться.

У нас в садике и близлежащие территории посыпало градом, а вот около дома не было и следа.

Источник

Array dimension missing

  • I have a line in my code:

    int array = new int[] array;

    the error is array dimention missing

    What does this mean?

  • To declare an array you need something along the lines of

    int[] anIntArray = new int[10];

    This declares ‘anIntArray’ to be an array of length 10.

    Retired horse trader.
    Note: double-underline links may be advertisements automatically added by this site and are probably not endorsed by me.

  • You can declare an array of unknown size like this:

    but there’s no array object there. You can’t use «new» to actually create the object until you actually know the size.

    Источник

    Output of Java Programs | Set 42 (Arrays)

    Prerequisite : Java Arrays

    Question 1. What is the output of this question?

    Option
    A) Error
    B) Runtime Exception
    C) 5
    97
    10
    D) 5
    65
    10

    Explanation : To specify array size allowed data type are – byte, short, int, char and all of these are valid data types here.

    Question 2. What is the output of this question?

    Option
    A) Error
    B) Exception
    C) Run successfully
    D) None

    Explanation : One Dimension array have size declaration as compulsory feature.

    Question 3. Which of the following declarations are invalid?

    Option
    A) All
    B) line 1, 3, 4
    C) line 3, 4
    D) line 2, 3, 4

    Explanation : First two declarations are allowed and so no error. line 3 and 4 have zero and last dimension respectively.
    error: array dimension missing

    Question 4. Which of the following lines give error?

    Option
    A) line 4, 5, 6, 7
    B) All
    C) No Error
    D) line 4, 7

    Explanation : In three dimensional array have first two dimension declaration is compulsory other wise we will get compile time error:illegal startup expression.

    Question 5. What is the output of this question?

    Option
    A) 0

    B)[I@6bc7c054

    C) 0 0 0 0 0

    D) none

    Explanation : arr : It is giving the base address of array
    arr[0] : It is giving value of array element at 0 th location.

    This article is contributed by Shivakant Jaiswal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

    Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

    Источник

    HELP: ImageIcon Array. array dimension missing

    and I dunno what’s missing. and not sure if anything else is wrong because for now there are 4 erros for

      3 Contributors 4 Replies 558 Views 13 Hours Discussion Span Latest Post 10 Years Ago Latest Post by JamesCherrill

    Thanks. I still have a few errors though.

    public void itemStateChange (ActionEvent e)

    I think u require to implement ItemEvent, and please post the errors

    You are reading images one ata time, but then trying to create a new array for each image. You can’t assign an image to an array, just to one lement of the array, eg

    We’re a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.

    Reach out to all the awesome people in our software development community by starting your own topic. We equally welcome both specific questions as well as open-ended discussions.

    Источник

    Сообщения об ошибках и предупреждения при компиляции

    Ошибка J0001

    INTERNAL COMPILER ERROR

    Фатальная ошибка, после которой компилятор не может продолжать работу. Инструкции по поиску информации об этой ошибке в Microsoft Knowledge Base см. в справочном файле технической поддержки (меню Help). Кроме того, попробуйте упростить код фрагмента, при компиляции которого возникла ошибка, и скомпилировать его еще раз.

    Не удалось выделить дополнительную память, необходимую для работы компилятора. Проверьте работоспособность файла подкачки, его местонахождение и размер. Кроме того, убедитесь, что на соответствующем жестком диске достаточно места для расширения файла подкачки.

    Cannot open class file ‘filename’ for reading

    Указанный исходный файл не удалось открыть для чтения. Обычно эта ошибка возникает, если другое приложение открыло файл в монопольном режиме. Закройте приложение, которое пользуется этим файлом, и повторите компиляцию.

    Cannot open class file ‘filename’ for writing

    He удалось создать указанный результирующий файл класса (с расширением CLASS). Обычно эта ошибка возникает, когда компилятор не сумел получить права на создание или запись в файл. Убедитесь, что файл не имеет атрибута «только для чтения» и не используется другим приложением. Эта ошибка иногда случается и при выполнении или отладке программы, в состав которой входит указанный файл. Если причина именно в этом, закройте все экземпляры программы и повторите компиляцию.

    Cannot read class file ‘filename’

    He удалось прочесть указанный файл класса. Обычно это происходит в случае ошибки чтения с устройства или если компилятор не может получить право на чтение файла. Убедитесь, что файл не используется другим приложением. Проверьте правильность работы устройства (например, с помощью утилиты сканирования диска).

    Cannot write class file ‘filename’

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

    Не удалось определить значение выражения или оператора в исходном тексте. Обычно это сообщение свидетельствует о наличии синтаксической ошибки в строке исходного файла, указанной в сообщении. Чаще всего этому сообщению сопутствует более информативное сообщение об ошибке. Исправьте перечисленные ошибки и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    int i =; // ошибка: отсутствует присваиваемое значение > >

    После метки оператора или в условном выражении с использованием тернарного оператора должно стоять двоеточие. Обычно эта ошибка возникает, если двоеточие случайно пропущено. Часто в сообщении указана строка, следующая за строкой, содержащей ошибку. Проверьте наличие необходимых двоеточий и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    private static int x = 1;

    public void method1(int argl) <

    case 1 // ошибка: после ‘case 1’ отсутствует ‘:’ >

    В указанной строке отсутствует необходимая точка с запятой. Обычно эта ошибка возникает, если после оператора случайно пропущена точка с запятой. Часто в сообщении указана строка, следующая за той, что содержит ошибку. Проверьте наличие необходимых точек с запятой и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    private static int x = 10 // ошибка: пропущена ‘;’

    public void method1(int argl) <

    // ошибка: перед ‘i++’ пропущена ‘;’ > > >

    В указанной строке отсутствует необходимая открывающая скобка. Обычно эта ошибка возникает, если пропущена открывающая скобка в одном из следующих случаев:

    • при инициализации типа;
    • в операторе catch;
    • в выражении в скобках;
    • в цикле while;
    • • в цикле for;
    • в операторах if/else.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1(int argl, int arg2) <

    В указанной строке отсутствует необходимая закрывающая скобка. Обычно эта ошибка возникает, если закрывающая скобка пропущена в одном из следующих случаев:

    • при инициализации типа;
    • при явном преобразовании типа;
    • в операторе catch;
    • в выражении в скобках;
    • в цикле while;
    • в цикле for;
    • в операторах if/else.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple < private int i;

    public void method1(int arg1, int arg2) <

    В указанной строке отсутствует закрывающая квадратная скобка. Обычно это сообщение свидетельствует об отсутствии закрывающей скобки в объявлении массива. Часто в сообщении указывается строка, следующая за строкой, содержащей ошибку. Убедитесь, что число открывающих и закрывающих скобок одинаково, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    private int x[ = new int[500];

    В указанной строке отсутствует открывающая фигурная скобка. Обычно это сообщение свидетельствует об отсутствии открывающей скобки в начале тела класса или метода. Часто в сообщении указывается строка, следующая за фактической строкой, содержащей ошибку. Убедитесь, что число открывающих и закрывающих скобок одинаково, и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple // ошибка: пропущена » <‘

    public void method1() <

    // операторы тела метода > >

    В указанной строке отсутствует закрывающая фигурная скобка. Обычно это сообщение свидетельствует об отсутствии закрывающей скобки в конце тела кларса или метода. Часто в сообщении указывается строка, следующая за фактической строкой, содержащей ошибку. Убедитесь, что число открывающих и закрывающих скобок одинаково, и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple < <

    // ошибка: нет закрывающей скобки объявления класса

    В указанной строке отсутствует ключевое слово while. Обычно эта ошибка возникает в случае синтаксической ошибки в операторе цикла do/while.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() < do<

    // операторы тела цикла >;

    // ошибка: отсутствует оператор ‘while’ >

    Ниже приведен вариант того же кода с исправленной ошибкой в операторе цикла do/while:

    public class Simple <

    public static void method1() < int x = 10; do<

    >while(x != 0); // корректная форма цикла do/while >

    public static void main(String args[]) >

    Компилятор не обнаружил идентификатора перед именем класса, интерфейса, переменной или метода. Обычно это сообщение свидетельствует об отсутствии в объявлении описания типа. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    private i; // ошибка: пропущен тип

    Expected ‘class’ or ‘interface’

    В объявлении, приведенном в сообщении, отсутствует указание на класс или интерфейс. Обычно эта ошибка возникает, если в объявлении класса или интерфейса случайно пропущено соответствующее ключевое слово. Другая возможная причина — несоответствие числа открывающих и закрывающих скобок. Эту ошибку иллюстрирует следующий пример:

    В приведенном ниже примере несоответствие числа открывающих и закрывающих скобок также приведет к сообщению об ошибке J0020:

    public class Simple <

    >> // ошибка: лишняя закрывающая скобка ‘>’

    Expected type specifier

    В строке, указанной в сообщении, отсутствует описание типа. Обычно эта ошибка возникает в случае ошибки в написании типа при объявлении переменной или создании экземпляра класса. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public Object о =new; // ошибка: не указан тип объекта ‘Object’

    Expected end of file

    Компилятор не нашел символа «конец файла». Обычная причина этого сообщения — повреждение исходного файла. Просмотрите файл и исправьте обнаруженные ошибки, сохраните его и повторите компиляцию.

    Expected ‘catch’ or ‘finally’

    После блока try отсутствует обязательный оператор catch или finally. Эту ошибку иллюстрирует следующий пример:

    > // ошибка: отсутствует оператор ‘catch’ или ‘finally’

    Вот тот же код с правильной формой блока try/catch:

    public class Simple <

    public void method1() < try<

    /* Обработка ошибочных ситуаций. Тип ошибки определяется

    с помощью объекта ‘Exception’. */ > >

    Expected method body

    Компилятор не обнаружил тело метода после его объявления. Обычно эта ошибка возникает при отсутствии скобок вокруг тела метода. Другая возможная причина — отсутствие ключевого слова abstract или native в объявлении метода. Эту ошибку иллюстрирует следующий пример: public abstract class Simple <

    public void methodl();

    // ошибка: отсутствует ключевое слов ‘abstract’

    // Это же сообщение возникнет, если класс не объявлен как абстрактный

    Компилятор ожидал обнаружить оператор до окончания текущего блока. Обычно это сообщение свидетельствует об отсутствии открывающей скобки блока или открывающей и закрывающей скобок. Убедитесь, что число открывающих и закрывающих скобок одинаково. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    void method1(int argl) <

    // ошибка: отсутствует открывающая скобка тела оператора if > >

    Expected Unicode escape sequence

    Компилятор ожидал обнаружить управляющую последовательность символов Unicode. Обычно это сообщение свидетельствует о том, что управляющая последовательность не начинается с обязательной комбинации символов «u». Проверьте синтаксис управляющих последовательностей и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // ошибка: неразрешенная последовательность символов ‘\’

    Identifier too long

    Компилятор встретил идентификатор, длина имени которого превышает 1 024 символа. Сократите имя идентификатора и повторите компиляцию.

    Компилятор обнаружил числовое значение, не поддерживаемое языком Java. Обычно это сообщение свидетельствует о том, что значение выходит за допустимые пределы значений основных типов данных языка Java или слишком велико для хранения в указанном в его объявлении типе.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple . <

    long i = 12345678901234567890;

    // ошибка: выражение выходит за пределы, установленные для типа ‘long’

    Компилятор обнаружил ASCII-символ, который нельзя использовать в идентификаторе. Обычно это сообщение свидетельствует о том, что в имени класса, интерфейса, метода или переменной использован запрещенный символ.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // ошибка: символ ‘#’ нельзя использовать в идентификаторе

    Invalid character constant

    Компилятор обнаружил попытку присвоения переменной типа char запрещенного символа или управляющей последовательности. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    char с = ‘’; // ошибка: недопустимая управляющий символ

    char х = ‘\’; // корректное присваивание значения ‘’ переменной

    Invalid escape character

    Обнаружена недопустимая управляющая последовательность. Обычно это сообщение вызвано синтаксической ошибкой в управляющей последовательности Unicode. Кроме того, оно появляется при использовании символа «» при присваивании значения строковой переменной. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // ошибка: символы Unicode должны состоять из 4 шестнадцатеричных цифр

    // корректное присваивание управляющей последовательности Unicode >

    Следующий пример иллюстрирует возникновение этого сообщения при присваивании строковой переменной символа «».

    public class Simple <

    public String str = «C:WindowsDesktop»;

    // ошибка: некорректное использование символа ‘V в переменой типа ‘String’

    // Правильная форма: » С:\Windows\Desktop»

    Unterminated string constant

    Компилятор обнаружил строковую константу, не заканчивающуюся двойной кавычкой. Обычно это сообщение вызвано случайным пропуском закрывающей кавычки или недопустимым переносом строковой константы на следующую строку. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    String str = «Hello;

    // ошибка: отсутствует закрывающая кавычка

    Компилятор не обнаружил завершения блока комментария. Обычно это сообщение вызвано отсутствием символов «*/», которыми должен заканчиваться комментарий.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    /* Этот блок комментария

    Initializer block cannot have modifiers except ‘static’

    В описании инициализатора обнаружен недопустимый модификатор. В объявлении статического инициализатора допустим только модификатор static; в объявлении инициализатора экземпляра класса модификаторы не допускаются. Удалите модификатор из описания, указанного в сообщении, или добавьте к нему модификатор static и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    protected // ошибка: недопустимое ключевое слов ‘protected’

    A data member cannot be ‘native’, ‘abstract’, or ‘synchronized’

    В объявлении переменной обнаружен один из перечисленных в сообщении модификаторов. Модификаторы synchronized и native допустимы только в объявлении методов, a abstract — только в объявлении методов, классов и интерфейсов. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    native int myvar1;

    abstract int myvar2;

    synchronized int myvarS;

    // ошибка: в объявлении переменных присутствуют недопустимые // ключевые слова

    A method cannot be ‘transient’ or ‘volatile’

    В объявлении метода обнаружен один из перечисленных в сообщении модификаторов. Модификаторы transient и volatile допустимы только в объявлении переменных класса.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    transient void Method1()<>;

    volatile void Method2()<>;

    // ошибка: методы объявлены с использованием недопустимых модификаторов

    ‘final’ member ‘Identifier’ must be Initialized when declared in an interlace

    Компилятор обнаружил в объявлении интерфейса неинициализированную переменную, объявленную с модификатором final. Значение переменной интерфейса, объявленной с модификатором final, должно быть задано непосредственно при объявлении. Значение, заданное при инициализации, нельзя впоследствии изменить программным способом. Эту ошибку иллюстрирует следующий пример:

    final int COOL_RAD;

    // ошибка: переменной необходимо присвоить значение

    Cannot define a method body for abstract/native methods

    После объявления метода с модификаторами abstract или native обнаружено тело метода. Абстрактный метод реализуется в производных классах. Метод, объявленный с модификатором native, реализуется на другом языке (например, на C++).

    Эту ошибку иллюстрирует следующий пример:

    public abstract class Simple <

    > // ошибка: абстрактные методы реализуются в производных классах >

    Методы, объявленные в описании интерфейса, по умолчанию считаются абстрактными. В результате сообщение об ошибке J0040 возникает и при наличии тела метода в объявлении интерфейса’ Вот пример такой ошибки:

    public interface Simple <

    // ошибка: тело этого метода

    // должно находиться в классе,

    // реализующем интерфейс ‘Simple’ > >

    В объявлении дважды присутствует один и тот же модификатор. Обычно это сообщение вызвано дублированием модификатора. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // использован дважды // тело метода

    Only classes can Implement interfaces

    Компилятор обнаружил объявление интерфейса с использованием ключевого слова implements. Интерфейс может быть реализован только классом. Обычно это сообщение свидетельствует об ошибочной попытке реализации интерфейса вместо наследования свойств другого интерфейса с помощью ключевого слова extends. Эту ошибку иллюстрирует следующий пример:

    public interface Simple implements color<

    // ошибка: интерфейс ‘Simple’ не может

    // реализовывать интерфейс ‘color’

    interface pattern extends color <

    // наследование интерфейса — допустимая операция

    Redeclaration of member ‘identifier’

    Компилятор обнаружил идентификатор, дважды объявленный в одном и том же блоке. Обычно эта ошибка возникает при попытке дважды объявить переменную или определить метод. Проверьте, не объявили ли Вы одну и ту же переменную (или метод) дважды в одном и том же классе. Имена методов могут совпадать, но в этом случае они обязательно должны иметь разные параметры. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // другие объявления класса

    private int i; // ошибка: повторное определение переменной ‘i’

    public void method1() <

    //.ошибка: повторное определение метода > >

    Cannot find definition for class ‘Identifier’

    Компилятор не смог найти объявление указанного класса. Обычно это происходит в случае ошибки в имени класса или при отсутствии пакета, содержащего указанный класс.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    NotSimple smp = new NotSmple();

    // ошибка: недопустимое имя класса ‘NotSmple’

    ‘identifier’ Is not a class name

    Это сообщение возникает в одной из следующих ситуаций:

    • не найден класс, имя которого указано в операторе import;
    • в случае синтаксической ошибки в операторе import;
    • при определении класса сделана попытка наследования интерфейса (допустимо только наследование классов).

    Проверьте правильность оператора импорта, убедитесь в наличии пакетов и классов, которые Вы пытаетесь импортировать, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    import non.existent; /* ошибка: пакет не существует, так что импорт

    public class Simple <

    ‘identifier’ is not an interface name

    Идентификатор, на который указывает ключевое слово implements, не является идентификатором интерфейса. Обычно эта ошибка возникает при попытке использования класса вместо интерфейса в операторе implements.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple implements Simple2 <

    // ошибка: попытка реализации класса ‘Simple2’

    Cannot extend final class ‘Identifier’

    Обнаружена попытка расширения класса, объявленного с модификатором final. Классы, объявленные таким способом, не подлежат расширению.

    Эту ошибку иллюстрирует следующий пример:

    final class Simple2 <

    public class Simple extends Simple2 <

    // ошибка: класс ‘Simple2’ нельзя расширять

    Undefined name ‘identifer’

    Обнаружено обращение к несуществующему классу, методу или переменной. Это сообщение может возникнуть в случае:

    • обращения к несуществующей или неверно объявленной переменной;
    • вызова метода из несуществующего или неверно объявленного объекта;
    • попытки импорта несуществующего или неверно объявленного класса. Убедитесь, что обращение к указанному в сообщении классу, методу или переменной корректно, и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    import Java.io.bogus; // ошибка: неизвестное имя класса

    public class Simple <

    // ошибка: переменная ‘novarl’ не объявлена

    public void method2() <

    NotSimple nt = new NotSimple();

    // ошибка: неверно указано имя объекта (‘nр’ вместо ‘nt’)

    public vbid methodx() <

    Undefined package ‘identifier’

    Обнаружено объявление пакета, определение которого не найдено. Обычно это сообщение вызвано синтаксической ошибкой в операторе import, невозможностью найти пакет или его отсутствием. Эту ошибку иллюстрирует следующий пример:

    // ошибка: недопустимое имя пакета ‘bogus’

    public class Simple <

    Ambiguous name: ‘identifier’ and ‘identifier’

    Компилятор не может устранить неоднозначность, вызванную указанными идентификаторами. Обычно это сообщение свидетельствует об использовании одного и того же имени класса в двух пакетах, импортированных в исходный файл с помощью шаблона «*». Убедитесь, что в импортируемых пакетах отсутствуют классы с одинаковыми именами, и повторите компиляцию.

    Missing return type specification

    Обнаружено объявление метода без указания типа возвращаемого значения. В объявлении метода обязательно должен быть указан тип возвращаемого значения. Если метод ничего не возвращает, пользуйтесь ключевым словом void.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    Class file ‘identifier’ should not contain class ‘identifier’

    Класс, указанный в сообщении, не найден в указанном файле класса. Обычно эта ошибка возникает при переименовании файла класса после компиляции. Поскольку имена файла и содержащегося в нем класса не совпадают, компилятор не может использовать имя файла в качестве имени класса. Чтобы этого не случилось, измените имя класса или верните файлу класса исходное имя.

    Cannot have a variable of type ‘void’

    Обнаружена объявление переменной типа void. Ключевое слово void не может присутствовать в объявлении переменных — оно допустимо только в описании типа значения, возвращаемого методом (где оно указывает, что метод на самом деле не возвращает значения). Эту ошибку иллюстрирует следующий пример:

    public interface Simple <

    public final static void i = 1;

    // ошибка: тип ‘void’ недопустим в объявлении переменной

    Cannot reference member ‘identifier’ without an object

    Обнаружено обращение к переменной без указания объекта. Обычно это сообщение свидетельствует об обращении к переменной класса или

    его методу из статического метода без указания экземпляра класса. В статическом методе запрещено использование неполных имен элементов класса. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    private int x; public void method1() < // тело метода

    public static void main(String args[]) <

    x = 0; /* ошибка: переменная ‘х’ должна быть объявлена как ‘ статическая или на нее нужно ссылаться с указанием

    method1(); / ошибка: ‘method1’ должен быть объявлен статическим или для его вызова необходимо указать экземпляр класса */

    Ниже приведен пример корректного обращения к нестатической переменной или методу класса:

    public class Simple <

    private int x; // тип доступа к переменной класса не имеет значения

    public void method1() <

    public static void main(String args[]) <

    // создание экземпляра класса ‘Simple’

    Simple smp = new Simple();

    smp.x = 0; // корректное обращение к переменной класса

    smp.method1(); // корректный вызов метода класса > >

    Invalid forward reference to member ‘identifier’

    Обнаружена попытка инициализации переменной с помощью еще необъявленной переменной. Во избежание подобной ситуации измените порядок объявления переменных так, чтобы переменная, присутствующая в объявлении другой переменной, была объявлена до ее использования.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    private static int i = j;

    // ошибка: переменная ‘j’ еще не объявлена

    private static int j = 0; >

    Ниже приведен пример корректной инициализации одной переменной класса с помощью другой:

    public class Simple <

    private static int j = 0; // переменная класса объявлена

    private static int i = j; // после объявления переменной ‘j’ ее можно

    // использовать в инициализации переменной //’i’ >

    The members ‘identifier’ and ‘identifier’ differ in return type only

    При переопределении метода базового класса в производном классе замещенный метод отличается от соответствующего метода базового класса только типом возвращаемого значения. В языке Java переопределение метода должно сопровождаться изменением его сигнатуры. Уникальная сигнатура метода состоит из его имени, а также числа, типа и порядка параметров.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple extends Simple2 <

    public void method1() <

    // ошибка: перегруженный метод отличается только

    // типом возвращаемого значения

    public int method1 () <

    Attempt to reduce access level of member ‘identifier’

    В компилируемом классе обнаружен метод, переопределяющий метод базового класса с изменением уровня доступа. Производные классы, перегружающие методы базового класса, не могут изменять их спецификаторы доступа. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    class Simple2 extends Simple<

    private void method1() <

    /* ошибка: при перегрузке метода базового класса нельзя изменять его спецификаторы доступа. */

    Declare the class abstract, or implement abstract member ‘Identifier’

    В классе, базовом классе или реализованном интерфейсе обнаружен абстрактный метод, не имеющий реализации. Обычно это сообщение свидетельствует о том, что класс реализует интерфейс или расширяет класс, содержащий объявление абстрактного метода, не реализуя сам метод. Это сообщение может возникнуть и из-за отсутствия модификатора abstract в объявлении класса, где объявлен абстрактный метод. Убедитесь, что в Вашем классе реализованы все абстрактные методы, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public abstract void method1(); >

    public class Simple implements ITest <

    // ошибка: абстрактный метод, объявленный в ‘ITest’, не реализован >

    Cannot assign to this expression

    В левой части оператора присваивания обнаружено выражение. Обычно это сообщение свидетельствует о попытке присвоить значение выражению, которое не допускает присваивания. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    int x = 0; int у = 1;

    x++ = у; // ошибка: оператор ‘++’ в левой части оператора

    ‘this’ can only be used in non-static methods

    Ключевое слово this использовано в описании статического метода класса. Методам класса, в отличие от методов экземпляра класса (нестатических методов), неявная ссылка на экземпляр с помощью ключевого слова this не передается, и поэтому они не могут обращаться к нестатическим переменным или методам экземпляра класса. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public static void method1() <

    «this.x = 12; // ошибка: в статическом методе нельзя использовать

    Cannot convert ‘type’ to ‘type’

    Указанный в сообщении тип использован в несоответствующем контексте; в результате компилятор не смог придать смысл результату. Пре образуйте значение к типу, соответствующему объявлению метода или переменной класса, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    // ошибка: в качестве условия может выступать только логическое

    // выражение или логическая переменная класса

    Cannot implicitly convert ‘type’ to ‘type’

    Неявное преобразование типа указанной переменной невозможно; необходимо его явное преобразование. Обычно это сообщение свидетельствует о попытке присвоить числовое значение переменной нечислового типа. Воспользуйтесь явным преобразованием к нужному типу и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void methodi() <

    char с = i; // ошибка: правая часть должна иметь тип ‘char’

    char с = (char)i; // корректная форма оператора присваивания

    Cannot apply’.’ operator to an operand of type ‘identifier’

    Оператор-точка применен к несоответствующему типу. Обычно эта ошибка возникает при попытке вызова метода с переменной одного из встроенных типов в качестве аргумента. Убедитесь, что при вызове метода в качестве аргумента используется соответствующий объект, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    int j = i.length; // ошибка: ‘i’ не является массивом

    ‘identifier’ is not a member of class ‘identifier»

    Обнаружен вызов необъявленного метода. Обычно это сообщение свидетельствует об ошибке в имени метода, отсутствии метода в текущей области видимости или о том, что метод не существует. Убедитесь, что в указанном классе определены все вызываемые методы, и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public static void main(String args[]) <

    // ошибка: неверное имя метода (‘Printline’ вместо ‘println’) > >

    Operator cannot be applied to ‘identifier 1 and ‘identifier’ values

    Обнаружен оператор, который не может быть применен к указанному в сообщении идентификатору. Обычно это сообщение свидетельствует о попытке применения оператора, рассчитанного на числовые аргументы, к нечисловым переменным. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    String s1 = «one»; String s2 = «two»; String result;

    result = s1 * s2; // ошибка: недопустимые операнды > >

    В ситуации, синтаксически представляющей собой вызов метода, соответствующий идентификатор не является именем метода. Обычно это сообщение свидетельствует об ошибке в имени метода или о том, что имя метода содержит недопустимые символы. Эту ошибку иллюстрирует следующий пример:

    // ошибка: ‘1()’ не является допустимым именем метода >

    Too many arguments for method ‘identifier’

    Обнаружен вызов корректного метода с избыточным числом аргументов. Проверьте число аргументов вызова и удалите лишние аргументы. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1(int argl) <

    public void method2() <

    method1(1, 2); // ошибка: слишком много аргументов

    Not enough arguments for method ‘identifier 1

    Обнаружен вызов корректного метода с недостаточным числом аргументов. Обычно это сообщение связано с тем, что в вызове случайно пропущены аргументы.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1(int argl) <

    public void method2() <

    method1(); // ошибка: не хватает аргументов > >

    Class ‘Identifier’ doesn’t have a method that matches ‘identifier’

    Обнаружен вызов перегруженного метода другого класса, однако среди перегруженных вариантов не найден метод с соответствующим числом параметров. Проверьте число и типы параметров перегруженного метода и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1! () <

    public void method1(int argl) <

    public void method1() <

    Simple s = new Simple();

    s.method1(1, 2, 3); // ошибка: слишком много аргументов > >

    Ambiguity between ‘identifier’ and ‘identifier’

    В связи с неоднозначностью не удалось выбрать метод для выполнения. Обычно эта ошибка возникает в случае наличия двух методов со схожими параметрами, перегружающих один и тот же метод базового класса. Убедитесь, что параметры методов не приводят к конфликту. Дру гой способ избежать этой ошибки — изменить параметры двух вариантов перегрузки метода так, чтобы они отличались числом или типом. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    static void method1(Simple2 s2, SimpleS s3) <

    > static void method1(Simple3 s3, Simple2 s2) <

    public static void main(String args[]) <

    Simple2 s2 = new Simple2();

    // ошибка: выбор между Simple2 и Simple3 неоднозначен

    class Simple2 extends Simple3 <

    Value for argument ‘identifier’ cannot tie converted from ‘identifier’ in call to ‘identifier 1

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

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1(int argl) <

    public void method2() <

    method1(f); // ошибка: неверный тип аргумента

    В следующем примере показано, как избежать этой ошибки:

    public class Simple <

    public void method1(int arg1) <

    public void method2() <

    method1((int)f); // явное преобразование типа ‘float’ в ‘int’

    Value for argument ‘identifier’ cannot be converted from ‘identifier’ in call to ‘identifier’

    Тип одного из аргументов вызова метода класса, расположенного в другом файле класса, не может быть преобразован к типу, указанному в объявлении метода. Обычно это сообщение свидетельствует о вызове не того метода или о неверном порядке аргументов вызова. Проверьте число аргументов вызова, указанного сообщении, и их типы.

    Class ‘identifier’ doesn’t have a constructor that matches ‘identifier’

    Для вызова, указанного в сообщении, не найден соответствующий конструктор. Обычно это сообщение свидетельствует о неверном числе аргументов вызова конструктора. Убедитесь, что в объявлении класса присутствует необходимый конструктор, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public static void main (String args[]) <

    Simple s = new Simple(12, 13); // ошибка: слишком много аргументов

    ‘super()’ or ‘this()’ may only be called within a constructor

    Ключевое слово super() или this() использовано вне конструктора. Ключевое слово super() используют для вызова базового класса, a this() — для вызова одного конструктора из другого. Обращение к методам базового класса должнр включать ключевое слово super.. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void methodl () <

    super(); // ошибка; недопустимый вызов ‘super’

    Приведенный ниже пример иллюстрирует использование ключевого слова super, для вызова метода базового класса:

    public class methodl() < // .

    public class Simple <

    super.method1(); // корректный вызов метода базового класса

    Cannot return a value from a ‘void’ method

    Обнаружена попытка возврата значения из метода, тип возвращаемого значения которого объявлен как void.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void methodl() <

    return 1; // ошибка: возврат значения невозможен > >

    Expected return value of type ‘identifier’

    В теле метода, в объявлении которого указан тип возвращаемого значения, обнаружено ключевое слово return без аргумента. Оператор return без указания возвращаемого значения не возвращает значение по умолчанию, поэтому возвращаемое значение — обязательный аргумент оператора return.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public int method1() <

    return; // ошибка: необходимо возвратить значение типа int

    ‘[]’ cannot tie applied to a value of type ‘identifier’

    Обнаружено употребление квадратных скобок в переменной класса, не являющейся массивом. Если Вы хотите использовать эту переменную как массив, измените ее объявление и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    x = j[i]; // ошибка: переменная ‘j’ не объявлена как массив

    ‘goto’ statement is not currently supported by Java

    Допустимое ключевое слово goto пока не реализовано.

    The case ‘Identifier’ has already been defined in switch statement

    В двух условиях оператора case присутствует один и тот же идентификатор (или значение).

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public int method1(int argl) <

    return (int) 1; case 2:

    return (int) 2; case 2: // ошибка: повтор предыдущего условия

    return (int) 3; default:

    ‘default’ has already been defined In switch statement

    В операторе switch дважды присутствует ключевое слово default. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public int method1(int argl) <

    switch (argl) > case 1:

    return (int) 1; case 2:

    return (int) 2; default:

    return (int) 3; default: // ошибка: повтор предыдущего условия

    ‘case’ outside of switch statement Ключевое слово case использовано за пределами оператора switch.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public int method1() <

    case 1: // ошибка: нет оператора switch

    Constant expression expected

    Компилятор обнаружил переменную там, где ожидается константа. Обычно эта ошибка возникает при использовании переменной в одном из условий оператора case, где допустимы только константы. Проверьте выражение, убедитесь, что в нем использованы только постоянные значения, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple< int var1 = 10;

    public void method1()<

    // ошибка: использование переменной в операторе ‘case’ недопустимо

    ‘break’ only allowed In loops and switch statements

    Ключевое слово break обнаружено за пределами оператора цикла или оператора switch.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1()<

    // ошибка: ключевое слово break допустимо только в операторе цикла

    // или операторе ‘switch’

    Label ‘identifier’ not found

    He найдена метка, указанная в операторе continue или break. Обычно это сообщение свидетельствует о ссылке на несуществующую метку. Другая возможная, причина — нахождение метки за пределами области видимости оператора break или continue. Операторам break и continue доступны только метки, расположенные за пределами блока или цикла. Убедитесь, что метка доступна оператору break или continue, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public int method1() < int y;

    break test; // ошибка; метка ‘test’ не определена

    Ниже иллюстрируется корректное использование метки в операторе break:

    public class Simple <

    public int method1(int arg1) < int x,y = 0;

    test: // метка расположена до цикла if (argl = 0)

    ‘continue’ only allowed in loop

    Ключевое слово continue использовано за пределами цикла. Обычно это сообщение свидетельствует о том, что оператор continue случайно остался в тексте после удаления оператора цикла. Удалите операторы continue, находящиеся за пределами цикла, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1(int arg1)<

    if (argl ==1) continue;

    // ошибка: оператор ‘continue’ допустим только в цикле.

    // Удалите оператор ‘continue;’.

    Class value expected

    В операторе synchronized блока синхронизации обнаружена переменная неверного типа. Обычно это сообщение свидетельствует об использовании переменной несоответствующего типа в операторе synchronized.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    // ошибка: переменная ‘i’ должна быть ссылкой на объект

    ‘Instanceof’ operator expected class or array

    Оператор instanceof применен к переменной, тип которой отличен от класса или массива. Оператор instanceof позволяет выяснить, является ли идентификатор экземпляром данного класса или элементом массива. Убедитесь, что в качестве левого операнда оператора instanceof фи гурирует экземпляр класса или элемент массива, а в качестве правого операнда — корректное имя класса или массива, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void methpd1() <

    Simple2 obj = hew Simple2();

    if (obj instanceof int) // ошибка: ‘int’ не является именем класса

    Attempt to access non-existent member of ‘identifier’

    Компилятор обнаружил обращение к несуществующему элементу массива. Обычно это сообщение свидетельствует об использовании неверного типа в вызове метода length массива. Другая возможная причина — попытка вызова метода элемента массива объектов без указания конкретного элемента массива.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    String j[] = new String[10];

    // инициализация элементов массива

    String str = j,toUpperCase();

    // ошибка: отсутствуют скобки ‘[]’ > >

    Cannot throw ‘identifier’ — the type does not inherit from ‘Throwable’

    В качестве операнда оператора throw фигурирует объект, не являющийся производным класса Throwable. Убедитесь, что в качестве операнда использован класс исключений.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1(int arg1) < // . if (argl == 0)<

    throw new BogusException();

    // ошибка: BogusException не является классом исключений > > >

    The type ‘identifier’ does not inherit from ‘Throw/able’

    Аргумент оператора catch относится к недопустимому классу. Для обработки исключений с помощью оператора catch его параметром должен быть класс, производный от класса Throwable. Убедитесь, что класс, использованный в операторе catch, наследует классу Throwable, и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    // ошибка: ‘String’ не является производным

    // классом класса ‘Throwable’

    Далее показан пример корректной формы обработки исключений с помощью оператора catch:

    public class Simple <

    public void method1(int arg1)<

    throw new myException(); // создание исключительной

    // ситуации с помощью объекта

    // обработка исключения с помощью

    class myException extends Throwable <

    Handler for ‘identifier 1 hidden by earlier handler for ‘identifier’

    Обнаружен обработчик прерываний, который никогда не будет выполнен, так как соответствующее исключение перехватывается одним из предыдущих обработчиков. Обычно такая ошибка возникает из-за неверного порядка операторов catch. Эту ошибку иллюстрирует следующий пример:

    catch (Exception e)

    catch (ArithmeticException e)

    // ошибка: исключения, для обработки которых

    // предназначен данный блок, будут

    // перехвачены первым оператором ‘catch’

    Cannot override final method ‘identifier’

    В производном классе обнаружена попытка переопределения метода базового класса, объявленного с модификатором final. Методы, объ явленные как final, не подлежат переопределению в производных классах.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple extends Simple2 <

    public void method1() <

    // ошибка: в базовом классе ‘method1’ объявлен как ‘final’ > >

    public final void method1() <

    Unreachable statement or declaration

    Обнаружен оператор или объявление, который никогда не будет выполнен. Обычно эта ошибка возникает при наличии в теле метода кода после вызова оператора return. Другая возможная причина — наличие в цикле после оператора break кода, на который не передается управление.

    Эту ошибку иллюстрирует следующий пример:

    public int method1(int arg1)<

    for (int у = 10; у

    int z = у +10; // ошибка: из-за оператора ‘break’

    // эта строка никогда не будет выполнена >

    return arg1; int x = arg1 /2;

    /*ошибка: из-за оператора ‘return’ эта строка никогда не будет

    Method ‘identifier’ must return a value

    В теле метода, объявленного с указанием типа возвращаемого значения, отсутствует ключевое слово return. Обычно это сообщение свидетельствует об отсутствии оператора return в теле метода, который должен возвращать значение. Другая возможная причина ошибки — использование оператора return в управляющем операторе, где его выполнение не гарантировано из-за специфики логики метода. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public int, method1(int argl) <

    return argl + 2; > // ошибка: использование оператора ‘return’ в условном операторе

    // не гарантирует возврата значения во всех случаях

    Class ‘Identifier’ has a circular dependency

    Обнаружены два класса, явно или косвенно пытающиеся наследовать друг другу. Обычно это сообщение свидетельствует о попытке расширения каждым из классов другого. Один из классов в такой ситуации должен выступать в качестве базового. Эту ошибку иллюстрирует следующий пример:

    public class Simple extends Simple2 <

    // ошибка: циклическое наследование

    class Simple2 extends Simple <

    // расширение класса ‘Simple’

    Missing array dimension

    В объявлении массива отсутствует указание размерности. Обычно это сообщение свидетельствует об отсутствии одной из размерностей в объявлении массива. В объявлении массива должны быть перечислены все его размерности.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    int [][] i = new int[][12];

    // ошибка: не указана первая размерность массива

    Cannot ‘new’ an instance of type ‘Identifier’

    Обнаружена попытка инициализации типа, не требующего использования ключевого слова new при инициализации. Обычно это сообщение свидетельствует об использовании ключевого слова new при инициализации переменной встроенного типа, не являющейся массивом. Убедитесь, что при инициализации переменных класса, не являющихся объектами и массивами, не используется ключевое слово new. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    String myString = new StringO; // корректная инициализация объекта

    int x[] = new int[10]; // корректная инициализация массива

    int i = new int(5);

    // ошибка: использование ‘new’ для инициализации переменной

    // типа ‘int’ недопустимо

    Cannot ‘new’ an instance of abstract class ‘identifier’

    Обнаружена попытка создания экземпляра абстрактного класса оператором new. Экземпляр абстрактного класса создать нельзя — абстрактные классы служат только для создания на их основе производных классов. Эту ошибку иллюстрирует следующий пример:

    abstract class Simple2 <

    public class Simple <

    public void method1() <

    Simple2 s20bject = new Simple2();

    // ошибка: класс ‘Simple2’ объявлен как абстрактный

    Cannot ‘new’ an interface ‘identifier’

    Обнаружена попытка инициализации объекта абстрактного интерфейса. Интерфейс реализуется классом, поэтому на основе интерфейса нельзя создать объект, как на основе класса.

    Примечание Интерфейсы являются абстрактными по умолчанию, независимо от наличия в объявлении модификатора abstract.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    Simple2 s20bject = new Simple2(); // ошибка

    Invalid use of array initializer

    Обнаружена синтаксическая ошибка в операторе инициализации массива. Присвоение элементам массива первоначальных значений возможно при его объявлении. Обычно эта ошибка связана с неверным числом первоначальных значений при инициализации массива или с неверным расположением скобок и запятых. Исправьте синтаксис инициализации массива и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    // ошибка: массив ‘i’ объявлен как одномерный

    Ниже показана корректная форма синтаксиса инициализации массива:

    public class Simple <

    public void method1() <

    int[]i = (1,2,3,4,5,6>; // инициализация одномерного массива

    int [][]x = <<1,2,3>,<4,5,6>>; // инициализация многомерного массива

    Cannot assign final variable ‘identifier’

    Обнаружена попытка изменения значения переменной класса, объявленной как final. Переменной, объявленной с ключевым словом final. нельзя присвоить значение после ее инициализации (в объявлении, при создании объекта или в конструкторе). Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    private final int i = 3;

    public void method1(int argl) < i = argl;

    // ошибка: переменная ‘i’ объявлена как ‘final’

    Call to constructor must be first statement in constructor

    Обнаружен вызов конструктора в теле другого конструктора, причем этот вызов не является первым оператором тела конструктора. Вызовы других конструкторов должны находиться в первой строке кода тела конструктора. Убедитесь, что вызовы всех конструкторов расположены в первой строке кода тела конструктора, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    this(); // ошибка: вызов Simple() должен находиться

    // в начале тела конструктора

    Cannot reference ‘this’ in constructor call

    В теле конструктора обнаружено некорректное использование ключевого слова this. Обычно в конструкторе оператор this используется для доступа к методам и переменным класса конструктора. Использование конструкций this(this) или super(this) в конструкторе приведет к появлению данного сообщения об ошибке, поскольку к моменту вызова экземпляр ‘класса еще не создан и, следовательно, не может быть передан другому конструктору. Эту ошибку иллюстрирует следующий пример:

    public class Simple extends SuperSimple < int x;

    this(10); // корректный вызов другого конструктора

    // ошибка: конструктору базового класса нельзя передать ссылку ‘this’

    this.x = 1; // корректно

    > public Simple(int arg1) <

    this.x = argl; // корректно >

    public void method1()<> >

    Cannot call constructor recursively (directly or indirectly)

    Обнаружен рекурсивный вызов конструктора. Обычно эта ошибка возникает, когда конструктор вызывает сам себя. Другая возможная причина — вызов первым конструктором второго, который в свою очередь вызывает первый.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    Simple (int argl) <

    // ошибка: конструктор вызывает сам себя

    Variable ‘Identifier’ may be used before initialization

    Обнаружена попытка использования переменной до ее инициализации. Прежде чем использовать переменную в операторе присваивания или в выражении, необходимо присвоить ей значение. Добавьте код инициализации переменной и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // ошибка: переменная ‘i’ еще не инициализирована

    Cannot declare an interface or outer class to be ‘private’

    Спецификатор доступа private обнаружен вне тела класса или интерфейса. Спецификатор private допустим только в объявлении переменных и методов класса, и в объявлении вложенных классов. Эту ошибку иллюстрирует следующий пример:

    private class Simple <

    // ошибка: класс не может быть описан как ‘private’

    Divide or mod by zero

    Обнаружена попытка деления на ноль.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // ошибка: ‘х’ не может быть нулем

    Unable to recover from previous error(s)

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

    Exception ‘identifier 1 not caught or declared by ‘identifier’

    Обнаружено сгенерированное исключение, которое не перехватывается соответствующим классом. Обычно эта ошибка возникает при вызове методом другого метода, который генерирует исключение. Для вызова из метода другого метода, генерирующего исключение, необходимо либо объявить первый метод как генерирующий исключение, либо добавить в него код обработки исключений операторами try/catch. Эту ошибку иллюстрирует следующий пример:

    class SimpleException extends Exception <

    void method1() throws SimpleException

    // ошибка: метод method2 не обрабатывает исключения >

    Ниже показана корректная форма вызова метода, генерирующего исключение:

    /* Этот пример иллюстрирует обработку исключений посредством объявления метода как обрабатывающего исключение того же типа, что и генерируемое вызываемым методом.*/

    class SimpleExceptlon extends Exception <

    public class Simple <

    void methodK) throws SimpleException<

    void method2() throws SimpleException <

    method1(); // метод, вызывающий method2, теперь будет

    /* Пример обработки исключений операторами try/catch */

    class SimpleException extends Exception <

    public class Simple <

    void method1() throws SimpleException <

    // код обработки исключений > > >

    Multiple inheritance of classes Is not supported

    Обнаружен класс, пытающийся расширить несколько базовых классов. Java не поддерживает этот механизм, известный в других языках (например, в C+ + ) как множественное наследование. Эту ошибку иллюстрирует следующий пример:

    public class Simple extends BaseClass1, BaseClass2 <

    // ошибка: Java не поддерживает множественное наследование >

    Operator cannot be applied to ‘identifier’ values

    Обнаружено применение оператора к переменной или объекту несоответствующего типа. Проверьте допустимость применения указанного оператора к объекту или переменной данного типа и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    void method1 (boolean b) <

    /* ошибка: оператор ++ нельзя применять к логической переменной */

    ‘finally’ block used without ‘try’ statement

    Обнаружен блок finally без соответствующего оператора try. Блок finally предназначен для выполнения кода после выполнения оператора try независимо от результата выполнения последнего. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // ошибка: отсутствует оператор ‘try’ > > >

    Ниже показана корректная форма использования блока finally:

    public class Simple <

    public int method1(int arg1) < try<

    arg1/10; > catch(Exception e) <

    // код обработки исключений должен располагаться до блока ‘finally’ > finally <

    // . ; эта часть не зависит от результата выполнения оператора ‘try’

    ‘catch’ block used without ‘try’ statement

    Обнаружен оператор catch без соответствующего оператора try. Оператору catch должен предшествовать оператор try. Убедитесь, что оператору catch предшествует оператор try, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    // ошибка: отсутствует оператор ‘fry’

    Ниже показана корректная форма блока catch:

    public class Simple <

    public void method1() < try<

    // . > catch (Exception e) <

    // обработка исключений, сгенерированных в операторе ‘try’

    ‘else’ keyword used without ‘if statement

    Обнаружено ключевое слово else без соответствующед-о оператора if.

    Обычно эта ошибка вызвана проблемами с областью видимости из-за некорректного размещения оператора else. Другая возможная причина этой ошибки — отсутствие оператора if.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1(int argl) <

    // ошибка: оператор ‘else’ находится не снаружи, а внутри

    Cannot declare an interface to be ‘final’

    Обнаружен интерфейс, объявленный с модификатором final. Интерфейс не может быть объявлен как окончательный. Удалите ключевое слово final из объявления интерфейса и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    final interface Simple <

    /* ошибка: ключевое слово ‘final’

    допустимо только для классов, методов и переменных */

    Cannot declare a class to be ‘identifier 1 and ‘identifier’

    Обнаружено объявление класса с несовместимыми модификаторами. Убедитесь, что модификаторы, использованные в объявлении класса, не конфликтуют между собой и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public abstract final class Simple <

    /* ошибка: ключевые слова ‘abstract’ и ‘final’ не могут одновременно присутствовать в объявлении класса */

    Cannot declare an interface method to be ‘native’, ‘static’, ‘synchronized’ or ‘final’

    В объявлении метода интерфейса обнаружено одно из перечисленных в сообщении ключевых слов. Поскольку методы интерфейса не реализуются в его теле, к ним не применимы ключевые слова native, static, synchronized или final.

    Эту ошибку иллюстрирует следующий пример:

    public final void method1();

    /* ошибка: в интерфейсе ‘method1’ нельзя объявить как ‘final’ */ >

    Cannot declare a method to tie ‘identifier’ and ‘identifier’

    Обнаружено объявление метода с двумя или более несовместимыми модификаторами. Обычно это сообщение свидетельствует об одновременном использовании нескольких спецификаторов доступа (например, public и private). Убедитесь, что ключевые слова в объявлении метода не конфликтуют между собой, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public private void method1() <

    // ошибка: в объявлении нельзя рдновременно

    // использовать ключевые слова ‘public’ и ‘private’

    Cannot declare a field to be ‘identifier’ and ‘identifier’

    Обнаружено объявление переменной с двумя или более несовместимыми модификаторами. Обычно эта ошибка возникает при одновременном использовании нескольких спецификаторов доступа (например, public и private). Убедитесь, что ключевые слова в объявлении переменной не конфликтуют между собой, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    Dublic class Simple <

    public private int i;

    // ошибка: в объявлении нельзя одновременно

    // использовать ключевые слова ‘public’ и ‘private’

    Constructors cannot be declared ‘native’, ‘abstract’, ‘static’, ‘synchronized’, or ‘final’

    В объявлении конструктора обнаружено одно из перечисленных в сообщении ключевых слов. Убедитесь, что в объявлении конструктора отсутствуют ключевые слова native, abstract, static, synchronized или final, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // ошибка: в объявлении конструктора не может присутствовать

    Interfaces cannot have constructors

    Обнаружен интерфейс, содержащий объявление конструктора. Поскольку интерфейс не предназначен для создания объектов, он не может содержать конструктор. Если Вы создали метод, имя которого совпадает с именем интерфейса, снабдите его дополнительными модификаторами так, чтобы оно отличалось от имени конструктора. Эту ошибку иллюстрирует следующий пример:

    // ошибка: объявление конструктора

    // в интерфейсе не разрешено

    Interface data members cannot be declared ‘transient’, ‘volatile’, ‘private’, or ‘protected’

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

    Эту ошибку иллюстрирует следующий пример:

    volatile int i = 1;

    // ошибка: недопустимое ключевое слово ‘volatile’

    Public class ‘Identifier’ should not be defined in ‘identifier’

    В исходном файле обнаружено несколько классов, объявленных со спецификатором доступа public. Удалите спецификатор доступа public из объявления всех классов кроме предоставляемого внешним программам (он должен быть объявлен открытым). Помимо этого, классы, которые нужно объявить со спецификатором доступа public, можно перенести в отдельные файлы. Такая ошибка иногда возникает из-за несовпадения имен (или регистра имен) файла и определяемого в нем общедоступного класса. Переименуйте исходный файл или определяемый в нем общедоступный класс так, чтобы их имена совпадали, и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // тело класса > public class Errorclass <

    // ошибка: в файле может быть только // один класс, объявленный как ‘public’

    Interface cannot have static or instance initializer

    В интерфейсе обнаружен статический инициализатор или инициализатор объекта. Поскольку интерфейс не предназначен для создания объектов, он не может содержать инициализаторы. Чтобы присвоить значения переменным интерфейса, инициализируйте их при объявлении. Эту ошибку иллюстрирует следующий пример:

    int x = 10; // корректная инициализация

    // в интерфейсе недопустима

    Обнаружена недопустимая метка. Метка должна начинаться с нечислового символа. Исправьте метку и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public int method1(int argl) < 123:

    // ошибка: метка не может начинаться с числа return argl * 2;

    Cannot override static method ‘identifier’ with non-static method ‘identifier’

    В производном классе обнаружена попытка переопределения статического метода базового класса. Статический метод нельзя переопределять в производном классе. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    static void method1() <> >

    class SimpleSubclass extends Simple <

    // ошибка: переопределение статических методов запрещено

    Argument cannot have type ‘void’

    В объявлении метода обнаружен параметр типа void. Тип void допустим только для описания типа возвращаемого значения: он указывает, что метод не возвращает значения. Измените тип параметра и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1(void i) <

    // ошибка: тип ‘void’ может использоваться только

    // в объявлении типа возвращаемого значения

    Cannot make static call to abstract method ‘Identifier’

    Обнаружена попытка явного вызова абстрактного метода. Последний представляет собой только определение метода, конкретная реализация которого выполняется в производном классе. Из-за отсутствия реализации в абстрактном методе его явный вызов с помощью ключевого слова super недопустим.

    Эту ошибку иллюстрирует следующий пример:

    public abstract class Simple <

    abstract int method1(); >

    class SimpleSubclass extends Simple < int method1() <

    // ошибка: вызов абстрактного метода запрещен

    Cannot throw exception ‘identifier’ from static initializer

    Обнаружена попытка генерации исключения в статическом инициализаторе. Обычно эта ошибка возникает при использовании оператора throw или инициализации экземпляра статического класса в статическом инициализаторе. Для перехвата исключения, сгенерированного при инициализации экземпляра статического класса в статическом инициализаторе, следует использовать операторы try/catch. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    ThrowCLass TClass = new ThrowClass();

    // ошибка: генерация исключений

    // в статическом инициализаторе недопустима > >

    ThrowClassO throws Exception<>

    Ниже показана корректная форма использования операторов try/catch для перехвата возможных ошибок при инициализации экземпляра статического класса в статическом инициализаторе:

    public class Simple <

    static ThrowClass thr; static < try<

    ThrowClass thr = new ThrowClass();

    > catch (Exception e) <

    // обработка исключений, возникших при инициализации

    ThrowClass() throws Exception()<

    Cannot find definition for interface ‘identifier 1

    He обнаружено определение указанного интерфейса. Обычно эта ошибка возникает при наличии ошибки в имени интерфейса при его реализации. Проверьте наличие и правильность имени реализации интерфейса и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple implements Bogus <

    // ошибка: интерфейс ‘Bogus’ не существует

    Output directory or file too long: ‘identifier’

    Длина имени исходного файла или каталога, где он должен быть сохранен, превышает 288 символов. Сократите имя исходного файла или каталога и повторите компиляцию.

    Cannot create output directory ‘identifier»

    He удалось создать каталог назначения. Обычно эта ошибка возникает при отсутствии права на запись на указанном устройстве.

    Cannot access private member ‘Identifier’ in class Identifier’ from class ‘identifier’

    Обнаружена попытка обращения к закрытой переменной другого класса. Закрытые переменные класса доступны только внутри него. Кроме того, закрытые переменные класса доступны его вложенным классам. Эту ошибку иллюстрирует следующий пример:

    private int i = 0; >

    public class Simple <

    public void methodi() <

    AccessClass ac = new AccessClass();

    // ошибка: переменная ‘i’ недоступна > >

    Cannot reference instance method ‘identifier’ before superclass constructor has been called 1

    Обнаружена попытка вызова метода экземпляра класса до вызова конструктора надкласса. Обычно эта ошибка возникает при вызове метода надкласса из подкласса при помощи оператора super(). Кроме того, она возможна и при вызове подклассом собственных методов из конструктора с помощью оператора this(). Причина ошибки в том, что к моменту вызова конструктора еще не созданы экземпляры ни надкласса, ни подкласса. Чтобы избежать подобной ситуации, пользуйтесь оператором super, для вызова методов надкласса и оператором this, для вызова методов подкласса.

    Эту ошибку иллюстрирует следующий пример:

    abstract class Simple <

    Simple(int i) <> int method1() <

    class SimpleSubclass extends Simple

    // ошибка: сначала нужно вызвать конструктор > >

    Ниже показана корректная форма вызова метода абстрактного надкласса предыдущего примера из конструктора:

    class SimpleSubclass extends Simple <

    Cannot have repeated interface ‘identifier’

    В объявлении класса обнаружено повторяющееся имя интерфейса. Обычно эта ошибка возникает в классах, реализующих большое число интерфейсов, так что имя одного из интерфейсов упоминается в списке implements несколько раз. Удалите повторяющееся имя интерфейса и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    class Simple implements Simplel,IColor,IFont, Simplel <

    // ошибка: имя интерфейса ‘Simplel’ дважды присутствует в списке

    Variable ‘identifier’ is already defined in this method

    Обнаружены две переменные, объявленные с одним и тем же именем в одной и той же области видимости внутри метода. Убедитесь, что одна и та же переменная не объявлена дважды в пределах одной области видимости и что имя ни одной переменной не совпадает с именами параметров метода, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    // ошибка: переменная ‘i’ объявлена

    // дважды в одной и той же области видимости

    Ambiguous reference to ‘Identifier’ in interfaces ‘Identifier’ and ‘identifier»

    Обнаружено неоднозначное обращение к идентификатору. Вероятно, идентификатор объявлен в нескольких интерфейсах, и в этом случае компилятор не может решить, каким из экземпляров следует пользоваться. Убедитесь, что у Вас нет двух интерфейсов с одинаковыми переменными. Эту о»ушбку иллюстрирует следующий пример:

    public class Simple implements Interface1, Interface2 <

    // ошибка: неясно, какой экземпляр ‘i’ следует

    Class ‘identifier’ already defined

    Обнаружено два класса с одинаковыми именами. Проверьте, нет ли в исходном файле или пакете двух объявлений одного и того же класса в качестве внешнего. Это сообщение может возникнуть и при совпадении имен импортируемого класса и класса в исходном файле. Переименуйте один из классов или удалите дубликат и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // ошибка: класс ‘Simple’ уже объявлен >

    ‘ @’ must be followed by the response filename

    В командной строке JVC обнаружен символ @, за которым не следует имя файла отклика. Укажите имя файла отклика и повторите компиляцию.

    Response file ‘identifier’ could not be opened

    He удалось открыть указанный файл отклика. Обычно эта ошибка возникает, если имя файла указано с ошибкой или файл не существует. Проверьте наличие файла и правильность имени и повторите компиляцию.

    Cannot open source file: ‘identifier’

    He удалось открыть указанный в сообщении исходный файл. Обычно это сообщение свидетельствует о том, что имя файла указано с ошибкой или файл не существует. Проверьте наличие файла и правильность имени и повторите компиляцию.

    Failed to initialize compiler

    Инициализация компилятора завершилась неудачно. Обычно эта ошибка связана с некорректной установкой или использованием несоответствующей версии компилятора и/или виртуальной Java-машины (Microsoft Virtual Machine for Java, VM). Проверьте правильность версий и корректность установки компилятора и VM.

    Array ‘identifier’ missing array index

    Обнаружено обращение к элементу массива без указания значения индекса. Для доступа к элементу массива необходимо указать допустимый целый индекс. Проверьте наличие корректного индекса элемента массива и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // ошибка: отсутствует значение индекса массива ‘j’

    Ambiguous import of class ‘identifier» from more than one package

    Обнаружено несколько операторов импорта, пытающихся импортировать классы с одинаковым именем из разных пакетов. Обычно эта ошибка возникает при наличии одноименных классов в разных пакетах, импортируемых в исходный файл. Проверьте импортируемые пакеты на предмет дублирования имен классов. Удалите дубликат класса из одного из пакетов или оператор импорта из исходного файла. Эту ошибку иллюстрирует следующий пример:

    import Box.Test; // Этот пакет содержит класс ‘Test’

    // И этот пакет содержит класс ‘Test’

    // ошибка: компилятор не знает, какой класс ‘Test’

    public class Simple <

    Cannot throw exception ‘identifier’ from method ‘identifier’ — it is not a subclass of any exceptions thrown from overridden method ‘identifier 1

    Обнаружен переопределенный метод, пытающий сгенерировать больше исключений, чем исходный метод. В языке Java переопределенный метод не может генерировать больше исключений, чем исходный. Приведите списки исключений базового и производного класса в соответствие, добавив исключения в базовый класс или удалив их из производного.

    Эту ошибку иллюстрирует следующий пример:

    class ExceptionA extends Exception <

    class Exceptions extends Exception <

    public void method1() throws ExceptionA <

    public class Simple extends AnotherClass <

    public void method1() throws ExceptionA, Exceptions <

    // ошибка: этот метод не может генерировать

    // больше одного исключения >

    Cannot access member ‘identifier’ in class ‘identifier’ from ‘identifier’ — it is in a different package

    Обнаружено некорректное обращение к переменной или методу, определенному в другом пакете. Обычно эта ошибка возникает в случае попытки обращения к элементу другого пакета, объявленному со спецификатором доступа protected или без указания типа доступа. Защищенные элементы класса и элементы, тип доступа к которым не указан, недоступны за пределами пакета. Убедитесь, что элемент другого пакета, к которому Вы обращаетесь, не объявлен со спецификатором доступа protected или без указания типа доступа.

    Cannot override non-static method ‘identifier’ with static method ‘identifier’

    Обнаружена попытка переопределения метода базрвого класса методом производного класса, объявленным с модификатором static. При переопределении метода базового класса в производном классе нельзя ни изменять тип доступа, ни применять модификатор static. Удалите модификатор static из объявления метода в производном классе и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    class Simple2 extends Simple <

    static public void methodi() <

    // ошибка: переопределение метода ‘method1’

    // с помощью статического метода недопустимо

    The declaration of an abstract method must appear within an abstract class

    В объявлении неабстрактного класса обнаружено объявление абстрактного метода. Обычно это сообщение свидетельствует об отсутствии модификатора abstract в объявлении класса, задуманного как абстрактный. Измените объявление класса, снабдив его модификатором abstract, или-удалите этот модификатор из объявления методов класса. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    abstract void method1();

    // ошибка:, объявление абстрактных методов допустимо только в

    Cannot access ‘identifier’ — only public classes and Interfaces in other packages can be accessed

    Обнаружена попытка обращения к недоступному классу или интерфейсу другого пакета. Извне доступны только классы и интерфейсы, объявленные в пакете со спецификатором public. Проверьте доступность используемого класса или интерфейса другого пакета и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    // Исходный код находится в файле ‘Boxes.Java’ пакета ‘Box’ package Box;

    public class Box <

    TapeRoll tr = new TapeRoll();

    // Исходный код находится в файле ‘Simple.Java’

    public class Simple <

    public static void main(String args[])<

    Box.TapeRoll tr = new Box.TapeRoll();

    // ошибка: доступ к не общедоступному классу другого пакета

    Cannot load predefined class ‘Identifier’

    При попытке загрузить один из стандартных классов не удалось найти соответствующий файл. Обычно эта ошибка вызвана отсутствием в системе файлов классов API Java или соответствующей версии виртуальной Java-машины (Microsoft Virtual Machine for Java, VM). Проверьте наличие файлов классов и соответствующей версии VM и повторите компиляцию.

    Found class ‘identifier’ in package ‘identifier’ rather than package ‘identifier’

    Компилятор обнаружил указанный класс вне соответствующего пакета. Обычно эта ошибка возникает при импорте файла класса из неверного каталога. Убедитесь, что импортируемый класс находится в каталоге пакета, и повторите компиляцию.

    Cannot invoke method on ‘null’ literal

    Обнаружена попытка обращения к методу ключевого слова null. Null не является объектом какого-либо класса и, как следствие, не содержит каких бы то ни было методов. Удалите оператор обращением к методу ключевого слова null и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public String methdo1() <

    // ошибка: ‘null’ не имеет методов

    Duplicate label ‘Identifier’ nested inside another label with same name

    В помеченном блоке обнаружена метка с тем же именем. Переименуйте метку, измените все использующие ее операторы break и continue и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    outsideLoop: // ошибка: повторяющаяся метка

    ‘return’ not allowed in a static initializer or instance initializer

    В статическом инициализаторе или инициализаторе экземпляра обнаружен оператор return. Инициализаторы, как и конструкторы, не возвращают значений. Удалите оператор return и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    static int varl;

    // ошибка: оператор ‘return’ в статическом инициализаторе

    В операторе присваивания или выражении обнаружено имя встроенного типа без расширения .class. Обычно эта ошибка возникает при отсутствии ключевого слова .class. Добавьте расширение .class после названия встроенного типа и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public static void main (String args[]) <

    // ошибка: отсутствует расширение ‘.class’

    ‘.c/ass’ on intrinsic type requires Java 1.1 compatible class libraries

    Обнаружено имя встроенного типа с расширением .class, однако либо виртуальная Java-машина (Microsoft Virtual Machine for Java, VM), либо библиотека классов Java соответствуют спецификации Java 1.0. Убедитесь, что VM и библиотека классов Java соответствуют спецификации Java 1.1, и повторите компиляцию.

    Cannot have an array of type ‘void’

    Обнаружена попытка объявления массива типа void. Тип void не может служить типом данных массива: он допустим только в методах, где указывает, что метод не возвращает значения.

    public class Simple <

    void МуАrrау<>; // ошибка: массивы типа ‘void’ не поддерживаются

    Class or interface cannot be declared ‘volatile’, ‘native’, transient’, or ‘synchronized’

    Обнаружен вложенный класс или интерфейс, объявленный с одним из перечисленных в сообщении ключевых слов. Обычно эта ошибка возникает при применении спецификатора, предназначенного для методов и переменных класса, к вложенному классу или интерфейсу. В объявлении вложенных классов и интерфейсов допустимы спецификаторы доступа private, public и protected, а в объявлениях вложенных классов, кроме того, такие ключевые слова, как abstract, static и final.

    Эту ошибку иллюстрирует следующий пример:

    /*ошибка: класс (вложенный или охватывающий) нельзя объявить

    Cannot declare ‘identifier’ as ‘static’ in Inner class ‘identifier’

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

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    static int var1; /* ошибка: во вложенном классе

    статические элементы недопустимы */

    Ниже показана корректная форма объявления вложенного класса со статическими элементами:

    public class Simple <

    /* Поскольку вложенный класс ‘InnerClass’ объявлен с модификатором static, он рассматривается как внешний класс, хотя и вложенный в класс ‘Simple’ */ static class InnerClass <

    static int var1 = 100; // допустимо, если вложенный класс объявлен

    Nested class ‘identifier’ cannot have the same name as any of its enclosing classes

    Имя указанного вложенного класса совпадает с именем одного из охватывающих его классов. Убедитесь, что имя вложенного класса не дублирует имен объемлющих классов, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // ошибка: имя вложенного класса совпадает с именем

    Cannot declare interface in inner class ‘identifier’

    Во вложенном классе обнаружена попытка объявления интерфейса. Объявление интерфейсов во вложенных классах не поддерживается. Удалите все объявления интерфейсов из вложенного класса и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    /* ошибка: объявление интерфейса во вложенном классе

    An enclosing instance of type ‘identifier’ is required

    В объявлении вложенного класса обнаружено обращение за пределы его области видимости. Эта ошибка может возникнуть, например, в следующих случаях.

    • Вложенный класс, объявленный как статический, обращается к нестатической переменной или нестатическому методу объемлющего класса. Поскольку вложенный класс объявлен как статический, он не может обращаться к нестатическим элементами объемлющего класса до создания его экземпляра.
    • Во вложенном классе присутствует обращение по имени класса и ссылке this к элементу класса, не являющегося его объемлющим классом. Поскольку класс, к элементу которого обращается вложенный класс, не является его объемлющим классом, пользоваться ссылкой на экземпляр класса нельзя.

    Эту ошибку иллюстрирует следующий пример:

    // Этот пример иллюстрирует первую из перечисленных выше возможных причин

    public class Simple < int x = 10;

    /* ошибка: для обращения к переменной объемлющего класса необходима ссылка на его экземпляр. */

    // Этот пример иллюстрирует вторую из перечисленных выше возможных причин

    /*ошибка: экземпляр А не существует. Синтаксис

    в этой ситуации недопустим.*/

    Call of ‘thls()’ cannot be qualified

    В конструкторе вложенного класса обнаружена попытка вызова конструктора внешнего класса с использованием имени внешнего класса и метода this(). Вложенный класс не может вызывать конструктор внешнего класса. Удалите вызов конструктора внешнего класса из конструктора вложенного и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple < int x;

    // ошибка: вызов конструктора внешнего класса не разрешен

    ‘this’ must be qualified with a class name

    Во вложенном классе обнаружено обращение к элементу внешнего класса с помощью ключевого слова this и имени, не совпадающего с именем внешнего класса. Доступ к элементам внешнего класса из вложенного класса возможен только по имени внешнего. Эту ошибку иллюстрирует следующий пример:

    public class Slmple < int x;

    /* ошибка: доступ к элементу объемлющего класса с помощью ‘this’

    возможен только по имени объемлюще-то класса */

    Следующий пример иллюстрирует корректную форму обращения к элементам внешнего класса:

    int j = Simple.this.x;

    int z = Simple.this.method2(10); > > >

    ‘super’ cannot be qualified except as a superclass constructor call

    Обнаружена попытка использования ключевого слова super с именем экземпляра надкдасса для доступа к его переменной или методу. Использование имени экземпляра надкласса с ключевым словом super допустимо только для обращения к конструктору надкласса при наличии в нем вложенных классов. Эту ошибку иллюстрирует следующий пример:

    class NotSimple extends Simple< NotSimple(Simple smp)

    /*ошибка: обращение к элементу надкласса о имени экземпляра недопустимо */

    super.x = 100; // корректная форма обращения

    ‘super()’ cannot he qualified; superclass ‘identifier’ is not an inner class

    Обнаружено обращение к конструктору надкласса с помощью его экземпляра, однако надкласс не является вложенным. Использование имени экземпляра надкласса с ключевым словом super допустимо для обращения к конструктору класса только в случае вложенного надкласса. Эту ошибку иллюстрирует следующий пример:

    class NotSimple extends Simple <

    /*ошибка: использование ‘super’ с именем экземпляра надкласса, не являющегося вложенным, недопустимо */ > >

    Ниже показана корректная форма использования имени экземпляра надкласса с ключевым словом super:

    public class NotSimple extends Simple.InnerClass< NotSimple(Simple smp)

    Cannot access protected member ‘identifier’ in class ‘identifier» from class ‘identifier 1

    Обнаружено обращение к защищенному элементу класса другого пакета. За пределами пакета, где объявлен класс,-защищенные элементы класса доступны только коду, реализующему его. Удалите обращение к защищенному элементу класса другого пакета или сделайте свой класс производным от него и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    /* (исходный текст находится в файле PublicClass. Java, ‘,,

    расположенном в каталоге пакета Boxes) */ package Boxes;

    //(исходный текст находится в файле Simple.Java) import Boxes.PublicClass;

    public class Simple extends PublicClass < public void method1()<

    PublicClass pub = new PublicClass();

    /*ошибка: доступ к защищенному методу ‘method1’

    невозможен — он находится в другом пакете.*/ > >

    Cannot access protected member ‘identifier’ in class ‘identifier 1 via a qualifier of type ‘identifier’

    Класс, входящий в состав некоего пакета и являющийся производным класса из другого пакета, обращается к защищенному элементу базового класса с помощью его экземпляра. Обычно это сообщение свидетельствует о попытке обращения к защищенному элементу базового класса с помощью экземпляра, отличного от this, super и экземпляра производного класса. Убедитесь, что для обращения к защищенному элементу базового класса используются ключевые слова this или super или экземпляр производного класса, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    /*(исходный текст находится в файле Point.Java, расположенном в каталоге пакета Boxes) */ package Boxes;

    public class Point <

    protected int x, y;

    // (исходный текст находится в файле simple.Java) import Boxes.Point;

    super.x = 0; // корректное обращение

    p.x = 0; /* ошибка: защищенный элемент можно только расширять */ > >

    Cannot use non-final local variable ‘identifier’ from a different method

    В теле метода обнаружено обращение к локальной переменной, объявленной с модификатором final. Эта ошибка может возникнуть, если вложенный класс, определенный в локальном блоке или методе, пытается

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

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    /*ошибка: доступ к локальной переменной метода из вложенного класса невозможен */

    Cannot assign a second value to blank final variable ‘identifier’

    Обнаружено повторное присваивание значения переменной, объявленной с модификатором final. Обычно эта ошибка возникает при дублировании инициализации переменной, объявленной с модификатором final, в конструкторе или инициализаторе. Удалите дубликат инициализации переменной, упомянутой в сообщении, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    // инициализация остальных переменных

    varl = 20; // ошибка: повторное присваивание

    Cannot assign blank final variable ‘identifier’ in a loop

    В теле цикла обнаружена попытка присваивания значения переменной, объявленной с модификатором final. Таким переменным можно присвоить значение лишь однажды, и поэтому их инициализация в цикле недопустима. Перенесите оператор инициализации упомянутой в сообщении переменной, объявленной с модификатором final, за пределы цикла и убедитесь, что она инициализируется только однажды.

    Эту ошибку иллюстрирует следующий пример:

    x = z; /* ошибка: переменной, объявленной как ‘final’,

    нельзя присваивать значение в цикле */

    Constructor or instance initializer must assign a value to blank final variable ‘identifier’

    Обнаружена переменная, объявленная с модификатором final, которой не присвоено значение ни в инициализаторе, ни в конструкторе. Корректное объявление переменной с модификатором final должно включать присваивание значения. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    final int x; /* ошибка: переменной, объявленной с модификатором ‘final’, необходимо присвоить значение. */

    final int z = 10; // корректная форма >

    В атрибуте тэга комментария (например, @com, @security или @dll) отсутствует символ « = ». Обычно это сообщение свидетельствует о том, что символ « = » случайно пропущен. Кроме того, возможно какой-либо другой символ скрывает от компилятора символ « = ». Убедитесь, что атрибуты тэгов комментария снабжены необходимыми символами « = » и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    // ошибка: в параметре ‘iid’ отсутствует знак ‘=’ interface Itest <

    В атрибуте тэга комментария (например, @com, ©security или @dll) отсутствует точка. Обычно эта ошибка возникает из-за того, что точка случайно пропущена. Кроме того, возможно какой-либо другой символ скрывает точку от компилятора. Убедитесь, что атрибуты тэгов комментария снабжены необходимыми точками и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    // ошибка: в операторе @соm отсутствует ‘,’

    public class Simple <

    Invalid GUID specified

    Обнаружен атрибут @com с недопустимым значением глобально-уникального идентификатора (GUID). Обычно эта ошибка связана с неверным синтаксисом GUID. Проверьте синтаксис GUID и повторите компиляцию.

    Syntax error in ©com declaration

    В указанном в сообщении объявлении @соm обнаружена синтаксическая ошибка. Обычно это сообщение Свидетельствует о неверном вводе оператора. Проверьте синтаксис объявления @сот и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    // ошибка: в слове ‘interface’ — грамматическая ошибка, interface ITest <

    @com attribute ‘identifier’ on ‘identifier’ is illegal in this context

    Одному из атрибутов объявления @com присвоено недопустимое значение. Обычно эта ошибка возникает при использовании атрибута, нуждающегося в других атрибутах. Другая возможная причина — неверное местонахождение атрибута внутри объявления @соm.

    @com attribute ‘identifier 1 was not specified for ‘identifier» but is required in this context

    В указанном в сообщении объявлении @com отсутствует один из обязательных атрибутов. У каждого из объявлений @соm есть обязательные атрибуты. Проверьте, какие атрибуты необходимы объявлению @сот, указанйому в сообщении. Эту ошибку иллюстрирует следующий пример:

    // ошибка: необходимо указать идентификатор класса (classid) doom.class

    public class Simple <

    @com attribute ‘Identifier’ on ‘identifier» has an invalid value

    Значение, указанное в сообщении, либо имеет тип, недопустимый для указанного атрибута, либо выходит за пределы допустимых значений этого атрибута. Проверьте значение, присвоенное указанному атрибуту, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    /** @com.parameters([type=CUSTOM, customMarshal=»foo.bar», customMarshalFlags = 5] i) */

    // ошибка: значение customMarshalFlags не может превышать 3

    native void method1(Object i); >

    An @corn attribute cannot be placed on member ‘Identifier» unless the containing class or interface also has an @com attribute

    Обнаружено объявление @com элемента класса или интерфейса, не объявленного как @соm. Убедитесь, что класс или интерфейс, упомянутый в сообщении, включает корректное объявление @соm, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public void method1();

    /*ошибка: в объявлении интерфейса

    отсутствует тэг @сот

    An @com attribute cannot be placed on static member ‘identifier’

    Обнаружено объявление @соm для статического элемента класса. Доступ к статическим элементам средствами СОМ невозможен. Удалите ключевое слово static из объявления переменной или метода класса и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    static void method1()<>

    // ошибка: доступ к статическим объектам средствами СОМ невозможен >

    Обнаружено объявление @соm элемента класса или метода, которое недопустимо вследствие типа атрибута @соm. Эта ошибка может возникать в следующих ситуациях:

    • при использовании объявления @com.structmap для элемента класса или интерфейса, объявленного как @com.class или @сот.interface;
    • при использовании объявления @соm.method для элемента класса, объявленного как @com.struct.

    Эту ошибку иллюстрирует следующий пример:

    /**@com.struct()*/ class Simple <

    public native void method1();

    /*ошибка; объявление @com.method недопустимо

    внутри объявления @com.struct*/ >

    @com attribute cannot be placed on method ‘identifier’- it must be declared ‘native’
    or be in an interface

    Обнаружен метод с атрибутами @com.method или @com.parameters, объявленный без модификатора native или объявленный в интерфейсе.

    /* ошибка: в объявлении интерфейса

    отсутствует тэг @сom */ >

    An @com attribute cannot be placed on static member ‘identifier 1

    Обнаружено объявление @соm для статического элемента класса. Доступ к статическим элементам средствами СОМ невозможен. Удалите ключевое слово static из объявления переменной или метода класса и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    static void method1()<>

    // ошибка: доступ к статическим объектам средствами СОН невозможен >

    Обнаружено объявление @соm элемента класса или метода, которое недопустимо вследствие типа атрибута @соm. Эта ошибка может возникать в следующих ситуациях:

    • при использовании объявления @com.structmap для элемента класса или интерфейса, объявленного как @com.class или @соm, interface;
    • при использовании объявления @соm.method для элемента класса, объявленного как @com.struct.

    Эту ошибку иллюстрирует следующий пример:

    /**@com,struct()*/ class Simple <

    public native void method1();

    /*ошибка; объявление com.method недопустимо

    внутри объявления @com.struct*/ >

    @com attribute cannot be placed on method ‘identifier’- it must be declared ‘native’ or be In an interlace

    Обнаружен метод с атрибутами @com.method или @com.parameters, объявленный без модификатора native или объявленный в интерфейсе.

    Чтобы обеспечить доступ к методу средствами интерфейса СОМ, метод надо объявить в интерфейсе или с модификатором native. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1()<>

    /*ошибка: метод должен быть объявлен в интерфейсе

    или с модификатором ‘native’ */ >

    The @comfarameters declaration on member ‘identifier’ has the wrong number of parameters

    Приведенный в сообщении атрибут @com.parameters имеет меньше параметров, чем соответствующий метод. Убедитесь, что число параметров метода и атрибута @com.parameters совпадает, и повторите компиляцию..

    Эту ошибку иллюстрирует следующий пример:

    @com.parameters([type=BOOLEAN] varl, var2, var3)

    public void method1(boolean varl, int var2);

    /*ошибка: лишний параметр в объявлении ©com.parameters*/ >

    ‘return’ must be the last Item In an @com.parameters declaration

    Возвращаемый параметр должен быть последним в списке параметров объявления @com.parameters метода. Компилятор обнаружил, что в списке параметров объявления @com.parameters метода возвращаемый параметр не является последним. Проверьте местонахождение возвращаемого параметра в атрибуте @com.parameters, указанном в сообщении, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    /** @com.parameters([type=I4] return, [type=CUSTOM,

    customMarshal=»foo.bar», customMarshalFlags = 3] i) */

    // ошибка: ‘return’ не может быть первым параметром

    native int method1(0bject i); >

    An @ com. ‘identifier’ declaration is illegal for this type of item

    Обнаружено объявление @com для элемента неподходящего типа. Обычно эта ошибка возникает после модификации кода, но может быть связана и с синтаксисом объявления @соm. Проверьте правильность синтаксиса объявления @соm и тип элемента, к которому оно применено.

    Эту ошибку иллюстрирует следующий пример:

    public int methodK);

    // ошибка: неверный тип объявления @com >

    The @com declared type of ‘identifier’ is illegal for a dispatch or dual interface

    В объявлении диспетчерского или дуального интерфейса @соm обнаружен элемент, в атрибуте @com.parameters которого присутствует недопустимый тип. Перечисленные ниже типы параметров недопустимы в атрибуте @com.parameters диспетчерского или дуального интерфейса @соm:

    • FIXEDARRAY;
    • SYSFIXEDSTRING;
    • 18;
    • U8;
    • STRUCT;
    • CUSTOM, CUSTOMBYREF/CUSTOMBYVAL;
    • PTR (кроме ссылки на тип VARIANT);
    • массивы элементов перечисленных выше типов. Эту ошибку иллюстрирует следующий пример:

    /**§com.parameters([in,out] n , [type = 18] j); */

    /*ошибка: тип ’18’ недопустим в дуальном интерфейсе */

    public void method1(int n, int j); >

    // Is impossible (or an expression of type ‘identifier’ to be an instance of ‘identifier»

    Обнаружен оператор instanceof, один операнд которого не может быть экземпляром другого. Для корректного сравнения типов оператором instanceof классы операндов должны иметь общее происхождение. Измените выражение, включающее оператор instanceof так, чтобы классы операндов были связаны, или удалите выражение и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    Simplel x = new Simple1();

    public static void main(String args[]) <

    if(smp.x instanceof Simple2) <

    /*ошибка: несвязанные классы нельзя сравнивать оператором

    Ниже показана корректная форма использования оператора instanceof для проверки того, является ли объект экземпляром конкретного класса:

    class Simplel extends Simple2 <

    Simplel x = new Simple1();

    public static void main(String args[]) <

    if(smp.x instanceof Simple2) <

    // допустимо, поскольку класс ‘Simplel’ — производный класса ‘Simple2’

    Syntax error in @dll declaration

    В тэге комментария @dll обнаружена синтаксическая ошибка. Обычно это сообщение свидетельствует об ошибке ввода тэга @dll. Проверьте синтаксис оператора и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    /* ошибка: ‘kerne!32’ нужно взять в кавычки */

    public static native boolean GetComputerName(StringBuffer s, int[]cb); >

    Expected string constant

    В параметре типа «строковая константа» объявления тэга комментария (например, @com, @dll или @security) отсутствует строковая константа (или она неверно введена). Обычно это сообщение свидетельствует о том, что значение атрибута не взято в кавычки. Проверьте атрибуты объявления тэга комментария и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    // ошибка: ‘method1’ нужно взять в кавычки

    public void method1(); >

    Class or interface name ‘identifier’ conflicts with import ‘identifier’

    Указанный в сообщении класс или интерфейс конфликтует с импортированным классом. Возможная причина — объявление в исходном файле класса или интерфейса, присутствующего в Java API и импортированного в исходный файл. Эту ошибку иллюстрирует следующий пример:

    Expression statement must be assignment, method call, increment, decrement, or «new»

    Обнаружено недопустимое использование операторного выражения. Операторное выражение должно располагаться на отдельной строке кода. Ниже приведены примеры допустимых операторных выражений.

    m_cars.changeColor(); // вызовы методов

    int х = у + z; // операторы присваивания

    j++; , // оператор приращения

    m_tempVar1 += 3; // оператор приращения

    new Simple(); // создание экземпляра класса

    Следующие примеры показывают недопустимые выражения:

    1+2; // ошибка: отсутствует оператор присваивания

    j+k-method1(); // вызов метода без оператора присваивания

    varl == var2; /* операторы сравнения допустимы только в теле управляющих операторов */

    В объявлении метода класса или интерфейса обнаружена ошибка. Обычно она возникает при отсутствии точки с запятой после объявления метода интерфейса или открывающей фигурной скобки объявления метода класса. Проверьте наличие точки с запятой или открывающей скобки в указанном в сообщении объявлении метода класса или интерфейса и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public void method1()

    // ошибка: после объявления

    отсутствует точка с запятой >

    public class Simple <

    public void method1 ()

    // ошибка: отсутствует открывающая скобка >

    Catch clause Is unreachable; exception ‘identifier 1 is never thrown in the corresponding try block

    Обнаружен оператор блока catch, который никогда не будет выполнен из-за отсутствия генерации соответствующего исключения в блоке try. Операторы catch необходимы для перехвата исключений (или их производных), генерируемых соответствующим оператором try. Один из способов избавиться от этой ошибки — изменить оператор catch так, чтобы он перехватывал не исключения конкретного типа, а встроенный класс Exception. Измените класс исключений, для перехвата которых предназначен Ваш оператор catch, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    I=I+1; // блок ‘try’ не имеет отношения к клонам

    catch (CloneNotSupportedException c) <

    // ошибка: это исключение не генерируется блоком ‘try’

    Ниже показано, как избежать этой ошибки с помощью встроенного класса Exception:

    I=I+1; // блок ‘try’ не имеет отношения к клонам >

    catch (Exception e) <

    // корректно, поскольку все исключения — производные класса Exception

    ‘identltier 1 is not a field in class ‘identifier’

    Обнаружено обращение к переменной класса, однако в указанном классе отсутствует переменная с указанным именем. Обычно эта ошибка вызвана опечаткой в имени переменной или использованием неверного имени класса. Убедитесь, что нужная переменная присутствует в указанном классе, проверьте правильность ссылки и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    // ошибка: в этом классе нет переменной ‘var’ > >

    ‘identifier» is not a method in class ‘identifier»

    Обнаружен вызов метода класса, однако в указанном классе отсутствует метод с указанным именем. Обычно эта ошибка вызвана опечаткой в имени метода или использованием неверного имени класса. Убедитесь, что нужный метод присутствует в указанном классе, проверьте правильность синтаксиса вызова и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public void method1() <

    Simple smp = new Simple();

    // ошибка: в классе ‘Simple’ нет метода ‘method2’ > >

    ‘identifier’ is not a nested class or interface in class ‘identifier’

    Обнаружена ссылка на несуществующий вложенный класс или интерфейс указанного класса. Обычно это сообщение свидетельствует о синтаксической ошибке в обращении к вложенному классу или интерфейсу. Проверьте синтаксис обращения к вложенному классу или интерфейсу и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    NotSimple nt = new NotSimple();

    Object о = nt.new InnerClass();

    // ошибка: в классе ‘NotSimple’нет вложенного класса ‘InnerClass’ > >

    ‘identifier’ is not a field or nested class in class ‘identifier’

    Обнаружена ссылка на несуществующий вложенный класс или переменную указанного класса. Обычно это сообщение свидетельствует о синтаксической ошибке в обращении к вложенному классу или переменной. Кроме того, такая ошибка возникает и при обращении к несуществующей переменной вложенного класса. Проверьте наличие вложенного класса или переменной и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    static class InnerClass < int varl;

    static Simple1 smp; >

    public class Simple <

    x = Simple2.innerclass.var1; /* ошибка: имя вложенного класса —

    ‘InnerClass’, а не ‘innerclass’ */

    /* ошибка: имя переменной класса

    ‘Simple2’ — ‘smp’, а не ‘smt’ */ > >

    Cannot throw exception ‘identifier’ from field initializer

    Обнаружена попытка генерации исключения в инициализаторе переменной класса. Обычно эта ошибка возникает при объявлении и создании экземпляра класса, конструктор которого может генерировать исключение, в другом классе. Чтобы избежать ее, перенесите создание экземпляра класса, генерирующего исключение, в конструктор, где операторы try/catch позволят перехватить исключение, сгенерированное при вызове конструктора другого класса. Эту ошибку иллюстрирует следующий пример:

    public Simple(boolean varl) throws

    throw new Exception(); > >

    // Неверная форма создания экземпляра класса class Simple2 <

    Simple smp = new Simple(true);

    /* ошибка: в инициализаторе переменной класса нельзя вызывать

    конструктор, генерирующий исключение */ >

    Ниже код класса Simple2 исправлен так, чтобы можно было корректно создать экземпляр класса Simple:

    // Корректная форма создания экземпляра класса Simple

    smp = new Simple(true);> catch(Exception e)<> > >

    Static initializer must assign a value to blank final variable ‘identifier’

    Обнаружена неинициализированная статическая переменная, объявленная с модификатором final. Чтобы объявить статическую переменную с модификатором final, необходимо присвоить ей исходное значение в статическом инициализаторе или в инициализаторе переменной. Такая ошибка возникает и при попытке присваивания в конструкторе значения статической переменной класса, объявленной с модификатором final. Эту ошибку иллюстрирует следующий пример:

    public class Sirnpie <

    static final int MAX_CONTROL; > // ошибка: переменной, объявленной как ‘static’ и ‘final’,

    // должно быть присвоено значение

    Syntax error fn @security declaration

    В указанном в сообщении тэге комментария @ security обнаружена синтаксическая ошибка. Обычно она возникает при отсутствии в тэге закрывающей скобки или неверных атрибутах тэга. Проверьте синтаксис указанного в сообщении объявления тэга комментария @security и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    /**@security()*/ // ошибка: неверный синтаксис тэга security

    public class Simple <

    // объявление методов класса >

    ‘@ security’ can only be specified on a class or interface

    Обнаружено применение тэга комментария @ security не к объявлению класса или интерфейса. Тэг комментария @ security определяет параметры защиты объявления класса или интерфейса и не применим к методам или переменным классов и интерфейсов. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    // ошибка: тэг @security не применим к методу

    Cannot make static call to non-static method ‘identifier’

    Обнаружен вызов нестатического метода с помощью синтаксиса вызова статического метода . . Замените в вызове имя класса на имя экземпляра класса и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    // ошибка: ‘method1’ не является статическим >

    ‘identifier’ is obsolete; use ‘Identifier’ instead

    Обнаружен тэг комментария (например, @com, @dll или ©security), использующий устаревший формат. Чтобы избежать этой ошибки, воспользуйтесь новым форматом тэга комментария, указанного в сообщении, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    /* ошибка: формат ‘dllimport’ объявления @dll. import больше не поддерживается */

    public static native boolean GetComputerName(StringBuffer s, int[]cb); >

    ©conditional allowed only on void-returning methods

    Обнаружен тэг комментария @ conditional для метода, возвращающего значение. Тэг @ conditional предназначен для использования с методами, не возвращающими значения. Измените тип возвращаемого методом значения на void или удалите тэг @ conditional и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public int method1(int x) <

    // ошибка: условный метод не может возвращать значение

    Warning treated as error

    Компилятор запущен с ключом /wx, и при компиляции возникло предупреждение. При использовании ключа /wx компилятор рассматривает предупреждения как ошибки. Для возникновения этого сообщения необходимо также, чтобы с помощью ключа /w <0-4>был задан достаточно высокий уровень диагностики.

    Invalid token оn а# directive

    Обнаружена недопустимая директива условной компиляции. Обычно это происходит в случае синтаксической ошибки в имени директивы или использования несуществующей директивы. Проверьте синтаксис директивы условной компиляции и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    (Jiff DEBUG // ошибка: недопустимая директива ‘iff

    System, out. println(«Метод method1»); Sendif > >

    #elif without matching #if

    Обнаружена директива условной компиляции #elif без соответствующей директивы #if. Проверьте наличие соответствующей директивы #if и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    #elif DEBI/G // ошибка: перед ‘Selif’ необходима директива ‘#if’

    System, out. print In («Метод method1»); #endif > >

    #entiif without matching #if

    Обнаружена директива условной компиляции #endif без соответствующей директивы #if. Обычно эта ошибка свидетельствует о лишней ди-

    рективе #endif. Кроме того, она возникнет и если удалить (или закомментировать) директиву #if, оставив директиву #endif. Проверьте наличие соответствующей директивы #if и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    #endif // ошибка: лишняя директива ‘flendif > >

    #else without matching iif

    Обнаружена директива условной компиляции #else без соответствующей директивы #if. Обычно эта ошибка свидетельствует о лишней директиве #else. Кроме того, она возникнет и если удалить (или закомментировать) директиву #if, оставив директиву #else. Проверьте наличие соответствующей директивы #if и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() < // .

    #eise /«ошибка: у директивы ‘#else’ нет парной директивы ‘#if */

    Already had an ielse

    В блоке директивы условной компиляции #if обнаружено дублирование директивы #else. Каждой директиве #if должна соответствовать ровно одна директива #else. Убедитесь, что каждой директиве #if соответствует одна директива #else, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple < #lf A

    #else // ошибка: лишняя директива ‘#else’ # endif >

    Unexpected EOF while looking for #endlf

    Обнаружена директива условной компиляции #if без соответствующей директивы #endif; кроме того, не определен символ, использованный в директиве #if. Обычно эта ошибка возникает при отсутствии директивы #endif, завершающей блок условной компиляции. Проверьте наличие директивы #endif для директивы #if, указанной в сообщении, и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    #if DEBUG // символ ‘debug’ не определен System. out. p rintln(«. «);

    // ошибка: отсутствует директива ‘#endif’

    #if nested too deeply

    Обнаружено превышение лимита вложенности блоков условной компиляции #if. Глубина вложения блоков условной компиляции не должна превосходить 64. Убедитесь, что глубина вложения блоков условной компиляции не превосходит 64, и повторите компиляцию.

    Cannot have #define/#undef after source

    Директива условной компиляции #define или #undef обнаружена после исходного кода Java. Директивы #define и #undef допустимы только в начале файла, до исходного кода (не считая других директив услов ной компиляции и комментариев). Расположите указанную в сообщении директиву #define или #undef до исходного кода и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    // ошибка: директива ‘#define’ должна располагаться до оператора ‘package’

    public class Simple< >,

    Cannot change predefined symbol

    Обнаружена попытка использования директивы условной компиляции #define или #undef с идентификатором, уже определенным в языке Java. Обычно эта ошибка возникает при переопределении в одной из этих директив заранее определенных символов типа true или false. Удалите или исправьте указанную в сообщении директиву #define или #undef и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    #undef false // ошибка: недопустимое использование символа ‘false’

    #define true // ошибка: недопустимое использование символа ‘true’

    public class Simple < //.

    Обнаружена директива условной компиляции #if без соответствующей директивы #endif, однако символ, использованный в директиве #if, определен. Обычно эта ошибка возникает при отсутствии директивы #endif, завершающей блок условной компиляции, причем соответствующий код (после директивы #if) подлежит компиляции. Проверьте наличие директивы #endif для директивы #if, указанной в сообщении, и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    System, out. println(«. «); // ошибка: отсутствует директива ‘#endif’

    Expected ‘class’, ‘interface’, or ‘delegate’

    В объявлении, указанном в сообщении, должно присутствовать одно из ключевых слов class, interface или delegate.. Обычно эта ошибка возникает, если в объявлении класса, интерфейса или делегата пропущено соответствующее ключевое слово. Другая возможная причина — неодинаковое число открывающих и закрывающих скобок блока.

    Примечание Это сообщение возможно, только если при компиляции проекта используется режим Microsoft Language Extensions. В противном случае в этой ситуации выдается сообщение об ошибке J0020.

    Эту ошибку иллюстрирует следующий пример:

    Ниже проиллюстрировано возникновение этой ошибки из-за неодинакового числа открывающих и закрывающих скобок блока:

    public class Simple <

    // . >> // ошибка: лишняя закрывающая скобка ‘>’

    Delegate cannot be initialized with static method ‘identifier’

    Обнаружено создание экземпляра делегата, в качестве аргумента которого фигурирует ссылка на статический метод. В качестве аргумента при создании экземпляра делегата должен выступать нестатический метод. Убедитесь, что метод, которым’будет пользоваться делегат, не является статическим, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример: delegate int MyDelegate (int varl, String var2)throws Exception;

    public class Simple <

    public static int method1(int varl, String var2) throws Exception <

    public static void main (String args[])

    MyDelegate md = new MyDelegate(smp.method1);

    /*ошибка: делегату в качестве параметра

    передана ссылка на статический матод */ > >

    ‘ Cannot declare delegate in inner class ‘identifier’

    Обнаружена попытка объявления делегата внутри вложенного класса. Объявление делегатов в теле вложенных классов не поддерживается. Удалите объявление делегата из вложенного класса и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple < // .

    delegate int MyDelegate (int vart, String var2);

    /*ошибка: объявление делегата во вложенном

    Exception ‘Identifier’ from method ‘identifier’ is not a subclass of any exceptions declared thrown by delegate ‘Identifier’

    Обнаружена попытка инициализации делегата с помощью метода, генерирующего исключение, которое не входит в список объявленных исключений делегата. Все исключения метода должны принадлежать тому же классу, что и исключения делегата (или классу, производному от него). Приведите наборы исключений делегата и метода в соответствие и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    delegate void SimpleDelegate(String varl) throws Exception;

    public class Simple <

    public void method1(String varl) throws Throwable <

    public static void main (String args[]) <

    Simple smp = new Simple();

    SimpleDelegate del1 = new SimpleDelegate(smp.method1);

    /* ошибка: исключение метода, ссылка на который использована в качестве аргумента, не принадлежат классу исключений делегата */ >

    Cannot declare an Interface method to be ‘protected» or ‘private’

    Обнаружен метод интерфейса, объявленный как защищенный или закрытый. Методы интерфейсов должны объявляться как открытые или без спецификатора доступа. Измените спецификатор доступа в объявлении метода, указанного в сообщении, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public void method1(); // корректное объявление

    void method2(); // корректное объявление, доступ по умолчанию

    protected void method3(); /*ошибка: метод интерфейса нельзя объявить

    private void method4();

    /*ошибка: метод интерфейса нельзя объявить

    An explicit enclosing instance of class ‘identifier’ is needed to instantiate inner class ‘identifier’

    Обнаружена попытка создания экземпляра вложенного класса без создания экземпляра соответствующего объемлющего класса. Обычно эта ошибка возникает при попытке создания в статическом методе экземпляра вложенного класса точно так же, как создается экземпляр объемлющего класса. Для создания экземпляра вложенного класса необходим существующий экземпляр объемлющего класса. Создайте экземпляр объемлющего класса, воспользуйтесь им для создания экземпляра вложенного класса и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public static void main(String args[])

    /*ошибка: для создания экземпляра вложенного класса необходим

    существующий экземпляр объемлющего класса */ > >

    Ниже показана корректная форма создания, экземпляра вложенного класса с помощью существующего экземпляра объемлющего класса:

    public class Simple <

    public static void main(String args[])

    /* создание экземпляра вложенного класса с помощью

    экземпляра объемлющего класса ‘Simple’ */

    InnerClass inc = smp.new InnerClass(); > >

    An explicit enclosing instance of class ‘identifier’ is needed to call constructor of superclass ‘identifier’

    Обнаружена попытка вызова конструктора надкласса из подкласса без использования экземпляра надкласса. Обычно эта ошибка связана с тем, что надкласс является вложенным в другой класс. При создании экземпляра подкласса создается и экземпляр надкласса, причем с вызовом его конструктора. Однако создание экземпляра вложенного класса возможно только с помощью экземпляра объемлющего класса. Эту ошибку иллюстрирует следующий пример:

    public class Simple extends OuterClass.InnerClass <

    /*ошибка: нельзя создать экземпляр надкласса ‘InnerClass’ без создания экземпляра объемлющего его класса ‘OuterClass’ */

    Ниже показана корректная форма создания экземпляра класса, производного от вложенного класса:

    public class Simple extends OuterClass.InnerClass < Simple()<

    /* в следующей строке создается экземпляр объемлющего класса, после чего вызывается конструктор вложенного надкласса */

    Array cannot have a dimension

    Обнаружена некорректная инициализация размерности массива. Обычно эта ошибка связана с указанием размерности массива до создания самого массива. Другая возможная причина — указание размерности массива одновременно с инициализацией значений его элементов (при инициализации массива с помощью списка значений элементов размерность не задается). Исправьте указанный ,в сообщении оператор инициализации массива и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    String[3] varl; /* ошибка: нельзя указывать размерность

    массива до его создания */

    String[] var2 = new String[3];

    boolean var3 = new boolean[3];

    /*ошибка: при инициализации массива с помощью списка

    значений элементов его размерность не указывается */

    boolean var4 = new boolean[]; // корректная форма

    @dll attribute cannot be placed on method ‘identifier’ — it must be declared ‘native’

    Обнаружено использование тэга комментария @dll для метода, в объявлении которого отсутствует модификатор native. Обычно эта ошибка возникает после удаления или комментирования метода, для которого предназначался этот тэг, в результате чего тэг относится к другим методам класса. Убедитесь, что метод, к которому применяется тэг @dll, объявлен с модификатором native или удалите тэг, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    private native static int MessageBox(int hwndOwner, String text,

    String title, int fuStyle);

    /*ошибка: тэг @dll предназначался для закомментированного метода,

    а к методу ‘method1’ его применять нельзя */ Rublic void method1() <

    Compilation canceled by user

    Компиляция прервана пользователем. Это сообщение просто информирует о том, что компиляция прервана успешно.

    A delegate cannot be ‘identifier’

    В объявлении делегата обнаружен недопустимый модификатор. Объявление делегата за пределами класса может содержать только модификаторы public и final. При объявлении делегата в теле класса допустимы модификаторы public, final, protected и private. Убедитесь, что в объявлении делегата нет недопустимых модификаторов, и повторите компиляцию.

    Примечание Хотя модификатор final допустим в объявлении делегата, он не нужен, поскольку применяется по умолчанию.

    Эту ошибку иллюстрирует следующий пример:

    private delegate void Simple(int var1, int var2); // ошибка: делегат не может быть объявлен закрытым

    A delegate cannot be ‘identifier’ and ‘identifier’

    В объявлении делегата в теле класса обнаружен набор недопустимых модификаторов. Обычно эта ошибка возникает при объявлении делегата с двумя спецификаторами доступа. Удалите лишний спецификатор доступа из объявления делегата, указанного в сообщении, и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public private delegate void SimpleDelegate();

    // ошибка: объявление не может содержать модификаторы ‘public’

    // и ‘private’ одновременно >

    Ambiguous name: inherited ‘identifier’ and outer scope ‘identifier’ — an explicit ‘this’ qualifier is required

    Во вложенном классе обнаружено обращение к переменной или методу, объявленному как в объемлющем классе, так и в его базовом классе. Компилятор не может решить, какую переменную или метод нужно использовать. К переменной или методу объемлющего класса можно обращаться с помощью конструкции класс.this.имя, где класс — имя объемлющего класса, а имя — имя его переменной или метода. Для обращения к переменной или методу базового класса ссылку нужно предварить ключевым словом super. Эту ошибку иллюстрирует следующий пример:

    class InnerClass extends NotSimple < int var2 = varl;

    // ошибка: неизвестно, какая из переменных ‘var1’ имеется в виду

    Ниже показана корректная форма разрешения противоречия между именами переменных объемлющего и базового класса:

    // корректное обращение к переменной объемлющего класса

    int var3 = super.var1;

    // корректное обращение к переменной базового класса

    Ambiguous reference to ‘identifier» in interface ‘identifier’ and class ‘identifier’

    Обнаружена двусмысленная ссылка на переменную класса. Обычно эта ошибка возникает в случае наличия одноименных переменных в базовом классе данного класса и в интерфейсе, который реализует данный класс. Компилятор не может решить, какой экземпляр переменной нужно использовать. Убедитесь в отсутствии одноименных переменных в базовых классах и реализациях интерфейсов и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple extends Superclass implements Superlnterface<

    public static void main (String args[]) <

    /* ошибка: неизвестно, какой

    экземпляр ‘varl’ имеется в виду */

    float varl; > interface Superlnterface <

    float varl =6. Of; >

    Обнаружен модификатор multicast без ключевого слова delegate. Модификатор multicast допустим только в сочетании с ключевым словом delegate для создания multicast-делегатов. Убедитесь, что в объявлении, указанном в сообщении, присутствует ключевое слово delegate, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public multicast void SimpleDelegate(String x, int y);

    // ошибка: после модификатора ‘multicast’ отсутствует ключевое слово

    public class Simple <

    A multicast delegate cannot return a value

    В объявлении multicast-делегата обнаружен отличный от void тип возвращаемого значения. Хотя для обычных делегатов это не запрещено, multicast-делегат не может возвращать значение. Убедитесь, что в объявлении multicast-делегата, указанном в сообщении, в качестве типа возвращаемого значения фигурирует void, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    multicast delegate int SimpleDelegate(int x, int y);

    // ошибка: multicast-делегат не может иметь

    // тип возвращаемого значения, отличный от

    void public class Simple <

    public int method1(int x, int y) < // тело метода

    public static void main (String args[]) <

    Simple smp = new Simple;

    SimpleDelegate sd = new SimpleDelegate(smp.methodl); > >

    Cannot cast to ‘void’

    Обнаружена попытка преобразования значения, возвращаемого методом, к типу void. В языке Java такое преобразование запрещено. Удалите преобразование типа значения, возвращаемого методом, и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    public class Simple <

    public void method1() <

    // . > public static void main (String args[]) <

    Simple smp = new Simple();

    // ошибка: преобразование значения, возвращаемого методом,

    // к типу ‘void’ запрещено > >

    Expected ‘identifier’ within single comment preceding class ‘identifier’

    Класс, указанный в сообщении, объявлен с тэгом комментария @com.typeinfo или @com.transaction, однако соответствующий тэг @com.register в этом комментарии не найден. Обычно это сообщение свидетельствует о том, что тэг @com.register находится в отдельном комментарии. Убедитесь, что тэг @com.register находится в том же комментарии, где тэг @com.typeinfo или @com.transaction, и повторите компиляцию. Эту ошибку, иллюстрирует следующий пример:

    public class Simple <

    /ошибка: тэг ‘@com.register’s отдельном

    2384-612345678901, value=»Help»)*/ public class Simple2 <

    // корректная форма — все тэги находятся в одном комментарии >

    Class or interface name ‘identifier’ conflicts with package ‘identifier’

    Имя класса или интерфейса, указанного в сообщении, конфликтует с именем пакета. Эту ошибку может вызвать объявление в пакете класса или интерфейса, имя которого совпадает с именем вложенного пакета.

    Переименуйте класс/интерфейс или вложенный пакет, вызвавший ошибку, и повторите компиляцию.

    Эту ошибку иллюстрирует следующий пример:

    // находится в файле Plastic.Java

    public class Plastic <

    // находится в файле Dishes.java package Boxes; public class Dishes <

    // ошибка: имя ‘Dishes’ одновременно является именем вложенного пакета

    Это сообщение генерируется директивой условной компиляции #еггог в коде программы. Ниже приведен пример генерации этого сообщения:

    #define DEBUG public class Simple <

    #error Необходимо включить отладочный режим!

    // сообщение выводится если определен символ ‘DEBUG’ #endif > >

    Local variable ‘identifier’ is Initialized but never used

    Обнаружена инициализированная переменная, на которую нет ссылок в коде класса. Это предупреждение появляется, только если уровень диагностики — 3 и выше. Используйте переменную или удалите ее объявление.

    Вот пример кода, который приводит к появлению этого предупреждения:

    public class Simple <

    public int method1() <

    int i = 1; return 1;

    // предупреждение: переменная ‘i’ нигде не используется

    Compiler option ‘identifier’ is not supported

    Обнаружен неподдерживаемый ключ компилятора. Проверьте значения ключей компиляции и повторите компиляцию.

    Ignoring unknown compiler option ‘identifier’

    В командной строке JVC задан неизвестный параметр. Обычно это сообщение свидетельствует об опечатке. Например, Вы получите это со общение, если зададите в командной строке ключ /W4, поскольку параметр warning level должен начинаться со строчной буквы (/w4).

    Missing argument for compiler option ‘identifier’

    Обнаружен допустимый параметр командной строки, аргумент которого не указан. Проверьте значения параметров компиляции и повторите компиляцию.

    Package ‘identifier’ was already implicitly imported

    Обнаружен оператор импорта пакет, уже импортированного неявным образом (например, java.lang). Это предупреждение появляется, только если уровень диагностики — 1 и выше. Эту ошибку иллюстрирует следующий пример:

    // предупреждение: класс ‘process’ уже импортирован первым оператором import java.lang.Process;

    public class Simple!

    ‘private protected’ not supported, using ‘protected’

    Обнаружена комбинация модификаторов private protected. Это устаревший вариант — теперь вместо него используется один модификатор protected. Такое предупреждение появляется, только если уровень диагностики — 1 и выше.

    ‘identifier’ has been deprecated by the author of ‘identifier’

    Указанный в сообщении класс или метод помечен как отозванный. Метод или класс, помеченный автором кода как отозванный, считается устаревшим и подлежащим удалению. Чтобы обеспечить стабильность Вашего кода, избегайте использования отозванных функций.

    The parameter ‘identifier’ in an @com.parameters declaration does not match the corresponding argument ‘identifier’

    Объявление @com.parameters не соответствует методу, реализующему интерфейс. Это сообщение может указывать на несоответствие типов данных или неверный порядок параметров. Проверьте соответствие числа, типа и порядка параметров в объявлениях @com.parameters и соответствующего метода и повторите компиляцию. Эту ошибку иллюстрирует следующий пример:

    /** @com.interface(iid=31415926-5358-9793-2384-612345678901, dual) */ interface Examplelnterface

    @com.method(dispid=306) @com.parameters([type=BOOLEAN] when, on)

    // ошибка: в объявлении @com.parameters параметры приведены в неверном

    public String Method1(boolean on, int when); >

    This ‘instanceof operator will always be true

    Указанное в сообщении выражение instanceof всегда имеет значение true. Это может случиться при использовании в качестве операндов оператора instanceof экземпляра производного класса и базового класса или интерфейса, реализуемого классом. Хотя это и не ошибка, такое выражение вряд ли окажется полезным, поскольку оно всегда истинно. Эту ошибку иллюстрирует следующий пример:

    class Y extends X implements I <>

    public class Simple < void f() <

    // Эти операторы порождают предупреждение J5016.

    if (y instanceof X) <

    //у — экземпляр класса Y, производного от X, поэтому выражение

    // всегда истинно > if (y instanceof I) <

    // класс Y реализует интерфейс I, поэтому выражение всегда истинно >

    if (x instanceof Object) <

    // все объекты — производные класса Object >

    Class, interface, or package name contains characters not in the ASCII character set

    В имени класса, интерфейса или пакета обнаружен символ, не входящий в набор символов ASCII. Чтобы гарантировать возможность интерпретации класса, интерфейса или пакета виртуальной машиной, замените недопустимые символы в имени символами ASCII и повторите компиляцию.

    Public member of COM-exposed class or interface contains characters not in the ASCII character set

    В имени метода или переменной класса, доступной другим языкам посредством интерфейса СОМ, обнаружен символ, не входящий в набор символов ASCII. Другие языки могут не поддерживать такие символы. Чтобы гарантировать доступ к методу или переменной класса из других языков, замените недопустимые символы в имени символами ASCII и повторите компиляцию.

    Directive ‘identifier’ ignored — extensions are turned off

    В коде обнаружен тэг комментария (например, @соm или @dll) при отключенном режиме расширений Microsoft Language Extensions. Чтобы пользоваться тэгами и другими расширениями, этот режим необходимо включить.

    Предупреждение При отключении режима Microsoft Language Extensions код, использующий расширения, может работать неверно. Эту ошибку иллюстрирует следующий пример:

    // режим Microsoft Language Extensions отключен public class Simple <

    public static native int MessageBox(int hWnd, String text, String

    caption, int type);

    // предупреждение: метод ‘MessageBox’ может работать неверно

    Package ‘identifier’ should not be defined in directory ‘identifier’

    В коде обнаружен оператор package, однако имя каталога, в котором находится исходный файл, не соответствует указанному в операторе package. Хотя компиляция кода по-прежнему возможна, код в других файлах не сможет обратиться к классам, интерфейсам и делегатам исходного файла по имени пакета. Эту ошибку иллюстрирует следующий пример:

    // исходный файл находится в каталоге c:filessimple package boxes;

    // предупреждение: название пакета ‘boxes’

    // не соответствует имени каталога ‘simple’

    public class NotSimple <

    // предупреждение: доступ к данному классу по имени пакета невозможен >

    Referenced class file ‘filename’ maybe older than ‘filename’

    В компилируемом исходном файле обнаружена ссылка на устаревший или отсутствующий файл класса. Это сообщение обычно возникает при отключении режима автоматической перекомпиляции используемых классов (параметр компиляции ref-).. Если Вы компилируете файл из интегрированной среды Visual J++, этот параметр передается компилятору по умолчанию. Если один из файлов Вашего проекта использует файл класса, не входящий в состав проекта, и этот файл класса старше своего исходного файла, используемый файл класса необходимо перекомпилировать. Вы можете перекомпилировать внешние файлы классов, добавить их в проект или воспользоваться параметром компиляции ref- (его можно ввести в поле Additional Compiler Options на вкладке Compile диалогового окна Project Settings).

    File ‘filename’ has more than 65 535 lines — debug information may be incorrect

    При попытке размещения отладочной информации в исходном файле выяснилось, что последний содержит более 65 535 строк кода. Компиляция файла по-прежнему возможна, однако в файле будет размещена не весь код, необходимый для отладки приложения. Уменьшите размер исходного файла так, чтобы в нем было достаточно места для отладочной информация, и повторите компиляцию.

    Package ‘identifier’ was already imported

    В указанном в сообщении исходном файле обнаружен дважды импортированный пакет. Хотя компиляция при этом не прерывается, следует удалить указанный в сообщении дубликат оператора импорта.

    Это сообщение генерируется директивой условной компиляции #warning в тексте программы.

    Ниже приведен пример кода, генерирующего это сообщение:

    public class Simple <

    #warning Компиляция для отладочного режима

    // предупреждение: выводится, когда определен символ ‘DEBUG’

    Сообщения об ошибках регистрации СОМ (Visual J++)

    В процессе регистрации класса СОМ Вы можете получить сообщение об ошибке или предупреждение. Каждое сообщение содержит информацию о вероятных причинах ошибки и, если возможно, советы по ее исправлению.

    No registration attribute in class file ‘filename’

    Сделана попытка регистрации указанного в сообщении класса, однако в файле класса отсутствует тэг комментария @com.register. Убедитесь, что подлежащий регистрации класс СОМ снабжен необходимым тэгом комментария @com.register.

    Cannot create Instance of class ‘identifier 1

    Для создания библиотеки типов и регистрации Вашего СОМ-класса необходимо, чтобы класс поддерживал создание экземпляра и вызов стандартного конструктора (без параметров). Эта ошибка может свидетельствовать об отсутствии какого-либо из базовых классов Вашего класса или о наличии ошибки в стандартном конструкторе Вашего класса. Убе дитесь, что все базовые классы Вашего класса доступны, а стандартный конструктор Вашего класса не содержит ошибок.

    Cannot open filename ‘filename’

    В процессе регистрации СОМ создается временная библиотека типов. Это сообщение возникает если временный файл не удалось скопировать или присвоить ему имя окончательной библиотеки типов. Убедитесь, что файл не имеет атрибута «только для чтения», не находится в каталоге с таким атрибутом и не используется другим приложением.

    Unable to create registry keys for class ‘Identifier’

    В процессе регистрации Вашего СОМ-класса не удалось создать ключ реестра. Другая причина — процесс регистрации СОМ не смог открыть нужный ключ реестра или записать в него значение. Убедитесь, что реестр не испорчен.

    Class file ‘filename’ does not have the extension ‘.class’

    Для того чтобы СОМ-класс можно было зарегистрировать, откомпилированный файл класса должен иметь расширение .class. Это же сообщение возникает и при попытке регистрации в качестве СОМ-класса файла, не являющегося файлом класса Java. Убедитесь, что регистрируемый файл класса имеет расширение .class и является корректным файлом класса Java.

    The internal class name ‘identifier’ does not match the file or directory name of class file ‘filename’ — it cannot be loaded

    Имя класса, регистрируемого в качестве СОМ-класса, отличается от имени файла класса, или каталог, где находится файл класса, конфликтует с названием пакета класса. Убедитесь, что имя класса СОМ и его пакета соответствуют местонахождению и названию файла класса.

    Classes contain more than one type library Id. Only one type library can be created at a time

    В проекте Visual J++ можно указать только одну библиотек типов. Обычно эта ошибка связана с несовпадением глобальных идентификаторов (GUID) библиотеки типов, указанных в тэгах комментария @com.register СОМ-классов Вашего проекта. Глобальные идентификаторы библиотеки типов всех СОМ-классов проекта должны совпадать. Чтобы исправить положение, сбросьте флажок рядом с названием класса на вкладке COM Classes диалогового окна Project Properties, примените изменения, а затем снова установите этот флажок. В результате класс снова станет СОМ-классом, и ему будет присвоен тот же глобальный идентификатор библиотеки типов, что и всем остальным классам проекта.

    Base name of class ‘identifier’ conflicts with another class in the same type library

    В библиотеке типов присутствует класс с тем же именем, что и регистрируемый СОМ-класс. Эта ошибка обычно возникает при добавлении в библиотеку типов одноименных СОМ-классов из разных пакетов. Что-
    бы разрешить конфликт, измените имена классов, добавляемых в библиотеку типов.

    Сообщения об ошибках упаковки Windows EXE/COM DLL (Visual J++)

    В процессе создания исполняемого модуля (Windows EXE) или библиотеки динамической загрузки COM (COM DLL) Вы можете получить сообщение об ошибке. Список возможных сообщений приведен ниже. Каждое сообщение содержит информацию о вероятных причинах ошибки и, если возможно, советы по ее исправлению.

    Path too long: ‘path’

    Длина полного имени исполняемого модуля или библиотеки динамической загрузки СОМ (включая путь) превышает 256 символов. Сократите путь и/или имя файла и соберите проект еще раз.

    No main class file specified

    В проекте создания исполняемого модуля не указан главный класс (класс, содержащий метод main). Чтобы создать исполняемый модуль Windows, необходимо указать главный класс на вкладке Launch диалогового окна Project Properties.

    No class files found

    В проекте создания исполняемого модуля или библиотеки динамической загрузки СОМ отсутствуют файлы классов. Убедитесь, что Ваш проект содержит хотя бы один файл класса и что все файлы, входящие в проект, перечислены на вкладке Output Format диалогового окна Project Properties.

    Unable to open output file: ‘filename’

    He удалось открыть результирующий файл, указанный в сообщении. Убедитесь, что файл не имеет атрибута «только для чтения» и не используется другим приложением. Эта ошибка может быть также вызвана нахождением файла в каталоге с атрибутом «только для чтения».

    Unable to update resources In file: ‘filename’

    He удалось записать сведения о ресурсах в файл ресурсов, указанный в сообщении. Убедитесь, что на жестком диске Вашего компьютера достаточно свободного места.

    Badly formatted class file: ‘filename’

    Файл класса, указанный в сообщении, имеет неверный формат. Обычно эта ошибка возникает при порче файла класса или в случае, если файл имеет расширение .class, но не является корректным файлом Java-класса. Удалите указанный в сообщении файл класса и повторите сборку проекта.

    File not found: ‘filename’

    Файл класса, указанный в сообщении, не найден. Убедитесь, что на вкладке Output Format диалогового окна Project Properties правильно указано местонахождение файла, и повторите сборку проекта.

    Unable to load resources from file ‘filename’

    He удалось открыть файл ресурсов, указанный в сообщении. Убедитесь, что указанный файл является корректным файлом ресурсов Windows и не используется другим приложением.

    Unable to read typelib file ‘filename’

    He удалось открыть файл библиотеки типов, указанный в сообщении. Убедитесь, что указанный файл является корректным файлом библиотеки типов и не используется другим приложением.

    Corrupt registration attribute in class ‘identifier’

    Атрибуты СОМ-регистрации файла класса, указанного в сообщении, испорчены. Обычно эта ошибка свидетельствует о порче или неверном формате файла класса. Удалите указанный в сообщении файл класса и повторите сборку проекта.

    Class ‘identifier’ does not have a method of the form ‘static public void main (Stringll)’

    Класс, указанный в качестве главного в проекте сборки исполняемого модуля, не содержит метода main. Метод main представляет собой точку входа исполняемого модуля Windows и поэтому обязателен. Добавьте метод main в класс, указанный в сообщении, или выберите другой класс в качестве главного на вкладке Launch диалогового окна Project Properties.

    Main class name ‘identifier’ is too long

    Длина имени главного класса, указанного в сообщении, превышает 256 символов. Сократите название класса и повторите сборку проекта.

    Specified main class ‘identifier’ not found

    В процессе создания исполняемого модуля не найден класс, указанный в качестве главного. Обычно эта ошибка возникает, если главный класс, указанный на вкладке Launch диалогового окна Project Properties, удален из файла класса или переименован. Задайте новый главный класс на вкладке Launch диалогового окна Project properties и повторите

    Unable to read from file ‘filename’

    Файл, указанный в сообщении, не удалось открыть для чтения. Убедитесь, что указанный файл не используется другим приложением.

    Cannot create a DLL with no COM classes

    Проект создания библиотеки динамической загрузки СОМ не содержит СОМ-классов. Чтобы создать СОМ-класс, выберите класс из списка

    классов на вкладке COM Classes диалогового окна Project Properties.

    Если Вы не планируете предоставлять доступ к классам проекта посредством интерфейса СОМ, измените тип проекта на вкладке Output Format диалогового окна Project Properties и повторите сборку проекта.

    Failure during auto-registration of ‘filename’

    Библиотека динамической загрузки СОМ не смогла автоматически зарегистрироваться после создания. Обычно эта ошибка связана с порчей реестра.

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

    Источник

    Работа с массивами.

    В предыдущих статьях стало немного понятно, как присвоить значение элементам массива,  создать многомерный и что нужно для того, чтобы вывести все это на экран.  Теперь представим задачу, в которой нужно создать массив в 1000 элементов и присвоить им одинаковые значения. Для решения этой проблемы нам понадобится команда Arrays.fill().

    Создадим массив (сформируем объект), выделим необходимое количество памяти (которая заполниться значением null) и затем при помощи команды Arrays.fill() присвоим элементам одинаковые значения.

    massiv.gif

    Если вы посмотрите на рисунок, то увидите ошибки на консоли, вот что они означают: 8 : error: class, interface, or enum expected }; — цифра указывает на строку в которой допущена ошибка, далее следует описание проблемы, а именно лишняя скобка, которая идет после основной закрывающей скобки главного класса. Следующая ошибка в том, что после создания объекта не стоят квадратные скобки: :8: error: ‘[‘ expected int[] rich = new int;

    :8: error: ‘]‘ expected int[] rich = new int;

    2 errors // означает количество ошибок при этой компиляции

    И еще одна ошибка говорит о том, что для массива не выделено пространства :8: error: array dimension missing int[] = new int[]; 1 error

    Для того, чтобы отображение было правильным применим команду  Arrays.toString

    System.out.println(Arrays.toString(rich));//выводим на экран

    Теперь попробуем создать двухмерный массив с одинаковыми значениями.

    import java.util.Arrays;

    class text{

    public static void main(String[]args){

    int[][] rich = new int[10][50];//Создадим массив (сформируем объект),

    // выделим необходимое количество памяти

    Arrays.fill(int rich, 9, 2);

    System.out.println(Arrays.toString(rich)); //выводим на экран

    }

    }

    К сожалению этот финт мне не удалось сделать, т.к. при компиляции ошибок не возникло, а вот при выполнении кода получилось: exception in thread “main” java.lang.arraystore… Буду разбираться.

    У нас в садике и близлежащие территории посыпало градом, а вот около дома не было и следа.

    Program wont compile. Keeps giving me an array dimension missing error. Anyone know why?

    import java.util.*;
    public class ExampleArray// Name of program
    {
    public static void main(String[]args)
    {
    //Declare variables
    int thisMany,sum;
    int[]theList=new int[]

    //Initialize variables
    thisMany=theList[0];
    sum=0;

    //Prepare code to accept keyboard input
    Scanner keyboard=new Scanner(System.in);

    //Print welcome message and save input
    System.out.println(«How many numbers will you enter?»);
    thisMany=keyboard.nextInt();

    for(i=0;i<thisMany;i++)//loop that stores numbers until i gets to thisMany
    {
    System.out.println(«Enter integer «+(i+1)+» :»);
    theList=keyboard.nextInt();
    }

    for(int i=0;i<thisMany;i++)//loop that calculates the sum of the numbers entered
    {
    sum=sum+theList[i];
    }

    System.out.println(«The sum of the numbers is:»+sum);//Prints the sum of the numbers entered

    for(int i=0;i<thisMany;i++)//loop that calculates and prints the percent of the sum for each number
    {
    System.out.println(theList[i]+» is «+(int)(((double)theList[i]/sum)*100+0.5)+» %of the sum»);
    }

    }
    }


    posted 17 years ago

    • Mark post as helpful


    • send pies

      Number of slices to send:

      Optional ‘thank-you’ note:



    • Quote
    • Report post to moderator

    I have a line in my code:

    int array = new int[] array;

    the error is array dimention missing

    What does this mean?

    Steph


    posted 17 years ago

    • Mark post as helpful


    • send pies

      Number of slices to send:

      Optional ‘thank-you’ note:



    • Quote
    • Report post to moderator

    To declare an array you need something along the lines of

    int[] anIntArray = new int[10];

    This declares ‘anIntArray’ to be an array of length 10.

    Retired horse trader.

     Note: double-underline links may be advertisements automatically added by this site and are probably not endorsed by me.

    Stephanie Dears

    Ranch Hand

    Posts: 43


    posted 17 years ago

    • Mark post as helpful


    • send pies

      Number of slices to send:

      Optional ‘thank-you’ note:



    • Quote
    • Report post to moderator

    It’s reading from a .txt file.

    author and iconoclast

    Posts: 24204

    Mac OS X
    Eclipse IDE
    Chrome


    posted 17 years ago

    • Mark post as helpful


    • send pies

      Number of slices to send:

      Optional ‘thank-you’ note:



    • Quote
    • Report post to moderator

    You can declare an array of unknown size like this:

    int[] array;

    but there’s no array object there. You can’t use «new» to actually create the object until you actually know the size.

    If you don’t know the size — that’s what we’re talking about here, right? — then don’t use an array: use one of the Collections classes in java.util. For example, java.util.ArrayList, which is rather like an array, but it grows automatically as you add items to it.

    Prerequisite : Java Arrays

    Question 1. What is the output of this question?

    class Test1 {

    public

        static void main(String[] args)

        {

            int arr[] = new int[5];

            int arr2[] = new int['a'];

            byte bt = 10;

            int arr3[] = new int[bt];

            System.out.println(arr.length);

            System.out.println(arr2.length);

            System.out.println(arr3.length);

        }

    }

    Option
    A) Error
    B) Runtime Exception
    C) 5
    97
    10
    D) 5
    65
    10

    Output: C
    

    Explanation : To specify array size allowed data type are – byte, short, int, char and all of these are valid data types here.

    Question 2. What is the output of this question?

    class Test2 {

    public

        static void main(String[] args)

        {

            int a[] = new int[5];

            int[] a11 = new int[];

        }

    }

    Option
    A) Error
    B) Exception
    C) Run successfully
    D) None

    Output: A
    

    Explanation : One Dimension array have size declaration as compulsory feature.

    Error : array dimension missing
    int []a11 = new int[]; // line 2

    Question 3. Which of the following declarations are invalid?

    class Test3 {

    public

        static void main(String[] args)

        {

            int[][] arr1 = new int[2][3];

            int[][] arr2 = new int[2][];

            int[][] arr3 = new int[][];

            int[][] arr4 = new int[][2];

        }

    }

    Option
    A) All
    B) line 1, 3, 4
    C) line 3, 4
    D) line 2, 3, 4

    Output: C
    

    Explanation : First two declarations are allowed and so no error. line 3 and 4 have zero and last dimension respectively.
    error: array dimension missing

    int [][]arr3=new int[][];//line 3
                              ^
    error: ']' expected
      int [][]arr4=new int[][2];//line 4
                             ^
    error: ';' expected
      int [][]arr4=new int[][2];//line 4

    Question 4. Which of the following lines give error?

    class Test4 {

    public

        static void main(String[] args)

        {

            int[][][] arr1 = new int[1][2][3];

            int[][][] arr2 = new int[1][2][];

            int[][][] arr3 = new int[2][][];

            int[][][] arr4 = new int[][][];

            int[][][] arr5 = new int[][2][3];

            int[][][] arr6 = new int[][][3];

            int[][][] arr7 = new int[][2][];

        }

    }

    Option
    A) line 4, 5, 6, 7
    B) All
    C) No Error
    D) line 4, 7

    Output: A
    

    Explanation : In three dimensional array have first two dimension declaration is compulsory other wise we will get compile time error:illegal startup expression.

    Question 5. What is the output of this question?

    class Test5 {

    public

        static void main(String[] args)

        {

            int arr[] = new int[5];

            System.out.println(arr);

            System.out.println(arr[0]);

        }

    }

    Option
    A) 0
    0
    B)[I@6bc7c054
    0
    C) 0 0 0 0 0
    0
    D) none

    Output: B
    

    Explanation : arr : It is giving the base address of array
    arr[0] : It is giving value of array element at 0th location.

    This article is contributed by Shivakant Jaiswal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

    Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

    1. June 30th, 2012, 08:15 AM


      #1

      giga is offline


      Junior Member


      Default error: array dimension missing x 2. Any help?

      Hi there. I’m getting two errors on this code and it won’t run.

      Is there anything I’m doing wrong?

      I’ve highlighted them with arrows.

      import javax.swing.JOptionPane;
      import javax.swing.JTextArea;
       
      public class StorageApp {
       
      	private StorageAppEntry entry[];
          private int counter;
          private String SName;
          private int notfound = 0;
       
          public static void main(String[] args) {
       
          StorageApp a = new StorageApp();
       ---------->       a.entry = new StorageAppEntry[];
              int option = 0;
              try {
                  while (option != 5) {
       
                  	String content = "Choose an Optionnn"
                              + "[1] Add an Entryn"
                              + "[2] Delete an Entryn"
                              + "[3] Update an Entryn"
                              + "[4] View all Entriesn"
                              + "[5] View Specific Entryn"
                              + "[6] Exit";
       
                              option = Integer.parseInt(JOptionPane.showInputDialog(content));
                      switch (option) {
                          case 1:
                              a.addEntry();
                              break;
                          case 2:
                              a.deleteEntry();
                              break;
                          case 3:
                              a.editEntry();
                              break;
                          case 4:
                              a.viewAll();
                              break;
                          case 5:
                              a.searchEntry();
                              break;
                          case 6:
                              System.exit(1);
                              break;
                          default:
                              JOptionPane.showMessageDialog(null, "Invalid Choice!");
                      }
                 }
              }catch(NumberFormatException e){
                  JOptionPane.showMessageDialog(null, "Please Choose a Number in the displayed Menu");
              }
          }
       
         public void addEntry() {
              entry[counter] = new StorageAppEntry[100];
              entry[counter].setName(JOptionPane.showInputDialog("Enter name: "));
              entry[counter].setUsername(JOptionPane.showInputDialog("Enter username: "));
              entry[counter].setPassword(JOptionPane.showInputDialog("Enter password: "));
              entry[counter].setdescription(JOptionPane.showInputDialog("Enter description: "));
              counter++;
          }
       
          public void viewAll() {
              String addText = "  NAMEtUSERNAMEtPASSWORDtDESCRIPTIONnn";
              int nonNull = 0;
              for (int i = 0; i < entry.length; i++) {
                  if (entry[i] != null) {
                      addText = addText + entry[i].getInfo() + "n";
                      nonNull++;
                  }
                  else if (nonNull == counter) {
                      break;
                  }
              }
              JOptionPane.showMessageDialog(null, new JTextArea(addText));
          }
       
       
       
           public void searchEntry() {
              SName = JOptionPane.showInputDialog("Enter Name to find: ");
              searchMethod();
          }
       
           public void searchMethod() {
              for (int i = 0; i < counter; i++) {
                  if (entry[i].getName().equals(SName)) {
                      JOptionPane.showMessageDialog(null, entry[i].getInfo2());
                      notfound = 0;
                      break;
                  } else {
                      notfound++;
                  }
              }
              if (notfound != 0) {
                  JOptionPane.showMessageDialog(null, "Name Not Found!");
              }
          }
       
           public void editEntry() {
              SName = JOptionPane.showInputDialog("Enter Name to edit: ");
              for (int i = 0; i < counter; i++) {
                  if (entry[i].getName().equals(SName)) {
       ----------->               entry[i] = new StorageAppEntry[];
                      entry[i].setName(JOptionPane.showInputDialog("Enter new name: "));
                      entry[i].setUsername(JOptionPane.showInputDialog("Enter new username: "));
                      entry[i].setDescription(JOptionPane.showInputDialog("Enter new description: "));
                      notfound = 0;
                      break;
                  } else {
                      notfound++;
                  }
              }
              if (notfound != 0) {
                  JOptionPane.showMessageDialog(null, "Name Not Found!");
              }
          }
       
        public void deleteEntry() {
              SName = JOptionPane.showInputDialog("Enter Name to delete: ");
              for (int i = 0; i < counter; i++) {
                  if (entry[i].getName().equals(SName)) {
                      JOptionPane.showMessageDialog(null, "Found!");
                      entry[i] = null;
                      break;
                  }
              }
          }
       
      }


    2. Default Related threads:


    3. June 30th, 2012, 08:44 AM


      #2

      Default Re: error: array dimension missing x 2. Any help?

      I’m getting two errors on this code

      Please copy and paste here the full text of the error messages.

      You need to tell the compiler the size of the array you are trying to create.

      If you don’t understand my answer, don’t ignore it, ask a question.


    4. June 30th, 2012, 08:45 AM


      #3

      giga is offline


      Junior Member


      Default Re: error: array dimension missing x 2. Any help?

      Quote Originally Posted by Norm
      View Post

      Please copy and paste here the full text of the error messages.

      ———————Configuration: StorageApp — JDK version 1.7.0_05 <Default> — <Default>———————
      C:UsersOHDocumentsJCreator ProMyProjectspasswordOHStorageAppsrcStorageAp p.java:14: error: array dimension missing
      a.entry = new StorageAppEntry[];
      ^
      C:UsersOHDocumentsJCreator ProMyProjectspasswordOHStorageAppsrcStorageAp p.java:106: error: array dimension missing
      entry[i] = new StorageAppEntry[];
      ^
      2 errors

      Process completed.


    5. June 30th, 2012, 08:47 AM


      #4

      Default Re: error: array dimension missing x 2. Any help?

      error: array dimension missing

      That seems a very clear message. You need to tell the compiler the size of the array you are trying to create.

      If you don’t understand my answer, don’t ignore it, ask a question.


    6. June 30th, 2012, 08:52 AM


      #5

      giga is offline


      Junior Member


      Default Re: error: array dimension missing x 2. Any help?

      Gotcha.

      I’ve changed both errors to StorageAppEntry[100].

      But since doing that I have 4 errors:

      ———————Configuration: StorageApp — JDK version 1.7.0_05 <Default> — <Default>———————
      C:UsersOHDocumentsJCreator ProMyProjectspasswordOHStorageAppsrcStorageAp p.java:6: error: cannot find symbol
      private StorageAppEntry entry[];
      ^
      symbol: class StorageAppEntry
      location: class StorageApp
      C:UsersOHDocumentsJCreator ProMyProjectspasswordOHStorageAppsrcStorageAp p.java:14: error: cannot find symbol
      a.entry = new StorageAppEntry[100];
      ^
      symbol: class StorageAppEntry
      location: class StorageApp
      C:UsersOHDocumentsJCreator ProMyProjectspasswordOHStorageAppsrcStorageAp p.java:57: error: cannot find symbol
      entry[counter] = new StorageAppEntry[100];
      ^
      symbol: class StorageAppEntry
      location: class StorageApp
      C:UsersOHDocumentsJCreator ProMyProjectspasswordOHStorageAppsrcStorageAp p.java:106: error: cannot find symbol
      entry[i] = new StorageAppEntry[100];
      ^
      symbol: class StorageAppEntry
      location: class StorageApp

      4 errors

      Process completed.


    7. June 30th, 2012, 09:17 AM


      #6

      Default Re: error: array dimension missing x 2. Any help?

      error: cannot find symbol
      private StorageAppEntry entry[];
      ^
      symbol: class StorageAppEntry

      Where is the definition for the class: StorageAppEntry? The compiler can not find the class’s definition.

      If you don’t understand my answer, don’t ignore it, ask a question.


    8. June 30th, 2012, 09:40 AM


      #7

      giga is offline


      Junior Member



    9. June 30th, 2012, 09:50 AM


      #8

      Default Re: error: array dimension missing x 2. Any help?

      I wish I knew where to find that

      Ask the person that wrote the code why that code is there and if it is needed, where to get the definition for the class.

      If you don’t understand my answer, don’t ignore it, ask a question.


                                        I get this error. 
    
    
                                     /*array dimension missing
                                    new ImageIcon [] = getClass().getResource(name[0]),*/
                                                     ^
    

    and I dunno what’s missing. and not sure if anything else is wrong because for now there are 4 erros for

    name[0],name[1],name[3],name[4]
    
    
    
    
        import java.awt.*;
        import java.awt.event.*;
        import javax.swing.*;
        import java.awt.Container;
        import java.io.IOException;
        import java.io.*;
        import java.awt.BorderLayout;
        import java.awt.event.ActionEvent;
        import java.awt.event.ActionListener;
        import javax.swing.ImageIcon;
        import javax.swing.JButton;
        import javax.swing.JFrame;
    
    
    
        public class  exam extends JFrame
        {
    
                    public  static JComboBox imagesJComboBox ;
                    public static JLabel label;
    
                    private String[] name  = {"6.gif", "pikachu.gif", "kissplz.gif" , "mwah.gif"};
                    private ImageIcon[] icons = {
    
    
                                        new ImageIcon [] = getClass().getResource(name[0]),
                                        new ImageIcon [] = getClass().getResource(name[1]),
                                        new ImageIcon [] = getClass().getResource(name[2]),
                                        new  ImageIcon [] = getClass().getResource(name[3])
                                        };
    
    
            public exam()
            {
    
                super ();
                setLayout(new FlowLayout());
    
    
            label = new JLabel(icons);
                imagesJComboBox =  new JComboBox ();
                imagesJcomboBox.setMaximumRowCount(4);
                imagesComboBox.addActionListener (new ActionListener());
                label.addActionListener(new ActionListener());
    
                add (imagesJComboBox);
                label = new JLabel (icons.index[0]);
                add (label);
    
            }
    
        public void itemStateChange (ActionEvent e)
        {
    
        if (e.getStateChange () == ActionEvent.SELECTED)
            label.setIcon(icons( imagesJComboBox.getSelectedIndexes()));
    
        }
    
            public static void main(String [] args)
                { exam x = new exam();}
    
    
        }
    

    Понравилась статья? Поделить с друзьями:

    Читайте также:

  • Error bad signature 0x00000000 fatal index file corrupt git
  • Error array bound is not an integer constant before token
  • Error arguments invalid visual
  • Error argument expected one argument
  • Error area 913 что это

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии