java isproxyclass问题:Main.java isproxyclass:5: class Demo is public, should be declared in a file named Demo.j

Java常见错误列表
Java常见错误列表:
找不到符号(symbol)
类X是public的,应该被声明在名为X.java的文件中
缺失类、接口或枚举类型
缺失标识符
非法的表达式开头
类型不兼容
非法的方法声明;需要返回类型
数组越界(java.lang.ArrayIndexOutOfBoundsException)
字符越界(java.lang.StringIndexOutOfBoundsException)
类Y中的方法X参数不匹配
缺少return语句
在解析时到达了文件结尾
执行不到的语句
变量没被初始化
1. 找不到符号(symbol)
当你在代码中引用一个没有声明的变量时一般会报这个错误。考虑下面的例子:
public class
static void main(String[] args) {
average = (a + b + c)/5.0;
System.out.println(average);
1 error found:
File: Test.java &hr&
Error: Test.java:7: cannot find
symbol : variable average
location: class Test
在上面的例子中,变量average没有被声明——也就是说你需要告诉编译器average的类型是什么,例如:
double average = (a + b + c)/5.0;
此外,当你在代码中引用一个方法但没有在方法名后加上括号时也会报这个错误,加上括号用以表明引用的是个函数,即使当函数没有参数时也不能省略括号。例如:
public class
static void main(String[] args) {
static void my_method() {
System.out.println("Hello, world!");
1 error found:
File: Test.java &hr&
Error: Test.java:7: cannot find
symbol : variable my_method
location: class Test
在上面的例子中,编译器在main方法中查找名为my_method的变量,实际上,你是想调用一个叫做my_method的方法:
class Test {
static void main(String[] args) {
my_method();
static void my_method() {
System.out.println("Hello, world!");
第三种情况,如果你忘记导入你所使用的包时也会出现这个错误。例如,考虑下面这个从用户那里读入一个整数的例子:
public class
static void main(String[] args) {
Scanner console =
new Scanner(System.in);
n = console.nextInt();
2 errors found:
File: Test.java &hr&
Error: cannot
find symbol
symbol: class Scanner
location: class Test
File: Test.java &hr&
Error: cannot
find symbol
symbol: class Scanner
location: class Test
这里的问题是程序必须导入java.util.Scanner(或者java.util.)。否则,编译器不知道Scanner是什么类型。当你在处理文件的输入/输出时,如果忘记导入java.util.Arrays或者java.io.,也会遇到这个错误。
import java.util.*;
// or --& import java.util.S
public class
static void main(String[] args) {
Scanner console =
new Scanner(System.in);
n = console.nextInt();
最 后,当我们在使用大小敏感的变量名时也会遇到这个错误。Java中所有的标识符(identifiers)都是区分大小写的。这就意味着,如果我们声明了 一个名为average的变量,然后在后面用Average引用它时,编译器就会报找不到Average这个变量的错误。
2. 类X是public的,应该被声明在名为X.java的文件中
在一个Java程序中,如果类名与文件名不匹配时会报这个错。例如,下面这个Foo.java程序:
public class
static void main(String[] args) {
System.out.println("Hello, world!");
1 error found:
File: Foo.java &hr&
Error: class Bar is public, should be declared in
named Bar.java
由于Foo与Bar不匹配,这段代码会编译失败。修改这个错误,我们既可以修改类名,也可以修改文件名。
3. 缺失类、接口或枚举类型
这个错误是一种与大括号有关的错误,一般来说,这个错误发生在程序最后有太多大括号时;例如:
public class
static void main(String[] args) {
System.out.println("Hello!");
1 error found:
File: Test.java &hr&
Error: class, interface, or enum expected
一 种找出这种错误的方式是正确的缩进代码(因为这种错误总是与大括号有关)。我们可以在Dr.java中按组合键CTRL-A(去选中这个程序),然后按 TAB键(来正确地缩减代码)。在我们上面的实例代码中,程序的最后有两个大括号,这在一个合法的程序中是不可能出现的。因此,我们仅仅去掉一个大括号就 能够让程序正确的编译。
public class
static void main(String[] args) {
System.out.println("Hello!");
当编译器检查到代码中缺失字符时会出现”缺失X”这种形式的错误,错误信息会告诉你在哪行缺失了哪个字符,考虑下面的程序:
public class
static void main(String[] args) {
my_method();
static void my_method() {
System.out.println("Hello, world!")
2 errors found:
File: Test.java &hr&
Error: Test.java:1: '{'
File:.java &hr&
Error: Test.java:7: ';'
这个错误信息告诉你在第1行缺失了一个大括号,在第7行缺失了一个分号。解决这种错误很简单——只需把缺失的字符在正确的位置上补上即可。
public class
static void main(String[] args) {
my_method();
static void my_method() {
System.out.println("Hello, world!");
5. 缺失标识符
当把代码写在了方法外时会出现这个错误;这种错误一般也是由大括号引起的。考虑下面的例子:
public class
System.out.println("Hello!");
static void main(String[] args) {
System.out.println("World!");
2 errors found:
File: Test.java &hr&
Error: &identifier& expected
File: Test.java &hr&
Error: illegal start of type
在这种情况下,很明显第一个打印语句应该放在main方法里面,这样才能通过编译。然而,当我们的程序中有多于一个方法并且大括号也不匹配时,这种“缺失标识符”的错误就不容易被发现了:
public class
static void main(String[] args) {
System.out.println("Hello!");}
System.out.println("World!");
3 errors found:
File: Test.java &hr&
Error: &identifier& expected
File: Test.java &hr&
Error: illegal start of type
File: Test.java &hr&
Error: class, interface, or enum expected
在上面的代码中多了一个大括号,但是因为代码没有正确的缩进,所以很难找出这个错误。这样使得main方法在打印“hello”语句后就结束了,这样打印“world”的语句就变成方法以外的代码了。修改这个错误的方式十分简单——只需要把第三行的大括号删除就可以了:
public class
static void main(String[] args) {
System.out.println("Hello!");
System.out.println("World!");
6. 非法的表达式开头
当编译器遇到一条不合法的语句时会报“非法的表达式开头”这种错误。考虑下面的例子:
public class
static void main(String[] args) {
my_method();
static void my_method() {
System.out.println("Hello, world!");
5 errors found:
File: Test.java &hr&
Error: Test.java:6: illegal start of expression
File: Test.java &hr&
Error: Test.java:6: illegal start of expression
File: Test.java &hr&
Error: Test.java:6: ';'
File: Test.java &hr&
Error: Test.java:6: ';'
File: Test.java &hr&
Error: Test.java:9: reached end of file
while parsing
这里,缺少了一个关闭main方法大括号。由于main方法没有被关闭,编译器把调用my_method方法之后的代码也当作main方法的一部分。然而,后面的代码是public static void my_method() {,很显然,这在一个方法内不合法。
“非 法的表达式开头”这种错误不如我们上面提到的“××缺失”这种信息有帮助。对于这种错误(以及很多其他一些错误),非常有必要检查一下出错代码前面的那几 行。对于上面那个例子,我们只需要在编译器报错的那行前面加上大括号关闭main方法就可以了。重新编译,所有的错误都解决了。
public class
static void main(String[] args) {
my_method();
static void my_method() {
System.out.println("Hello, world!");
7. 类型不兼容
当 你的程序在处理类型相关的问题时会报这个错。我们可以对一些类型进行相互转化,例如,你可以轻松把一个char类型转为int类型,反之亦然;你也可以通 过向上转型把一个double类型转为int类型。但是,你不能把基本类型与像String这样的对象进行相互转换。例如:
public class
static void main(String[] args) {
num = "Hello, world!";
1 error found:
File: Test.java &hr&
Error: Test.java:3: incompatible types
found : java.lang.String
required: int
一般来说,你不能像解决其他一些错误一样解决这种错误。这不是一种语法错误,而是一种关于类型的逻辑错误。把一个String类型转为int类型一般来说都是毫无意义。但是,在一些应用中,你可能需要把String类型转为int类型,比如,当这个字符串代码一个数字时:
public class
static void main(String[] args) {
num = "500";
1 error found:
File: Test.java &hr&
Error: Test.java:3: incompatible types
found : java.lang.String
required: int
解决这种错误一般采用这样的方法:借助于Java中像Integer这样的类,这些基本类型的包装类中有能接受字符串类型的参数的方法,这样就把字符串类型转为整型了:
class Test {
static void main(String[] args) {
num = Integer.parseInt(&500&);
但是,这种解决“类型不兼容”错误的方案是一种例外,不是什么规则,因为这种错误一般来自于逻辑上的错误。
&a name="invalid-method"/&&/a&
### 8. 非法的方法声明;需要返回类型
在Java中的每个方法都要求明确的声明返回类型,即使这个方法什么也不返回,也要用void进行标识,就像main方法那样。
当一个方法没有声明返回类型时,会出现这种错误:
&pre class=&brush: gutter:
true; first-line:
1; highlight: []; html-script:
class Test {
static void main(String[] args) {
x = getValue();
System.out.println(x);
static getValue() {
1 error found:
File: Test.java &hr&
Error: Test.java:7: invali
return type
解决这种问题,在方法声明处加上合适的返回类型即可:
public class
static void main(String[] args) {
x = getValue();
System.out.println(x);
static int getValue() {
9. 数组越界(java.lang.ArrayIndexOutOfBoundsException)
当你使用不合法的索引访问数组时会报数组越界这种错误,数组arr的合法错误范围是[0, arr.length-1];当你访问这之外的索引时会报这个错。例如:
public class
static void main(String[] args) {
int[] arr = {1,
0; i &= arr. i++) {
System.out.println(arr[i]);
java.lang.ArrayIndexOutOfBoundsException: 3
at Test.main(Test.java:5)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
这种错误很像我们下面即将说的字符串索引越界,这种错误的错误信息后面部分与错误不大相关。但是,第1行就告诉我们错误的原因是数组越界了,在我们上面的例子,非法的索引值是3,下面一行的错误信息告诉你错误发生在Test类的第5行上,在main方法之内。
在上面的例子中,因为我们循环过多导致出现这个错误,循环索引i最大可以为4,而4超过了数组的长度,因此越界了。相反,i的上界应该使用&或者相同效果的语句来界定。
public class
static void main(String[] args) {
int[] arr = {1,
0; i & arr. i++) {
System.out.println(arr[i]);
当处理数组越界时,打印出遍历数组的索引十分有帮助,这样我们就能够跟踪代码找到为什么索引达到了一个非法的值。
10. 字符串索引越界(java.lang.StringIndexOutOfBoundsException)
当你在程序中去访问一个字符串的非法索引时会报字符串索引越界这个错误。一个String的合法索引范围是[0,str.leng()-1];当你访问这之外的索引时会报这个错。例如:
public class
static void main(String[] args) {
String str = "Hello, world!";
String a = str.substring(-1,
String b = str.charAt(str.length());
String c = str.substring(0,
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at Test.main(Test.java:5)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:271)
这 种错误的错误信息后面部分与错误不大相关。但是,第1行就说明了错误的地方是字符串的索引,在我们这个例子,非法的索引是-1,下面一行错误信息告诉我们 这个错误是在执行substring方法时抛出的,发生错误的位置是Test类的第5行。这种与错误相关的程序轨迹告诉我们程序是在调用哪个方式时出的 错,这样我们就能追踪代码,并最终改正它。
值得注意的是,上面程序中的a,b,c都会抛出这种错误,但是程序在遇到第一个错误时就被迫终止了。
这不是编译时的错误,而是运行时的错误。换句话说,编译器能正确编译这段程序因为它只是在逻辑上有错,此外,在程序运行之前,我们也没法预料是否会有错误发生。解决这种错误,我们需要改正程序的逻辑来保证没有地方访问非法的索引。
11. 类Y中的方法X参数不匹配
当你在调用函数时参数数量或顺序不对时会报这个错误。例如,考虑下面的程序:
public class
static void main(String[] args) {
myMethod(1.0,
2, "Hello!");
static void myMethod(double
d, String s, int
System.out.println(s +
" " + d + " "
1 error found:
File: Test.java &hr&
Error: method myMethod in
class Test cannot be ap
required: double,java.lang.String,int
found: double,int,java.lang.String
reason: actual argument int cannot be converted to java.lang.String by method invocation conversion
这种错误的错误信息非常有帮助。“required”这一行错误信息告诉我们方法的参数是什么,方法的参数列表在这后面。在上面的例子中,myMethod方法的参数先后顺序应该是double类型、String类型,最后是一个int类型的变量。
错误信息的下一行(found开头的这一行)告诉我们程序在调用这个方法时用了什么样的参数。在上面的例子中,是一个double类型,一个int类型,最后是一个String类型的变量,很显然顺序是不对的。
解决这种错误,我们需要保证方法的参数个数和类型与函数声明时都一致才行。
public class
static void main(String[] args) {
myMethod(1.0,
static void myMethod(double
d, String s, int
System.out.println(s +
" " + d + " "
12. 缺少return语句
当你声明一个方法有返回值但是没有写return语句时会报这个错误。例如:
public class
static void main(String[] args) {
x = twice(5);
System.out.println(x);
static int twice(int
value = 2 *
1 error found:
File: Test.java &hr&
Error: Test.java:9: missing return
我们通过函数声明告知编译器twice方法会返回一个int值,但是我们没有写return语句:
public class
static void main(String[] args) {
x = twice(5);
System.out.println(x);
static int twice(int
value = 2 *
在某些if条件句中,编译器也会认为函数没有返回值。像下面这个例子:
public class
static void main(String[] args) {
x = absVal(-5);
System.out.println(x);
static int absVal(int
(x &= 0) {
1 error found:
File: Test.java &hr&
Error: Test.java:15: missing return
避免这种错误,我们可以选择使用else语句(就像我们在变量没被初始化一样),或者我们可以不用第二个if语句,因为我们知道,如果程序能够执行到这个地方,程序就可以直接返回x了:
public class
static void main(String[] args) {
x = absVal(-5);
System.out.println(x);
static int absVal(int
13. 精度损失
当你把信息保存到一个变量中,而信息量超过了这个变量的所能容纳的能力时会报这个错。最常见的例子是把double类型赋值给int类型。
public class
static void main(String[] args) {
pi = 3.14159;
System.out.println("The value of pi is: "
1 error found:
File: Test.java &hr&
Error: Test.java:3: possible loss of precision
found : double
required: int
这个错误发生的原因是计算机在存储double类型时所需的空间是int类型的两倍。如果你不在乎精度的损失,你可以通过上转型的方法来告知编译器:
public class
static void main(String[] args) {
pi = (int)3.14159;
System.out.println("The value of pi is: "
现在编译器不会报错了,但是pi这个变量由于进行了取整,最终值为3。
14. 在解析时到达了文件结尾
当你没有用大括号关闭你的程序时会出现这个错误。错误信息明确的指出编译器在没有明确程序该结束时就到达了文件的结尾。例如:
public class
static void main(String[] args) {
my_method();
static void my_method() {
System.out.println("Hello, world!");
1 error found:
File: Test.java &hr&
Error: Test.java:9: reached end of file
while parsing
解决这个错误,我们只需要在最后加上关闭程序的大括号(“}”)即可。有时仅仅在文件末尾缺少了一个大括号,但也有可能是在程序的中间少写或多写了大括号的缘故。
一种调试的方法是用快捷键CTRL-A + TAB来正确的缩减你的代码。由于程序的问题与大括号有关,这样代码就不能够正确的缩进。找到程序中第一个缩进不正确的地方,这就是错误产生的地方。
一旦大括号正确的匹配上,编译器就不会报错了:
public class
static void main(String[] args) {
my_method();
static void my_method() {
System.out.println("Hello, world!");
15. 执行不到的语句
当编译器检测到某些语句在整个程序流程中不可能被执行到时会报这个错。这个错误经常是由return或break后的语句所导致的。例如:
public class
static void main(String[] args) {
value = twice(5);
System.out.println(value);
static int twice(int
twice = 2 *
System.out.println("Returning "
2 errors found:
File: Test.java &hr&
Error: Test.java:10: unreachable statement
File: Test.java &hr&
Error: Test.java:11: missing return
编译器报了两个错:一个是说System.out.println(“Returning ” + twice);这一行不可能被法执行到,另一个错误是因为编译器假设可以执行print语句,这样的话我们在它之后也应该有个return语句,但是程序中没有,所以报这个错。
解决这个错误,我们可以把print语句放到return的前面,这样程序就能执行了:
public class
static void main(String[] args) {
value = twice(5);
System.out.println(value);
static int twice(int
twice = 2 *
System.out.println("Returning "
15. 变量没被初始化
当你在程序中去引用一个没有被初始化的变量时会报这个错。下面看一个非常简单的例子:
public class
static void main(String[] args) {
System.out.println(x + y);
1 error found:
File: Test.java &hr&
Error: Test.java:5: variable y might not have been initialized
在程序中你没有告知编译器y的值,所以y不能被打印,y需要像x一样被初始化以后才能使用。
在一些更复杂的情形下,if语句可能导致变量没有被初始化。例如:
public class
static void main(String[] args) {
setX = false;
System.out.println(x);
1 error found:
File: Test.java &hr&
Error: Test.java:8: variable x might not have been initialized
这里很明显,x将不能被正确的初始化,因此编译器报错。但是,在一些情况下虽然我们能够很清楚的知道变量能够被初始化,但是编译器不能和我们一样推测出变量是否会被初始化,例如:
public class
static void main(String[] args) {
setToTen = false;
(setToTen) {
(!setToTen) {
System.out.println(x);
1 error found:
File: Test.java &hr&
Error: Test.java:14: variable x might not have been initialized
很明显,x一定会被两个if语句中的任意一个赋值,但是编译器并不能推测出(译者注:需要在运行时才能知道),一种修改这个错误的方式是使用else语句。当使用else语句时,编译器就有最够的证据推测出x将被初始化:
public class
static void main(String[] args) {
setToTen = false;
(setToTen) {
System.out.println(x);
Java常见错误列表的相关文章
代码审查是消灭Bug最重要的方法之一,这些审查在大多数时候都特别奏效.由于代码审查本身所针对的对象,就是俯瞰整个代码在测试过程中的问题和Bug.并且,代码审查对消除一些特别细节的错误大有裨益,尤其是那些能够容易在阅读代码的时候发现的错误,这些错误往往不容易通过机器上的测试识别出来.本文就常见的Java代码中容易出现的问题提出一些建设性建议,以便您在审查代码的过程中注意到这些常见的细节性错误. 通常给别人的工作挑错要比找自己的错容易些.别样视角的存在也解释了为什么作者需要编辑,而运动员需要教练的原
25.集群搭建 25.1 HADOOP集群搭建 25.1.1集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据的存储,集群中的角色主要有NameNode / DataNode YARN集群: 负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager 25.1.2服务器准备 本案例使用虚拟机服务器来搭建HADOOP集群,所用软件及版本: ü Vmware 11.
[背景介绍]
在使用SQL Server数据库期间,想必大家一定都有过解决各种问题的经历了,很多时候,都会在大家的博客中看到问题与解决方案.现在开发使用的是MySQL数据库,现在来看,发现自己在MySQL中的经历越来越多.前两天,自己电脑的MySQL数据库出问题了,折腾了我好几个小时~~
这篇博客就将把之前遇到的和这次遇到的错误记录下来,以后也可以更好更快的找到解决办法吧. [常见错误] (1) windows mysql提示:1045 access denied for use
常见错误: 1.方法名与c语言实现的签名不对应.
异常:UnsatisfiedLinkError
2.如果在执行ndk-build时,出现make:***
Error的id为1,C代码的源文件出现了问题.
从上往下解决异常.
3.android.mk文件配置错误
mak:*** No rule to make target
查看 编译的源文件是否存在 并且可读
4.一运行程序,程序界面无法显示.而在logcat
10个DIV+CSS常见错误,出了问题可以来参考下,是否您也犯了以下错误呢? 1. 检查HTML元素是否有拼写错误.是否忘记结束标记
即使是老手也经常会弄错div的嵌套关系.可以用dreamweaver的验证功能检查一下有无错误.
2. 检查CSS是否正确
检查一下有无拼写错误.是否忘记结尾的 } 等.可以利用CleanCSS来检查 CSS的拼写错误.CleanCSS本是为CSS减肥的工具,但也能检查出拼写错误.
3. 确定错误发生的位置
假如错误影响了整
js|错误|问题|中文 关于JSP中,中文问题(泛指字符问题),以及常见错误调试手记 sports98写于 序言:在论坛中,生活中,工作中,有不少和我一样属于鸟级的用户,在面对着不明白的问题的时候就盲目了,多交流,多写写日记就好的多了 文章内容关于:日,编写/调试[用户注册程序] 编写环境:WIN2K(简体中文版) server sp2 + TOMCAT4.0 + J2SDK1.3+MYSQL4.0(alpha)检测数据库内容环境:WIN2K(简体中文版) s
servlet|错误 Servlet常见错误校验表: ________________________________________________________________故障现象 可能的原因________________________________________________________________servlet不能编译 除了通常的java语言错误以外,还有一些跟servlet有关的原因: 1 没有导入javax.servlet.*或javax.servlet.ht
这篇文章的目的是帮助设计者们和顾客们去理解好的排版技巧的重要性,当避免一些常见的错误的时候.请记住这些错误的大部分是主观的以及在项目.目标或环境能够被改变的 下面列出了10个在排版/布局中使用到的常见错误,这些错误可能在你设计的效果和外观中产生大的影响.当在考虑印刷时它能为你节省时间和金钱. 1.没有足够的行间距(leading) 行间距/leading能改善整页中文字块的阅读效果,这样做是为了当读者阅读下一行的时候不会找不到他们的位置.太小文字可能引起一种受压迫感.记住不同的字体需要不同的行间
asp.net|datagrid|错误 摘要:学习如何避免在使用 ASP.NET Datagrid 控件进行开发时可能发生的一些常见错误. Datagrid 控件是 Microsoft? ASP.NET 中功能最强.用途最广的 Web 控件之一,这一点已经得到了 ASP.NET 权威人士的认同.虽然 Datagrid 控件易于使用,但同样易于给使用者带来麻烦.以下是许多人所犯的一些错误,这些人包括从初学者到富有经验的 .NET 专家.您可以看到许多苦闷的使用者在 ASP.NET 新闻组和论坛就这

我要回帖

更多关于 java public class 的文章

 

随机推荐