Java程序设计错误

Java提供了完善的错误处理机制,在深入理解这些错误之前,先认识一下它们。
Java程序设计错误可以分为三类:语法错误运行时错误逻辑错误

语法错误

在编译过程中由编译器检测出来的错误称为语法错误syntax error或编译错误compile error
语法错误是由创建代码时的错误引起的,例如:拼错关键字,忽略了一些必要的标点符号,或者左花括号没有对应的右花括号。
这些错误通常很容易检测到,因为编译器会告诉你这些错误在哪里,以及是什么原因造成的。

public class Welcome {
    public static main(String[] args) {
        System.out.println("Hello world");
    }
}

观察一下上面这段代码,发现了什么问题?

运行 javac Welcome.java


我用的Win10中文系统,命令行提示为中文,不同的操作系统,不同的JDK版本,可能有不一样的提示信息。

从错误提示可以看出,第2行main方法前遗漏关键字void。

public class Welcome {
    public static void main(String[] args) {
        System.out.println("Hello world);
    }
}

观察一下上面这段代码,发现了什么问题?

运行 javac Welcome.java


从错误提示可以看出,第3行字符串应该加上引号。

有时候,提示会显示多个错误信息,一个错误会显示很多行的编译错误,因此,从最上面的行开始向下纠正错误。

D:\mapull>javac Welcome.java
Welcome.java:3: 错误: 未结束的字符串文字
        System.out.println("Hello world);
                           ^
Welcome.java:3: 错误: 需要';'
        System.out.println("Hello world);
                                         ^
Welcome.java:5: 错误: 解析时已到达文件结尾
}
看着有好多错误提示,其实,只需要修改一处地方:字符串加上引号
public class Welcome {
    public static void main(String[] args) {
        System.out.println("Hello world");
        System.out.println("码谱");
    }
}
代码中是允许出现中文的,但是一定要注意,中文的分号和英文的分号是不同的。

观察一下上面这段代码,发现了什么问题?

运行 javac Welcome.java


很容易出现的错误,在输入完中文以后,往往在最后添加的是中文分号,导致程序出现非法字符

如果你不知道如何纠正错误,将你的程序一个字符一个字符地仔细对照示例代码。在初期,你可能要花许多时间纠正语法错误,但是很快你会熟悉Java语法,并快速纠正语法错误。

运行时错误

运行时错误runtime error是引起程序非正常终止的错误。运行应用程序时,当环境检测到一个不可能执行的操作时,就会出现运行时错误。输入错误是典型的运行时错误。当程序等待用户输入一个值,而用户输入了一个程序不能处理的值时,就会发生输入错误。
例如:如果程序希望读入的是一个数值,而用户输入的却是一个字符串,就会导致程序出现数据类型错误。
另一个常见的运行时错误是将 0 作为除数。当整数除法中除数为 0 时可能引发这种况。

public class Welcome {
    public static void main(String[] args) {
        System.out.println("Hello world");
        System.out.println(1/0);
    }
}

运行 javac Welcome.java,不会有任何输出,证明程序被正确编译。

运行 java Welcome


运行时错误只在程序运行时报错,能正确通过编译。

逻辑错误

当程序没有按预期的方式执行时就会发生逻辑错误logic error
这种错误发生的原因有很多种。
下面有一个除法的例子,我希望计算 3 除以 2 的结果,理想结果应该是 1.5

public class Welcome {
    public static void main(String[] args) {
        System.out.println(3/2);
    }
}

你将得到结果1,而这是不符合预期的,结果应该是1.5。
Java中,整数相除是返回除法的整数部分,即小数部分被截掉。
要得到正确的结果,需要使用’3.0/2’,这样得到结果1.5。

通常情况下,因为编译器可以明确指出错误的位置以及出错的原因,所以语法错误是很容易发现和纠正的。
运行时错误也不难找,因为在程序异常终止时,错误的原因和位置都会显示在控制台上。
然而,查找逻辑错误就很有挑战性了。
之后,我们将学习跟踪程序 debug 以找到逻辑错误。查错能力将是一个程序员厉不厉害重要的指标。

常见错误

对于编程初学者来说,遗漏右括号遗漏分号遗漏字符串的引号名称拼写错误是常见的错误。

遗漏右括号

括号用来标识程序中的。每个左括号必须有一个右括号与之匹配。常见的错误是遗漏右括号。
为避免这个错误,任何时候输入左括号的时候就输入右括号,如下面的例子:
public class Welcome{ 立刻输入此右括号}以匹配左括号。
如果使用 Eclipse 和 IDEA 这样的IDE,在输入左括号时会自动插入一个右括号。

遗漏分号

每个语句都以一个语句结束符;结束。
通常,编程初学者会忘了在一个块的最后行语句后加上语句结束符,如下面例子所示:

public class Welcome {
    public static void main(String[] args) {
        System.out.println("Hello world")
        System.out.println(1/0);
    }
}
遗漏引号

字符串必须放在引号中。通常,编程初学者会忘记在字符串结尾处加上一个引号,如下面例子所示:
System.out.printIn("Study in Mapull); 遗漏一个引号
如果使用 Eclipse 和 IDEA 这样的IDE,在输入左引号时会自动插入一个右引号。

名称拼写错误
Java是大小写敏感的。

编程初学者常将名称拼写错。
例如,下面的代码中main错误拼写成Main,System 错误拼写成 system

public class Welcome {
    public static void Main(String[] args) {
        system.out.println("Hello world")
    }
}

在之后,会接触到更多更复杂的错误,Java提供了完善的错误机制。
在 异常处理 部分,会有更多的处理异常的手段。