中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 软件工程 > 综合文章
Java Methods-Common Syntax Error Messages
作者:未知 时间:2005-09-13 23:32 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:Java Methods-Common Syntax Error Messages

Java Methods

Common Syntax Error Messages

 


C:\mywork>java hello

Exception in thread "main" java.lang.NoClassDefFoundError: hello (wrong name: Hello)

This run-time error (exception) may happen when you mistype a lower case letter for upper case. Normally a class name (e.g., Hello) starts with an upper case letter and the file name should be the same. SDK 1.3 under Windows will compile a file hello.java that defines a class Hello, but when you try to run it as above, it reports an exception.

C:\mywork>java Hello
is correct.


C:\mywork>java Hello.java

Exception in thread "main" java.lang.NoClassDefFoundError: Hello/java

or

C:\mywork>java Hello.class

Exception in thread "main" java.lang.NoClassDefFoundError: Hello/class

The command to run the Java interpreter should use the class name but should not include any extension, neither .java nor .class. An extension in the file name confuses the interpreter about the location of the class (the extension is interpreted as a subfolder).


C:\mywork>java Hello

Exception in thread "main" java.lang.NoSuchMethodError: main

This exception may be reported when the main method is missing or its signature is incorrect. The correct signature is

public static void main (String[] args)
Possible mistakes:
private static void main (String[] args)
public void main (String[] args)
public static int main (String[] args)
public static void main (String args)


C:\mywork>javac Test.java

Test.java:1: class Hello is public, should be declared in a file named Hello.java
public class Hello
       ^

The source file name is different from the name of the class defined in the file. Here the file name is Test and the class name is Hello. They must be the same.


Hello.java:8: cannot return a value from method whose result type is void
    return 0;
           ^

In Java, main is void, not int, so return is not needed and you can't use return 0 in it.


Hello.java:12: non-static method printMsg(java.lang.String) cannot be 
referenced from a static context
      printMsg(s);
      ^

The keyword static is missing in the printMsg header:

  public void printMsg(String msg)
should be:
  public static void printMsg(String msg)
Since main is a static method and it calls printMsg with no "something-dot" prefix, printMsg is assumed to be another static method of the same class.


Hello.java:7: cannot resolve symbol
symbol  : class EasyReader
location: class Hello
    EasyReader console = new EasyReader();
    ^

Unless installed as a package and properly imported, files for classes used in the program (in this case EasyReader.java or EasyReader.class) should be available in the same folder as Hello.java. A cannot resolve class error may also show up when a library class is not imported or when data type is incorrect or misspelled. For example:

  private bool match(String word, int row, int col, int rowStep, int colStep)
gives
WordSearch.java:32: cannot resolve symbol
symbol  : class bool
location: class WordSearch
  private bool match(String word, int row, int col, int rowStep, int colStep)
          ^
It should be boolean.


Hello.java:7: cannot resolve symbol
symbol  : method PrintMsg  (java.lang.String)
location: class Hello
    PrintMsg(s);
    ^

This error may occur when a method is called incorrectly: either its name is misspelled (or upper-lower case is misplaced), or a method is called with wrong types of arguments, or a method is called for a wrong type of object or a wrong class. For example, the same error, will be reported if you write

  System.println("Hello");
instead of
  System.out.println("Hello");
Another example:
Hello.java:20: cannot resolve symbol
symbol  : method println  (java.lang.String,java.lang.String)
location: class java.io.PrintStream
      System.out.println("You entered: ", msg);
                ^
Here a comma is used instead of a + in the println call. This makes it a call with two arguments instead of one and no println method exists that takes two String arguments.


Hello.java:18: cannot resolve symbol
symbol  : variable length
location: class java.lang.String
    if (msg.length != 0)
           ^

A very common error, cannot resolve symbol may result from an undeclared variable or a misspelled local variable or field name, or missing parentheses in a method call. Here it should be msg.length().


Hello.java:8: '}' expected
  }
   ^

An extra opening brace or a missing closing brace may produce several errors, including

Hello.java:13: illegal start of expression
  public static void printMsg(String msg)
  ^
Hello.java:16: ';' expected
  }
   ^
and finally
Hello.java:17: '}' expected
}
 ^
which may be reported at the end of the file.


Hello.java:29: 'class' or 'interface' expected
}
^

This error often results from an extra closing brace (or a missing opening brace).


Hello.java:5: illegal character: 20
    System.out.println(鬑ello World?;
                       ^

"Smart quote" characters accidentally left in the source file by a word processor instead of straight single or double quotes may cause this error. The same error is reported when the source file contains any non-ASCII character in the code (outside comments).


Hello.java:3: <identifier> expected
  static x;
          ^

<identifier> expected is a rather common error message. Here x is a variable, but the compiler thinks it is a class name. It is the data type designation that's actually missing. It should be:

  static <someType> x;
The same happens here:
  private myRows, myCols;
It gives an error:
WordSearch.java:4: <identifier> expected
  private myRows, myCols;
                ^
thinking that myRows is a data type. Same here:
  public static void printMsg(msg)
  {
    ...
  }
- a missing type designator (e.g., String) in a method's header produces four rather obscure errors:
Hello.java:19: <identifier> expected
  public static void printMsg(msg)
                                 ^
Hello.java:29: ')' expected
  }
   ^
Hello.java:19: cannot resolve symbol
symbol  : class msg
location: class Hello
  public static void printMsg(msg)
                              ^
Hello.java:19: missing method body, or declare abstract
  public static void printMsg(msg)
                     ^
4 errors
It should be:
  public static void printMsg(String msg)


Hello.java:7: '(' or '[' expected
    EasyReader inp = new EasyReader;
                                   ^

Should be:

    EasyReader inp = new EasyReader();


Hello.java:9: variable inp might not have been initialized
    s = inp.readLine();
        ^

This error happens if you use a local variable before initializing it.

    EasyReader inp;
declares a variable but you need to initialize it with new.


Hello.java:8: ')' expected
    System.out.print(Enter a message: ");
                           ^
Hello.java:8: unclosed string literal
    System.out.print(Enter a message: ");
                                      ^
Hello.java:8: cannot resolve symbol
symbol  : variable Enter
location: class Hello
    System.out.print(Enter a message: ");
                     ^
3 errors

A missing opening double quote in a literal string produces these three errors.


Hello.java:17: missing return statement
  {
  ^

A method, other than void, must return a value.


Hello.java:23: ';' expected
      System.out.println("Message: " + msg)
                                           ^

A few compiler error messages are actually self-explanatory.


WordSearch.java:18: incompatible types
found   : int
required: boolean
        if (i = n)
            ^

It is supposed to be

    if (i == n)
Single = makes it assignment operator. It returns an int value that can't be tested in if. Similarly,
    return row = 0 && row < myRows && col >= 0 && col < myCols;
gives two errors:
WordSearch.java:29: incompatible types
found   : int
required: boolean
    return row = 0 && row < myRows && col >= 0 && col < myCols;
           ^
WordSearch.java:29: operator && cannot be applied to int,boolean
    return row = 0 && row < myRows && col >= 0 && col < myCols;
                          ^
2 errors
An extraneous space between ! and = in an != operator may give several errors, including "incompatible types":
Hello.java:10: ')' expected
    if (s ! = null)
          ^
Hello.java:14: illegal start of expression
  }
  ^
Hello.java:13: ';' expected
    }
     ^
Hello.java:10: incompatible types
found   : java.lang.String
required: boolean
    if (s ! = null)
        ^
4 errors
Another situation with "incompatible types" is when a literal string is used in place of a char constant or vice-versa. For example:
WordSearch.java:21: incompatible types
found   : java.lang.String
required: char
          grid[r][c] = "*";
                       ^
Should be
          grid[r][c] = '*';


WordSearch.java:10: '[' expected
    grid = new char(rows, cols);
                   ^

An array should be created using brackets, not parentheses.


WordSearch.java:20: array required, but java.lang.String found
          grid[r][c] = Character.toUpperCase(letters[i]);
                                                    ^

Use charAt(i) method, not [i] with strings.


Hello.java:7: possible loss of precision
found   : double
required: int
    x = 3.5;
        ^

This happens when a double value is assigned to an int variable.


Hello.java:8: '.class' expected
    double y = double(x);
                     ^
Hello.java:8: unexpected type
required: value
found   : class
    double y = double(x);
               ^
2 errors

Incorrect cast syntax causes this error. Should be

    double y = (double)x;


Test.java:5: actionPerformed(java.awt.event.ActionEvent) in Test
cannot implement actionPerformed(java.awt.event.ActionEvent) in
java.awt.event.ActionListener;
attempting to assign weaker access privileges; was public

public class Test extends JApplet
       ^
1 error
This error is reported when the keyword public is missing in the actionPerformed method's header.
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有