к оглавлению   к 4GL - визуальному программированию

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

Ошибка J0001

INTERNAL COMPILER ERROR

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

Ошибка J0002

Out of memory

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

Ошибка J0004

Cannot open class file 'filename' for reading

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

Ошибка J0005

Cannot open class file 'filename' for writing

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

Ошибка J0006

Cannot read class file 'filename'

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

Ошибка J0007

Cannot write class file 'filename'

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

Ошибка J0010

Syntax error

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

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

public class Simple {

public void method1() {

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

Ошибка J0011

Expected':'

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

public class Simple {

private int i;

private static int x = 1;

public void method1(int argl) {

switch (argl) {

case 1 // ошибка: после 'case 1' отсутствует ':' }

i = ( argl < x) ? argl x; // ошибка: после 'argT отсутствует ':' } }

Ошибка J0012

Expected';'

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

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

public class Simple {

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

public void method1(int argl) {

for (int i=1; i < x i++) {

// ошибка: перед 'i++' пропущена ';' } } }

Ошибка J0013

Expected'('

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

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

public class Simple {

private int i;

public void method1(int argl, int arg2) {

if argl < arg2) // ошибка: пропущена '('

i = argl; else

i = arg2;

} }

Ошибка J0014

Expected')'

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

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

public class Simple { private int i;

public void method1(int arg1, int arg2) {

i = (arg1 < arg2 ? arg1 : arg2; // ошибка: пропущена ')' } }

Ошибка J0015

Expected']'

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

public class Simple {

private int x[ = new int[500];

// ошибка: пропущена ']' }

Ошибка J0016

Expected '{ '

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

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

public class Simple // ошибка: пропущена ''{'

public void method1() {

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

Ошибка J0017

Expected'}'

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

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

public class Simple { {

int x,y;

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

Ошибка J0018

Expected 'while'

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

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

public class Simple{

public void method1(){ do{

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

// ошибка: отсутствует оператор 'while' }

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

public class Simple{

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

System.out.println(x); x-;

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

public static void main(String args[]){Simple.method1();} }

Ошибка J0019

Expected identifier

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

public class Simple {

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

}

Ошибка J0020

Expected 'class' or 'interface'

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

public Simple{ // ошибка: отсутствует ключевое слово 'class'

// тело класса }

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

public class Simple {

// тело класса

}} // ошибка: лишняя закрывающая скобка '}'

Ошибка J0021

Expected type specifier

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

public class Simple {

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

}

Ошибка J0022

Expected end of file

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

Ошибка J0023

Expected 'catch' or 'finally'

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

public class Sifple { public void method1(){ try {

// ... }

} // ошибка: отсутствует оператор 'catch' или 'finally'

}

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

public class Simple{

public void method1(){ try{

// генерация исключений

}

catch(Exception e){

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

с помощью объекта 'Exception'. */ } }

}

Ошибка J0024

Expected method body

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

public void methodl();

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

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

}

Ошибка J0025

Expected statement

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

public class Simple {

void method1(int argl) {

if (arg1==1)

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

Ошибка J0026

Expected Unicode escape sequence

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

public class Simple {

int i = \\u0032;

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

}

Ошибка J0027

Identifier too long

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

Ошибка J0028

Invalid number

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

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

public class Simple .{

long i = 12345678901234567890;

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

}

Ошибка J0029

Invalid character

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

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

public class Simple {

private int с#;

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

}

Ошибка J0030

Invalid character constant

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

public class Simple {

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

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

// типа char }

Ошибка J0031

Invalid escape character

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

public class Simple {

int i = \u032;

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

int x = \u0032;

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

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

public class Simple{

public String str = "C:\Windows\Desktop";

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

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

}

Ошибка J0032

Unterminated string constant

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

public class Simple {

String str = "Hello;

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

}

Ошибка J0033

Unterminated comment

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

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

public class Simple {

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

* не содержит

* закрывающей скобки

}

Ошибка J0035

Initializer block cannot have modifiers except 'static'

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

public class Simple {

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

// тело класса

} }

Ошибка J0036

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;

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

}

Ошибка J0037

A method cannot be 'transient' or 'volatile'

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

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

public class Simple{

transient void Method1(){};

volatile void Method2(){};

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

}

Ошибка J0038

'final' member 'Identifier' must be Initialized when declared in an interlace

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

interface ISimple {

final int COOL_RAD;

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

}

Ошибка J0040

Cannot define a method body for abstract/native methods

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

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

public abstract class Simple{

abstract void method1(){ // тело метода

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

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

public interface Simple {

public-void method1() {

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

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

// реализующем интерфейс 'Simple' } }

Ошибка J0041

Duplicate modifier

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

public class Simple {

public public void methodic) { // ошибка: модификатор 'public'

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

} }

Ошибка J0042

Only classes can Implement interfaces

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

public interface Simple implements color{

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

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

}

interface color {

// ... }

interface pattern extends color{

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

}

Ошибка J0043

Redeclaration of member 'identifier'

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

public class Simple {

private int i;

public void method1(){ // тело метода

}

...

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

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

public void method1(){

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

Ошибка J0044

Cannot find definition for class 'Identifier'

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

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

class NotSimple{

// тело класса }

public class Simple {

NotSimple smp = new NotSmple();

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

}

Ошибка J0045

'identifier' Is not a class name

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

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

package non.existent;

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

невозможен*/

public class Simple {

// тело класса }

Ошибка J0046

'identifier' is not an interface name

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

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

_clasa _Simple2 {

// тело класса

}

public class Simple implements Simple2 {

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

}

Ошибка J0048

Cannot extend final class 'Identifier'

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

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

final class Simple2 {

// тело класса

}

public class Simple extends Simple2 {

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

}

Ошибка J0049

Undefined name 'identifer'

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

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

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

public class Simple {

public int method1(){ return novar1;

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

}

public void method2(){

NotSimple nt = new NotSimple();

np.methodx(); .

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

}

class NotSimple

{

public vbid methodx(){

// тело метода } }

Ошибка J0051

Undefined package 'identifier'

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

import Java.lang.bogus. *;

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

public class Simple {

// тело класса

}

Ошибка J0053

Ambiguous name: 'identifier' and 'identifier'

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

Ошибка J0056

Missing return type specification

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

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

public class Simple {

public method1() { // ошибка: не указан тип возвращаемого значения

// тело метода } }

Ошибка J0057

Class file 'identifier' should not contain class 'identifier'

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

Ошибка J0058

Cannot have a variable of type 'void'

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

public interface Simple {

public final static void i = 1;

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

}

Ошибка J0059

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(); // корректный вызов метода класса } }

Ошибка J0060

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' }

Ошибка J0061

The members 'identifier' and 'identifier' differ in return type only

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

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

public class Simple extends Simple2 {

public void method1() {

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

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

}

class Simple2 {

public int method1 () {

return 1; } }

Ошибка J0062

Attempt to reduce access level of member 'identifier'

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

public class Simple{

public void method1(){

// тело метода }

}

class Simple2 extends Simple{

private void method1(){

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

} }

Ошибка J0063

Declare the class abstract, or implement abstract member 'Identifier'

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

interface ITest{

public abstract void method1(); }

public class Simple implements ITest{

// ...

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

Ошибка J0065

Cannot assign to this expression

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

public class Simple {

public void method1() {

int x = 0; int у = 1;

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

// присваивания недопустим } }

Ошибка J0066

'this' can only be used in non-static methods

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

public class Simple {

int x;

public static void method1() {

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

// ссылку 'this' } }

Ошибка J0067

Cannot convert 'type' to 'type'

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

public class Simple {

public void method1() {

int i = 10;

if (i-) {..

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

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

}

} }

Ошибка J0068

Cannot implicitly convert 'type' to 'type'

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

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

public class Simple {

int i = 10;

public void methodi() {

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

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

} }

Ошибка J0069

Cannot apply'.' operator to an operand of type 'identifier'

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

public class Simple {

int i = 123;

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

}

Ошибка J0072

'identifier' is not a member of class 'identifier"

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

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

public class Simple {

public static void main(String args[]) {

System.out.printline("Hello");

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

Ошибка J0074

Operator cannot be applied to 'identifier1 and 'identifier' values

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

public class Simple {

public void method1() {

String s1 = "one"; String s2 = "two"; String result;

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

Ошибка J0075

Invalid call

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

class Simple {

int x = 1();

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

Ошибка J0076

Too many arguments for method 'identifier'

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

public class Simple {

public void method1(int argl) {

// тело метода }

public void method2() {

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

}

}

Ошибка J0077

Not enough arguments for method 'identifier1

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

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

public class Simple {

public void method1(int argl) {

// тело метода

}

public void method2() {

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

Ошибка J0078

Class 'Identifier' doesn't have a method that matches 'identifier'

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

public class Simple {

public void method1! () {

// тело метода }

public void method1(int argl) {

// тело метода } }

class Simple2 {

public void method1() {

Simple s = new Simple();

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

Ошибка J0079

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();

method1(s2, s2);

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

}

}

class Simple2 extends Simple3 {

// тело класса

}

class Simple3

{

// тело класса

}

Ошибка J0080

Value for argument 'identifier' cannot tie converted from 'identifier' in call to 'identifier1

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

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

public class Simple {

public void method1(int argl) {

// тело метода }

public void method2() {

float f = 1.0f;

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

}

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

public class Simple{

public void method1(int arg1){

// тело метода }

public void method2(){

float f = 1.0f;

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

} }

Ошибка J0081

Value for argument 'identifier' cannot be converted from 'identifier' in call to 'identifier'

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

Ошибка J0082

Class 'identifier' doesn't have a constructor that matches 'identifier'

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

public class Simple {

Simple(int argl) { // ...

}

public static void main (String args[]) {

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

} }

Ошибка J0083

'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, для вызова метода базового класса:

class NotSimple{

public class methodl(){ // ...

} }

public class Simple{

public method2(){

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

} }

Ошибка J0084

Cannot return a value from a 'void' method

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

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

public class Simple {

public void methodl() {

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

Ошибка J0085

Expected return value of type 'identifier'

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

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

public class Simple {

public int method1() {

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

} }

Ошибка J0086

'[]' cannot tie applied to a value of type 'identifier'

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

public class Simple {

public void method1() { int i = 0; int j, x;

{

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

Ошибка J0087

'goto' statement is not currently supported by Java

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

Ошибка J0089

The case 'Identifier' has already been defined in switch statement

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

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

public class Simple {

public int method1(int argl) {

switch (argl) {, case 1:

return (int) 1; case 2:

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

return (int) 3; default:

return (int) 0; } } }

Ошибка J0090

'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: // ошибка: повтор предыдущего условия

return (int) 0; } } }

Ошибка J0091

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

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

public class Simple {

public int method1() {

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

return 1; } }

Ошибка J0092

Constant expression expected

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

public class Simple{ int var1 = 10;

int var2 = 20;

public void method1(){

switch(var1){ case var2:

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

} } }

Ошибка J0093

'break' only allowed In loops and switch statements

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

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

public class Simple{

public void method1(){

if (true) break;

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

// или операторе 'switch'

} }

Ошибка J0094

Label 'identifier' not found

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

public class Simple{

public int method1(){ int y;

for (int x = 0; x < 10; x++){ у = х *2; if (x == 5)

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

}

return у; } }

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

public class Simple{

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

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

return у;

for (x=1; x < 10; x++){ у = x, * arg1;

if (y <= arg1){ У = -1; break test; } }

return y; } }

Ошибка J0095

'continue' only allowed in loop

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

public class Simple{

public void method1(int arg1){

if (argl ==1) continue;

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

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

} }

Ошибка J0096

Class value expected

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

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

public class Simple {

public void method1() {

int i;

synchronized (i){

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

// ...

} } }

Ошибка J0097

'Instanceof' operator expected class or array

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

public class Simple {

public void methpd1() {

Simple2 obj = hew Simple2();

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

// ... } }

class Simple2 {

// ... }

Ошибка J0098

Attempt to access non-existent member of 'identifier'

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

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

public class Simple {

public void method1() {

String j[] = new String[10];

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

String str = j,toUpperCase();

// ошибка: отсутствуют скобки '[]' } }

Ошибка J0100

Cannot throw 'identifier' - the type does not inherit from 'Throwable'

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

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

class BogusException{

// тело класса }

public class Simple{

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

throw new BogusException();

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

Ошибка J0101

The type 'identifier' does not inherit from 'Throw/able'

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

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

public class Simple {

public void method1() {

try {

// ... } catch (String s) {

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

// классом класса 'Throwable'

} } }

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

public class Simple{

public void method1(int arg1){

try{

// ...

if (arg1 == 0)

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

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

} catch(myException c){

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

// корректного объекта

} } }

class myException extends Throwable{

// тело класса }

Ошибка J0102

Handler for 'identifier1 hidden by earlier handler for 'identifier'

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

class Simple {

static {

try

{

}

catch (Exception e)

{

}

catch (ArithmeticException e)

{

}

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

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

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

} }

Ошибка J0103

Cannot override final method 'identifier'

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

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

public class Simple extends Simple2 {

public void method1() {

// ошибка: в базовом классе 'method1' объявлен как 'final' } }

class Simple2 {

public final void method1() {

// тело метода

} }

Ошибка J0104

Unreachable statement or declaration

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

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

class Simple {

public int method1(int arg1){

for (int у = 10; у < 10;у++)

{ break;

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

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

// ...

return arg1; int x = arg1 /2;

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

выполнена */ } }

Ошибка J0105

Method 'identifier' must return a value

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

public class Simple {

public int, method1(int argl) {

if (argl==0)

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

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

}

Ошибка J0106

Class 'Identifier' has a circular dependency

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

public class Simple extends Simple2 {

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

}

class Simple2 extends Simple {

// расширение класса 'Simple'

}

Ошибка J0107

Missing array dimension

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

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

public class Simple {

public void method1() {

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

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

} }

Ошибка J0108

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' недопустимо

} }

Ошибка J0109

Cannot 'new' an instance of abstract class 'identifier'

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

abstract class Simple2 {

// тело класса }

public class Simple {

public void method1() {

Simple2 s20bject = new Simple2();

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

} }

Ошибка J0110

Cannot 'new' an interface 'identifier'

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

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

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

interface Simple2 {

// тело интерфейса }

public class Simple {

public void method1() {

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

}

}

Ошибка J0111

Invalid use of array initializer

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

public class Simple{

public void method1(){

int[]i = {{1,2,3}, {4.5,6}};

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

} }

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

public class Simple{

public void method1(){

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

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

} }

Ошибка J0112

Cannot assign final variable 'identifier'

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

public class Simple {

private final int i = 3;

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

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

} }

Ошибка J0113

Call to constructor must be first statement in constructor

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

public class Simple {

int i, j; Simple () {

i = 0; }

Simple(int argl) {

j = argl;

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

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

} }

Ошибка J0114

Cannot reference 'this' in constructor call

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

class SuperSimple {

SuperSimple(){}

SuperSimple(Object о) { } }

public class Simple extends SuperSimple { int x;

public Simple() {

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

super(this);

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

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

this.method1(); // корректно

} public Simple(int arg1){

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

public void method1(){} }

Ошибка J0115

Cannot call constructor recursively (directly or indirectly)

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

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

public class Simple {

Simple (int argl) {

this(1);

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

} }

Ошибка J0116

Variable 'Identifier' may be used before initialization

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

public class Simple {

static {

int i;

int j = i;

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

} }

Ошибка J0117

Cannot declare an interface or outer class to be 'private'

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

private class Simple {

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

}

Ошибка J0120

Divide or mod by zero

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

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

public class Simple {

final int x = 0;

int у = 1 % x;

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

}

}

Ошибка J0121

Unable to recover from previous error(s)

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

Ошибка J0122

Exception 'identifier1 not caught or declared by 'identifier'

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

class SimpleException extends Exception {

// тело класса }

class Simple {

void method1() throws SimpleException { }

void method2() { method1(); }

// ошибка: метод 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{

// тело метода

}

void method2(){

try{

methodi();

} catch(SimpleException e){

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

Ошибка J0123

Multiple inheritance of classes Is not supported

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

public class Simple extends BaseClass1, BaseClass2 {

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

class BaseClassI {

// тело класса }

class BaseClass2 {

// тело класса }

Ошибка J0124

Operator cannot be applied to 'identifier' values

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

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

public class Simple {

void method1 (boolean b) {

b++;

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

} }

Ошибка J0125

'finally' block used without 'try' statement

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

public class Simple {

public void method1() { finally {

// ошибка: отсутствует оператор 'try' } } }

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

public class Simple{

public int method1(int arg1){ try{

arg1/10; } catch(Exception e){

// код обработки исключений должен располагаться до блока 'finally' } finally{

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

} } }

Ошибка J0126

'catch' block used without 'try' statement

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

public class Simple { public void method1() {

catch {

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

}

} }

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

public class Simple {

public void method1() { try{

// ... } catch (Exception e){

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

} }

}

Ошибка J0127

'else' keyword used without 'if statement

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

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

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

public class Simple {

public void method1(int argl) {

if (argl == 0){

// ...

else{}

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

// блока 'if

} } }

Ошибка J0128

Cannot declare an interface to be 'final'

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

final interface Simple {

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

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

}

Ошибка J0129

Cannot declare a class to be 'identifier1 and 'identifier'

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

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

public abstract final class Simple {

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

}

Ошибка J0130

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

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

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

interface Simple {

public final void method1();

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

Ошибка J0131

Cannot declare a method to tie 'identifier' and 'identifier'

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

public class Simple {

public private void method1() {

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

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

}

}

Ошибка J0132

Cannot declare a field to be 'identifier' and 'identifier'

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

Dublic class Simple {

public private int i;

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

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

}

Ошибка J0133

Constructors cannot be declared 'native', 'abstract', 'static', 'synchronized', or 'final'

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

public class Simple {

final Simple() {}

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

// модификатор 'final'

}

Ошибка J0134

Interfaces cannot have constructors

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

interface Simple {

Simple();

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

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

}

Ошибка J0135

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

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

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

interface Simple {

volatile int i = 1;

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

}

Ошибка J0136

Public class 'Identifier' should not be defined in 'identifier'

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

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

public class Simple {

// тело класса } public class Errorclass {

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

}

Ошибка J0138

Interface cannot have static or instance initializer

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

interface Simple {

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

{

// ошибка: инициализация

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

} }

Ошибка J0139

Invalid label

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

public class Simple {

public int method1(int argl) { 123:

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

} }

Ошибка J0140

Cannot override static method 'identifier' with non-static method 'identifier'

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

public class Simple {

static void method1() {} }

class SimpleSubclass extends Simple {

void method1() {}

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

}

Ошибка J0141

Argument cannot have type 'void'

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

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

public class Simple {

public void method1(void i) {

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

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

} }

Ошибка J0142

Cannot make static call to abstract method 'Identifier'

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

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

public abstract class Simple {

abstract int method1(); }

class SimpleSubclass extends Simple { int method1() {

return super.method1();

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

} }

Ошибка J0143

Cannot throw exception 'identifier' from static initializer

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

public class Simple {

static {

ThrowCLass TClass = new ThrowClass();

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

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

class ThrowClass {

ThrowClassO throws Exception{}

}

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

public class Simple{

static ThrowClass thr; static{ try{

ThrowClass thr = new ThrowClass();

} catch (Exception e){

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

// 'ThrowClass'

} } }

class ThrowClass {

ThrowClass() throws Exception(){

// ...

} }

Ошибка J0144

Cannot find definition for interface 'identifier1

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

public class Simple implements Bogus {

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

}

Ошибка J0145

Output directory or file too long: 'identifier'

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

Ошибка J0146

Cannot create output directory 'identifier"

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

Ошибка J0147

Cannot access private member 'Identifier' in class Identifier' from class 'identifier'

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

class AccessClass {

private int i = 0; }

public class Simple {

public void methodi() {

AccessClass ac = new AccessClass();

ac.i = 1;

// ошибка: переменная 'i' недоступна } }

Ошибка J0148

Cannot reference instance method 'identifier' before superclass constructor has been called1

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

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

abstract class Simple {

Simple(int i) {} int method1() {

return 0; } }

class SimpleSubclass extends Simple

{ SimpleSubclass() {

super(method1());

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

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

class SimpleSubclass extends Simple{

SimpleSubclass(){

super.method1(); } }

Ошибка J0150

Cannot have repeated interface 'identifier'

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

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

interface Simplel {

// ... }

class Simple implements Simplel,IColor,IFont, Simplel {

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

}

Ошибка J0151

Variable 'identifier' is already defined in this method

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

public class Simple {

public void method1() {

int i = 1;

int j = i;

// ...

int i = 0;

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

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

}

}

Ошибка J0152

Ambiguous reference to 'Identifier' in interfaces 'Identifier' and 'identifier"

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

interface Interface1 {

final int i = 0; }

interface Int-erface2 {

final int i = 1; }

public class Simple implements Interface1, Interface2 {

int method1() {

return i;

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

// использовать

} }

Ошибка J0158

Class 'identifier' already defined

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

public class Simple {

// тело класса }

class Simple {

// ошибка: класс 'Simple' уже объявлен }

Ошибка J0159

' @' must be followed by the response filename

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

Ошибка J0160

Response file 'identifier' could not be opened

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

Ошибка J0161

Cannot open source file: 'identifier'

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

Ошибка J0162

Failed to initialize compiler

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

Ошибка J0163

Array 'identifier' missing array index

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

public class Simple {

int J[] = {1, 2, 3};

void method1() {

j[] = 0;

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

} }

Ошибка J0164

Ambiguous import of class 'identifier" from more than one package

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

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

import Carton.Test;

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

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

// использовать

public class Simple{

// тело класса }

Ошибка J0165

Cannot throw exception 'identifier' from method 'identifier' - it is not a subclass of any exceptions thrown from overridden method 'identifier1

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

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

class ExceptionA extends Exception {

// ... }

class Exceptions extends Exception {

// ... }

class AnotherClass {

public void method1() throws ExceptionA {

// ... } }

public class Simple extends AnotherClass {

public void method1() throws ExceptionA, Exceptions {

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

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

}

Ошибка J0166

Cannot access member 'identifier' in class 'identifier' from 'identifier' - it is in a different package

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

Ошибка J0167

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'

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

} }

Ошибка J0168

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

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

public class Simple {

abstract void method1();

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

// абстрактном классе }

Ошибка J0169

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();

// ... } class TapeRoll{

// тело класса }

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

import Box.TapeRoll;

public class Simple{

public static void main(String args[]){

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

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

// невозможен } }

Ошибка J0170

Cannot load predefined class 'Identifier'

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

Ошибка J0173

Found class 'identifier' in package 'identifier' rather than package 'identifier'

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

Ошибка J0175

Cannot invoke method on 'null' literal

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

public class Simple{

public String methdo1(){

// ...

return null.toString();

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

}

}

Ошибка J0176

Duplicate label 'Identifier' nested inside another label with same name

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

public class Simple{ void method1(){ outsideLopp: for (int i=0;i<10;i++) {

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

for (int x=0;x<10;x++) {

break outsideLoop; }

break outsideLoop; } } }

Ошибка J0189

'return' not allowed in a static initializer or instance initializer

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

public class Simple{

static int varl;

static{ varl = 0; return;

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

// недопустим

} }

Ошибка J0191

Expected '.c/ass'

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

public class Simple{

public static void main (String args[]){

Class x = int;

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

} }

Ошибка J0192

'.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, и повторите компиляцию.

Ошибка J0193

Cannot have an array of type 'void'

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

public class Simple{

void МуАrrау{}; // ошибка: массивы типа 'void' не поддерживаются

Ошибка J0194

Class or interface cannot be declared 'volatile', 'native', transient', or 'synchronized'

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

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

public class Simple{ // Do something here volatile class InnerClass{

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

как 'volatile' */ } }

Ошибка J0195

Cannot declare 'identifier' as 'static' in Inner class 'identifier'

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

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

public class Simple{

// ...

class InnerClass{

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

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

} }

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

public class Simple{

// ...

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

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

// как статический } }

Ошибка J0196

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

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

public class Simple{

// ...

class InnerClass{ // ...

class Simple{

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

// объемлющего класса

} } }

Ошибка J0197

Cannot declare interface in inner class 'identifier'

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

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

public class Simple{

// .

class InnerClass{ // ...

interface Mylnterface{

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

не разрешено */ } }

}

Ошибка J0198

An enclosing instance of type 'identifier' is required

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

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

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

// ошибки

public class Simple{ int x = 10;

static class InnerClass{ public void method1(){

int у = x;

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

} } }

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

// ошибки class A{

int x; } class B{

// ...

class InnerClass{ void method1(){ int у = A.this.x;

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

<имяКласса.this.переменная> в этой ситуации недопустим.*/

} } }

Ошибка J0199

Call of 'thls()' cannot be qualified

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

public class Simple{ int x;

Simple(int x){ this.x = x; }

class InnerClass{ InnerClass(){

Simple.this(10);

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

} } }

Ошибка J0200

'this' must be qualified with a class name

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

public class Slmple{ int x;

class InnerClass{ void method1(){ int j = x.this;

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

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

} } }

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

public class Simple{ int x; int method2(int arg1){

return argl * ;

} class InnerClass{

void method1(){

int j = Simple.this.x;

// корректное обращение

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

Ошибка J0201

'super' cannot be qualified except as a superclass constructor call

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

class Simple{

int x; }

class NotSimple extends Simple{ NotSimple(Simple smp)

{ smp.super.x = 100;

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

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

} }

Ошибка J0202

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

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

class Simple{

// тело класса }

class NotSimple extends Simple {

NotSimple(Simple smp){ smp.super();

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

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

class Simple{

//...

class InnerClass{ int var1, var2;

} }

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

{ smp.super(); // корректное обращение

} }

Ошибка J0203

Cannot access protected member 'identifier' in class 'identifier" from class 'identifier1

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

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

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

public class PublicClass{ protected void methodt(){

//....

}

}

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

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

PublicClass pub = new PublicClass();

pub.method1();

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

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

Ошибка J0204

Cannot access protected member 'identifier' in class 'identifier1 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;

public class Simple extends Point{ public void method1 (Point p){

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

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

Ошибка J0205

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

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

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

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

public class Simple{

void method1(int var1){ class InnerClass{ boolean getVar1(){ return(var1 == 1);

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

} }

} }

Ошибка J0206

Cannot assign a second value to blank final variable 'identifier'

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

public class Simple{ final int varl;

{

varl = 10;

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

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

Ошибка J0207

Cannot assign blank final variable 'identifier' in a loop

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

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

public class Simple{ final int x;

public Simple(){

for (int z=0;z<10;z++){

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

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

} } }

Ошибка J0208

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; // корректная форма }

Ошибка J0209

Expected '='

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

/**@com.interface(iid 31415926-5358-

9793-2384-612345678901)*/

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

// ... }

Ошибка J0210

Expected'.'

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

/**@com class*/

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

public class Simple{

// ... }

Ошибка J0214

Invalid GUID specified

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

Ошибка J0215

Syntax error in ©com declaration

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

/** @com.inteface (iid=31415926-5358-

9793-2384-61234.5678910)

// ошибка: в слове 'interface' - грамматическая ошибка, interface ITest{

//... }

Ошибка J0216

@com attribute 'identifier' on 'identifier' is illegal in this context

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

Ошибка J0217

@com attribute 'identifier1 was not specified for 'identifier" but is required in this context

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

/***@coin.class(X */

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

public class Simple{

//... }

Ошибка J0218

@com attribute 'Identifier' on 'identifier" has an invalid value

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

/** ecom.class(classid=911CAEDO-2957-11d1-A55E-OOAOC90F26EE) */

class Simple!

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

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

native void method1(Object i); }

Ошибка J0219

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

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

interface Simple{

/**@com.method(dispid=777); */

public void method1();

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

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

*/ }

Ошибка J0220

An @com attribute cannot be placed on static member 'identifier'

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

/*@com.class(classid=31415926-5358-

9793-2384-612345678910)

public class Simple{

/**@com. method(dispid=777);*/

static void method1(){}

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

Ошибка J0221

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

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

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

/**@com.method(dispid=777)*/

public native void method1();

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

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

Ошибка J0222

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

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

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

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

Ошибка J0220

An @com attribute cannot be placed on static member 'identifier1

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

/*@com.class(classid=31415926-5358-

9793-2384-612345678910)

public class Simple{

/**@com.method(dispid=777);*/

static void method1(){}

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

Ошибка J0221

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

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

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

/**@com.method(dispid=777)*/

public native void method1();

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

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

Ошибка J0222

@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{

/** @com.method(dispid=306); */

public void method1(){}

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

или с модификатором 'native' */ }

Ошибка J0223

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

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

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

/**@>com.interface(iid=31415926-5358-

9793-2384-612345678910)*/

interface Itest{

/** @com.method(dispid=306);

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

*/

public void method1(boolean varl, int var2);

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

Ошибка J0224

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

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

/** @com.class(classid=911CAEDO-2957-11d1-A55E-00A0C90F26EE) */

class Simple{

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

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

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

native int method1(0bject i); }

Ошибка J0225

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

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

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

/**ecom.interface(iid=31415926-

5358-9793-2384-612345678901,dual)*/

interface Itest{

/**@com.struct()*/

public int methodK);

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

Ошибка J0226

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

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

/**§com.interface(iid=31415926-

5358-9793-2384-61234'5678901,dual) */

interface Itest{

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

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

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

Ошибка J0227

// Is impossible (or an expression of type 'identifier' to be an instance of 'identifier"

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

class Simple1{

// тело класса

}

}

class Simple2{

// тело класса }

class CompClasses{

Simplel x = new Simple1();

public static void main(String args[]){

if(smp.x instanceof Simple2){

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

'instanceof */ } }

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

class Simplel extends Simple2{

// тело класса }

class Simple2{

// тело класса }

class CompClasses{

Simplel x = new Simple1();

public static void main(String args[]){

if(smp.x instanceof Simple2){

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

} }

Ошибка J0228

Syntax error in @dll declaration

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

public class Simple{

/**@dll.import(kernel32, ansi)*/

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

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

Ошибка J0229

Expected string constant

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

/**@com.interface(iid=31415926-

5358-9793-2384-612345678901,dual)*/

interface ITest{

/**@com.method(name=method1);*/

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

public void method1(); }

Ошибка J0230

Class or interface name 'identifier' conflicts with import 'identifier'

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

import Java.lang.Cloneable;

class Cloneable{ /*ошибка: класс Cloneable уже импортирован */

// реализация класса }

Ошибка J0231

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; /* операторы сравнения допустимы только в теле управляющих операторов */

Ошибка J0232

Expected '{' or';'

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

interface ISimple{

public void method1()

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

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

public class Simple{

public void method1 ()

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

}

Ошибка J0233

Catch clause Is unreachable; exception 'identifier1 is never thrown in the corresponding try block

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

class Simple{

void method1(){

int I=0;

try{

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

}

catch (CloneNotSupportedException c){

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

} } }

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

class Simple{

void method1(){ int I=0; try{

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

catch (Exception e){

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

} } }

Ошибка J0234

'identltier1 is not a field in class 'identifier'

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

public class Simple{ int varl; public Simple(){ this.var = 10;

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

Ошибка J0235

'identifier" is not a method in class 'identifier"

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

class Simple}

public void method1(){ // тело метода

} }

class Simple2{

public void method1(){

Simple smp = new Simple();

smp.method2();

// ошибка: в классе 'Simple' нет метода 'method2' } }

Ошибка J0236

'identifier' is not a nested class or interface in class 'identifier'

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

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

class NotSimple{

}

public class Simple{ void methodic){

NotSimple nt = new NotSimple();

Object о = nt.new InnerClass();

// ошибка: в классе 'NotSimple'нет вложенного класса 'InnerClass' } }

Ошибка J0237

'identifier' is not a field or nested class in class 'identifier'

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

class Simple1{

int var1; }

class Simple2{

static class InnerClass{ int varl;

}

static Simple1 smp; }

public class Simple{

void mettiod1(){ int x, y;

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

'InnerClass', а не 'innerclass' */

у = Simple2.smt.var1;

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

'Simple2' - 'smp', а не 'smt' */ } }

Ошибка J0238

Cannot throw exception 'identifier' from field initializer

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

public class Simple{ public int i;

public Simple(boolean varl) throws

Exception{ if (var1 = true)

i = 0; else

throw new Exception(); } }

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

Simple smp = new Simple(true);

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

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

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

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

class Simple2{ Simple smp; public Simple2(){ try{

smp = new Simple(true);} catch(Exception e){} } }

Ошибка J0239

Static initializer must assign a value to blank final variable 'identifier'

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

public class Sirnpie{

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

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

Ошибка J0240

Syntax error fn @security declaration

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

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

public class Simple{

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

Ошибка J0241

'@ security' can only be specified on a class or interface

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

public class Simple{

/**esecurity(checkDllCalls=on)*/

public void method1(){

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

} }

Ошибка J0242

Cannot make static call to non-static method 'identifier'

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

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

public class Simple{

public void method1(){ // тело метода

} }

class NotSimple{

public void methodx(){ Simple.method1();

// ошибка: 'method1' не является статическим }

Ошибка J0243

'identifier' is obsolete; use 'Identifier' instead

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

public class Simple{

/**@>dllimport("kernel32", ansi)*/

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

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

Ошибка J0244

©conditional allowed only on void-returning methods

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

public class Simple{

/**@conditional(DEBUG)*/

public int method1(int x){

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

return x * 2;

} }

Ошибка J0245

Warning treated as error

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

Ошибка J0246

Invalid token оn а# directive

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

public class Simple{

public void method1(){

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

System, out. println("Метод method1"); Sendif } }

Ошибка J0247

#elif without matching #if

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

public class Simple{

public void method1(){

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

System, out. print In ("Метод method1"); #endif } }

Ошибка J0248

#entiif without matching #if

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

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

public class Simple{

public'void methodi(){ // «if SIMPLE

// ...

#if DEBUG

// ... { #if WIN95

// ... #endif #endif

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

Ошибка J0249

#else without matching iif

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

public class Simple{

public void method1(){ // ...

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

} }

Ошибка J0250

Already had an ielse

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

public class Simple{ #lf A

#if В

void method1 {

// тело метода

} #else

void method2{

// тело метода

#else // ошибка: лишняя директива '#else' #endif }

Ошибка J0251

Unexpected EOF while looking for #endlf

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

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

public class Simple{

void methodi(){

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

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

}

Ошибка J0252

#if nested too deeply

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

Ошибка J0253

Cannot have #define/#undef after source

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

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

package boxes;

#define DEBUG

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

public class Simple{ },

Ошибка J0254

Cannot change predefined symbol

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

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

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

public class Simple{ //...

}

Ошибка J0255

Expected tendif

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

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

#define DEBUG

public class Simple{ void methodi(){

#if DEBUG

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

} }

Ошибка J0256

Expected 'class', 'interface', or 'delegate'

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

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

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

public Simple{ // ошибка: отсутствует ключевое слово'сlass'

// ... }

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

public class Simple {

// ... }} // ошибка: лишняя закрывающая скобка '}'

Ошибка J0257

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{

//...

return varl;

}

public static void main (String args[])

{ Simple smp = new Simple();

MyDelegate md = new MyDelegate(smp.method1);

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

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

Ошибка J0258

' Cannot declare delegate in inner class 'identifier'

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

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

public class Simple{ // ...

class InnerClass{ // ...

delegate int MyDelegate (int vart, String var2);

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

классе невозможно */ } }

Ошибка J0259

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);

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

}

Ошибка J0260

Cannot declare an Interface method to be 'protected" or 'private'

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

interface ISimple{

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

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

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

защищенным */

private void method4();

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

закрытым */ }

Ошибка J0261

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

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

public class Simple{

class InnerClass{

// тело класса

}

public static void main(String args[])

{ InnerClass inc = new InnerClass();

/*ошибка: для создания экземпляра вложенного класса необходим

существующий экземпляр объемлющего класса */ } }

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

public class Simple{

class InnerClass{

// тело класса

}

public static void main(String args[])

{ Simple smp = new Simple();

/* создание экземпляра вложенного класса с помощью

экземпляра объемлющего класса 'Simple' */

InnerClass inc = smp.new InnerClass(); } }

Ошибка J0262

An explicit enclosing instance of class 'identifier' is needed to call constructor of superclass 'identifier'

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

class OuterClass{

class InnerClass{

// тело класса

} }

public class Simple extends OuterClass.InnerClass{

// тело класса }

/*ошибка: нельзя создать экземпляр надкласса 'InnerClass' без создания экземпляра объемлющего его класса 'OuterClass' */

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

class OuterClass{

class InnerClass{

// тело класса

} }

public class Simple extends OuterClass.InnerClass{ Simple(){

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

new OuterClass().super();

} }

Ошибка J0264

Array cannot have a dimension

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

public class Simple{

public void method1(){

String[3] varl; /* ошибка: нельзя указывать размерность

массива до его создания */

String[] var2 = new String[3];

// корректная форма

boolean var3 = new boolean[3]{true,false,true};

/*ошибка: при инициализации массива с помощью списка

значений элементов его размерность не указывается */

boolean var4 = new boolean[]{true, false,true}; // корректная форма

} }

Ошибка J0265

@dll attribute cannot be placed on method 'identifier' - it must be declared 'native'

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

public class Simple{

/** @dll.import("USER32") */

//

private native static int MessageBox(int hwndOwner, String text,

String title, int fuStyle);

/*ошибка: тэг @dll предназначался для закомментированного метода,

а к методу 'method1' его применять нельзя */ Rublic void method1(){

// тело метода } }

Ошибка J0266

Compilation canceled by user

Компиляция прервана пользователем. Это сообщение просто информирует о том, что компиляция прервана успешно.

Ошибка J0267

A delegate cannot be 'identifier'

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

Примечание Хотя модификатор final допустим в объявлении делегата, он не нужен, поскольку применяется по умолчанию.

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

private delegate void Simple(int var1, int var2); // ошибка: делегат не может быть объявлен закрытым

Ошибка J0268

A delegate cannot be 'identifier' and 'identifier'

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

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

public class Simple{

public private delegate void SimpleDelegate();

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

// и 'private' одновременно }

Ошибка J0269

Ambiguous name: inherited 'identifier' and outer scope 'identifier' - an explicit 'this' qualifier is required

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

class NotSimple{

int varl = 20; }

public class Simple{ int varl = 10;

class InnerClass extends NotSimple{ int var2 = varl;

// ошибка: неизвестно, какая из переменных 'var1' имеется в виду

} }

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

class NotSimple{

int varl = 20; }

public class Simple{ int var1 = 10;

class InnerClass extends NotSimple{ int var2 = Simple.this.varl;

// корректное обращение к переменной объемлющего класса

int var3 = super.var1;

// корректное обращение к переменной базового класса

} }

Ошибка J0270

Ambiguous reference to 'identifier" in interface 'identifier' and class 'identifier'

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

public class Simple extends Superclass implements Superlnterface{

public static void main (String args[]){

float x = varl;

/* ошибка: неизвестно, какой

экземпляр 'varl' имеется в виду */

} }

class Superclass{

float varl; } interface Superlnterface{

float varl =6. Of; }

Ошибка J0271

Expected 'delegate'

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

public multicast void SimpleDelegate(String x, int y);

// ошибка: после модификатора 'multicast' отсутствует ключевое слово

// 'delegate'

public class Simple{

// тело класса }

Ошибка J0272

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); } }

Ошибка J0273

Cannot cast to 'void'

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

public class Simple{

public void method1(){

// ... } public static void main (String args[]){

Simple smp = new Simple();

(void) method1();

// ошибка: преобразование значения, возвращаемого методом,

// к типу 'void' запрещено } }

Ошибка J0274

Expected 'identifier' within single comment preceding class 'identifier'

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

/** ,@com.register ( clsid=AE032C46-E6A0-

11d0-8C83-00C04FC2AAE7) */

/** @com.typeinfo(attrid=31415926-5358-

9793-2384-612345678901, value="Help") */

public class Simple{

/ошибка: тэг '@com.register's отдельном

комментарии игнорируется */ }

/** @com.register ( clsid=AE032C46-E6AO-

11dO-8C83-OOC04FC2AAE7)

@com.typeinfo(attrid=31415926-5358-9793-

2384-612345678901, value="Help")*/ public class Simple2{

// корректная форма - все тэги находятся в одном комментарии }

Ошибка J0275

Class or interface name 'identifier' conflicts with package 'identifier'

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

Переименуйте класс/интерфейс или вложенный пакет, вызвавший ошибку, и повторите компиляцию.

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

// находится в файле Plastic.Java

package Boxes.Dishes;

public class Plastic{

// тело класса }

// находится в файле Dishes.java package Boxes; public class Dishes{

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

}

Ошибка J0500

terror'text'

Это сообщение генерируется директивой условной компиляции #еггог в коде программы. Ниже приведен пример генерации этого сообщения:

#define DEBUG public class Simple{

public void method1(){ #if DEBUG

#error Необходимо включить отладочный режим!

// сообщение выводится если определен символ 'DEBUG' #endif } }

Предупреждение J5001

Local variable 'identifier' is Initialized but never used

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

Вот пример кода, который приводит к появлению этого предупреждения:

public class Simple {

public int method1() {

int i = 1; return 1;

// предупреждение: переменная 'i' нигде не используется

} }

Предупреждение J5002

Compiler option 'identifier' is not supported

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

Предупреждение J5003

Ignoring unknown compiler option 'identifier'

В командной строке JVC задан неизвестный параметр. Обычно это сообщение свидетельствует об опечатке. Например, Вы получите это сообщение, если зададите в командной строке ключ /W4, поскольку параметр warning level должен начинаться со строчной буквы (/w4).

Предупреждение J5004

Missing argument for compiler option 'identifier'

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

Предупреждение J5005

Package 'identifier' was already implicitly imported

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

import java.lang.*;

// предупреждение: класс 'process' уже импортирован первым оператором import java.lang.Process;

public class Simple!

// ... }

Предупреждение J5006

'private protected' not supported, using 'protected'

Обнаружена комбинация модификаторов private protected. Это устаревший вариант - теперь вместо него используется один модификатор protected. Такое предупреждение появляется, только если уровень диагностики — 1 и выше.

Предупреждение J5014

'identifier' has been deprecated by the author of 'identifier'

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

Предупреждение J5015

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); }

Предупреждение J5016

This 'instanceof operator will always be true

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

interface I {}

class X { }

class Y extends X implements I {}

public class Simple{ void f() {

Y у = new Y();

X x = new X();

Object o;

// Эти операторы порождают предупреждение J5016...

if (y instanceof X){

//у - экземпляр класса Y, производного от X, поэтому выражение

// всегда истинно } if (y instanceof I){

// класс Y реализует интерфейс I, поэтому выражение всегда истинно }

if (x instanceof Object){

// все объекты - производные класса Object }

}

Предупреждение J5018

Class, interface, or package name contains characters not in the ASCII character set

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

Предупреждение J5019

Public member of COM-exposed class or interface contains characters not in the ASCII character set

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

Предупреждение J5020

Directive 'identifier' ignored - extensions are turned off

В коде обнаружен тэг комментария (например, @соm или @dll) при отключенном режиме расширений Microsoft Language Extensions. Чтобы пользоваться тэгами и другими расширениями, этот режим необходимо включить.

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

// режим Microsoft Language Extensions отключен public class Simple{

/**@dll.lmport("User32")*/

public static native int MessageBox(int hWnd, String text, String

caption, int type);

// предупреждение: метод 'MessageBox' может работать неверно

Предупреждение J5021

Package 'identifier' should not be defined in directory 'identifier'

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

// исходный файл находится в каталоге c:\files\simple package boxes;

// предупреждение: название пакета 'boxes'

// не соответствует имени каталога 'simple'

public class NotSimple{

// предупреждение: доступ к данному классу по имени пакета невозможен }

Предупреждение J5022

Referenced class file 'filename' maybe older than 'filename'

В компилируемом исходном файле обнаружена ссылка на устаревший или отсутствующий файл класса. Это сообщение обычно возникает при отключении режима автоматической перекомпиляции используемых классов (параметр компиляции ref-).. Если Вы компилируете файл из интегрированной среды Visual J++, этот параметр передается компилятору по умолчанию. Если один из файлов Вашего проекта использует файл класса, не входящий в состав проекта, и этот файл класса старше своего исходного файла, используемый файл класса необходимо перекомпилировать. Вы можете перекомпилировать внешние файлы классов, добавить их в проект или воспользоваться параметром компиляции ref- (его можно ввести в поле Additional Compiler Options на вкладке Compile диалогового окна Project Settings).

Предупреждение J5023

File 'filename' has more than 65 535 lines - debug information may be incorrect

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

Предупреждение J5024

Package 'identifier' was already imported

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

Предупреждение J5500

#warning 'text'

Это сообщение генерируется директивой условной компиляции #warning в тексте программы.

Ниже приведен пример кода, генерирующего это сообщение:

#define DEBUG

public class Simple{

public void method1(){ #if DEBUG

#warning Компиляция для отладочного режима

// предупреждение: выводится, когда определен символ 'DEBUG'

#endif } }

Сообщения об ошибках регистрации СОМ (Visual J++)

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

No registration attribute in class file 'filename'

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

Cannot create Instance of class 'identifier1

Для создания библиотеки типов и регистрации Вашего СОМ-класса необходимо, чтобы класс поддерживал создание экземпляра и вызов стандартного конструктора (без параметров). Эта ошибка может свидетельствовать об отсутствии какого-либо из базовых классов Вашего класса или о наличии ошибки в стандартном конструкторе Вашего класса. Убедитесь, что все базовые классы Вашего класса доступны, а стандартный конструктор Вашего класса не содержит ошибок.

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'

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

Out of memory

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

к оглавлению   к 4GL - визуальному программированию

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

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution