Фатальная ошибка, после которой компилятор не может продолжать работу. Инструкции по поиску
информации об этой ошибке в 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
Для создания исполняемого модуля или библиотеки динамической загрузки СОМ не хватило памяти.
Освободите память, закрыв другие приложения, и повторите сборку проекта.
Понятие же "физического вакуума" в релятивистской квантовой теории поля подразумевает, что во-первых, он не имеет физической природы, в нем лишь виртуальные частицы у которых нет физической системы отсчета, это "фантомы", во-вторых, "физический вакуум" - это наинизшее состояние поля, "нуль-точка", что противоречит реальным фактам, так как, на самом деле, вся энергия материи содержится в эфире и нет иной энергии и иного носителя полей и вещества кроме самого эфира.
В отличие от лукавого понятия "физический вакуум", как бы совместимого с релятивизмом, понятие "эфир" подразумевает наличие базового уровня всей физической материи, имеющего как собственную систему отсчета (обнаруживаемую экспериментально, например, через фоновое космичекое излучение, - тепловое излучение самого эфира), так и являющимся носителем 100% энергии вселенной, а не "нуль-точкой" или "остаточными", "нулевыми колебаниями пространства". Подробнее читайте в FAQ по эфирной физике.