Some errors are caused by violations of the syntax of Java. Although they are easy to understand, there is no easy way to find the exact cause of such errors except by checking the code around the location of the error character by character looking for the syntax error.
...expected
The syntax of Java is very specific about the required punctuation. This error occurs, for example, if you forget a semicolon at the end of a statement or don't balance parentheses:
if (i > j // Error, unbalanced parentheses
max = i // Error, missing semicolon
else
max = j;
Unfortunately, this syntax error is not necessarily caught precisely at the point of the mistake so you must carefully check the preceding characters in the line or even in a previous line in order to find the problem.
Eclipse:
Syntax error, insert ") Statement" to complete IfStatement
Syntax error, insert ";" to complete Statement
Eclipse is more informative as to the precise syntax error encountered.
Syntax error, insert ") Statement" to complete IfStatement
Syntax error, insert ";" to complete Statement
Eclipse is more informative as to the precise syntax error encountered.
unclosed string literal
String literals must be enclosed in quotation marks.1 This error occurs if you fail to terminate the literal with quotation marks. Fortunately, the syntax of Java requires that a string literal appear entirely on one line so the error message appears on the same line as the mistake. If you need a string literal that is longer than a single line, create two or more literals and concatenate them with
+
:String longString =
"This is first half of a long string " +
"and this is the second half.";
Eclipse: String literal is not properly closed by a double-quote In Eclipse you can write a string literal of arbitrary length and the environment will break the string and insert the
+
automatically.illegal start of expression
Most programming constructs are either statements or expressions. This error occurs when an expression is expected but not found. In Java, an assignment statement is considered to be an expression which returns a value, so errors concerning expressions also apply to assignment statements.2 Examples:
- An extra right parenthesis after the condition of an
if
-statement:Eclipse: Syntax error on token ")", delete this token3 Eclipse diagnoses this as a simple syntax error and does not mention expressions.if (i > j) ) // Error, extra parenthesis max = i;
- Forgetting the right-hand side of an assignment statement:Eclipse: Syntax error on token "=", Expression expected after this token
max = ; // Error, missing right-hand side
not a statement
This error occurs when a syntactically correct statement does not appear where it should. Examples:
- Writing an assignment statement without the assignment operator:Eclipse: Syntax error, insert "AssignmentOperator Expression" to complete Expression
max ; // Error, missing =
- Misspelling
else
:The reason you do not get “else expected” is that you need not write anif (i > j) max = i; els ; // Error, else not spelled correctly
else
alternative so this just looks like a bad statement.
Eclipse:
els cannot be resolved
Syntax error, insert "AssignmentOperator Expression" to complete Expression
The same identifier can be used in different methods and classes. An important task of the compiler is to resolve the ambiguity of multiple uses of the same identifer; for example, if a variable is declared both directly within a class and also within a method, the use of its unqualified name is resolved in favor of the local variable. This error message simply means that the compiler could not obtain an (unambiguous) meaning for the identifier els. - The following code:results in a weird error message:
if (i > j) max = i; els // Error, else not spelled correctly max = j;
The reason is that the compiler interprets this as a declaration:x.java:6: cannot find symbol symbol : class els location: class x els
and can't find a classels max = j;
els
as the type of the variablemax
.
Eclipse: Duplicate local variable maxels cannot be resolved to a type These messages are more helpful: first, the use of the word type instead of class is more exact because the type of a variable need not be a class (it could be a primitive type or interface); second, the message about the duplicate variable gives an extra clue as to the source of the error. - The error can also be caused by attempting to declare a variable whose name is that of a reserved keyword:Eclipse:Syntax error on token "default", invalid VariableDeclaratorId
void f() { int default = 10; }
cannot find symbol
This is probably the most common compile-time error. All identifiers in Java must be declared before being used and an inconsistency between the declaration of an identifier and its use will give rise to this error. Carefully check the spelling of the identifier. It is easy to make a mistake by using a lower-case letter instead of an upper case one, or to confuse the letter O with the numeral 0 and the letter l with the numeral 1.
Other sources of this error are: calling a constructor with an incorrect parameter signature, and using an identifier outside its scope, for example, using an identifier declared in a
for
-loop outside the loop:int[] a = {1, 2, 3};
int sum = 0;
for (int i = 0; i < a.length; i++)
sum = sum + a[i];
System.out.println("Last = " + i); // Error, i not in scope
Eclipse: ... cannot be resolved
... is already defined in ...
An identifier can only be declared once in the same scope:
int sum = 0;
double sum = 0.0; // Error, sum already defined
Eclipse: Duplicate local variable sum
array required but ... found
This error is caused by attempting to index a variable which is not an array.
int max(int i, int j) {
if (i > j) return i;
else return j[i]; // Error, j is not an array
}
Eclipse: The type of the expression must be an array type but it resolved to int
... has private access in ...
It is illegal to access a variable declared private outside its class.
Eclipse: The field ... is not visible
FOOTNOTES
- A literal is a source-code representation of a value; most literals are of primitive types like
int
orchar
, but there are also literals of typeString
and the literalnull
of any reference type. - The value of an assignment statement considered as an expression is the value of the expression on the right-hand side that is assigned to the variable on the left-hand side.
- The syntax of a programming language is defined in terms of tokens consisting of one or more characters. Identifiers and reserved keywords are tokens as are single characters like
+
and sequences of characters like!=
.
No comments:
Post a Comment