Java中的错误类型及示例
错误是用户进行的非法操作,导致程序无法正常工作。在程序编译或执行之前,编程错误通常不会被发现。一些错误会阻止程序被编译或执行。因此,应该在编译和执行之前删除错误。
最常见的错误可以大致分为以下几类:
- 运行时错误:运行时错误发生或者我们可以说,是在程序执行过程中检测到的。有时,当用户输入无效数据或不相关的数据时会发现这些。当程序不包含任何语法错误但要求计算机执行计算机无法可靠执行的操作时,就会发生运行时错误。在编译期间,编译器没有技术来检测这些类型的错误。它是在程序运行时检测到它的 JVM(Java虚拟机)。为了在运行时处理错误,我们可以将错误代码放在 try 块中,并在 catch 块中捕获错误。
例如:如果用户在计算机期望整数时输入字符串格式的数据,则会出现运行时错误。
示例 1:除以零导致的运行时错误
// Java program to demonstrate Runtime Error class DivByZero { public static void main(String args[]) { int var1 = 15; int var2 = 5; int var3 = 0; int ans1 = var1 / var2; // This statement causes a runtime error, // as 15 is getting divided by 0 here int ans2 = var1 / var3; System.out.println( "Division of va1" + " by var2 is: " + ans1); System.out.println( "Division of va1" + " by var3 is: " + ans2); } }
Java代码中的运行时错误:
Exception in thread "main" java.lang.ArithmeticException: / by zero at DivByZero.main(File.java:14)
示例 2:使用大于数组大小的索引从数组分配/检索值导致的运行时错误
class RTErrorDemo { public static void main(String args[]) { int arr[] = new int[5]; // Array size is 5 // whereas this statement assigns // value 250 at the 10th position. arr[9] = 250; System.out.println("Value assigned! "); } }
Java代码中的运行时错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9 at RTErrorDemo.main(File.java:10)
- 编译时错误:编译时错误是那些由于不正确的语法而阻止代码运行的错误,例如语句末尾缺少分号或缺少括号、未找到类等。这些错误由Java检测到编译器,并且在编译时会在屏幕上显示错误消息。编译时错误有时也称为语法错误。这类错误很容易发现和纠正,因为Java编译器会为您找到它们。编译器会告诉你程序中的哪一段代码有问题,以及它对你做错了什么的最佳猜测。通常,编译器会指出错误所在的确切行,或者有时是它之前的行,但是,如果问题出在不正确的大括号嵌套上,则实际错误可能在块的开头。实际上,语法错误代表了编程语言使用中的语法错误。
示例 1:拼写错误的变量名或方法名
class MisspelledVar { public static void main(String args[]) { int a = 40, b = 60; // Declared variable Sum with Capital S int Sum = a + b; // Trying to call variable Sum // with a small s ie. sum System.out.println( "Sum of variables is " + sum); } }
Java代码中的编译错误:
prog.java:14: error: cannot find symbol + sum); ^ symbol: variable sum location: class MisspelledVar 1 error
示例 2:缺少分号
class PrintingSentence { public static void main(String args[]) { String s = "GeeksforGeeks"; // Missing ';' at the end System.out.println("Welcome to " + s) } }
Java代码中的编译错误:
prog.java:8: error: ';' expected System.out.println("Welcome to " + s) ^ 1 error
示例:缺少括号、方括号或花括号
class MissingParenthesis { public static void main(String args[]) { System.out.println("Printing 1 to 5 \n"); int i; // missing parenthesis, should have // been for(i=1; i<=5; i++) for (i = 1; i <= 5; i++ { System.out.println(i + "\n"); } // for loop ends } // main ends } // class ends
Java代码中的编译错误:
prog.java:10: error: ')' expected for (i = 1; i <= 5; i++ { ^ 1 error
示例:选择语句或循环的格式不正确
class IncorrectLoop { public static void main(String args[]) { System.out.println("Multiplication Table of 7"); int a = 7, ans; int i; // Should have been // for(i=1; i<=10; i++) for (i = 1, i <= 10; i++) { ans = a * i; System.out.println(ans + "\n"); } } }
Java代码中的编译错误:
prog.java:12: error: not a statement for (i = 1, i <= 10; i++) { ^ prog.java:12: error: ';' expected for (i = 1, i <= 10; i++) { ^ 2 errors
- 逻辑错误:逻辑错误是指您的程序编译并执行,但做错了事情或返回了不正确的结果,或者当它应该返回输出时没有输出。编译器和 JVM 都不会检测到这些错误。 Java系统不知道你的程序应该做什么,所以它没有提供额外的信息来帮助你找到错误。逻辑错误也称为语义错误。这些错误是由于程序员在编码时使用的不正确的想法或概念引起的。语法错误是语法错误,而逻辑错误是由不正确的含义引起的错误。
例如:如果程序员在打算将两个变量相除时不小心添加了两个变量,程序将不会出错并且会成功执行但结果不正确。
示例:意外在变量上使用了不正确的运算符来执行运算(使用 '/'运算符来获取模数,而不是使用 '%')
public class LErrorDemo { public static void main(String[] args) { int num = 789; int reversednum = 0; int remainder; while (num != 0) { // to obtain modulus % sign should // have been used instead of / remainder = num / 10; reversednum = reversednum * 10 + remainder; num /= 10; } System.out.println("Reversed number is " + reversednum); } }
输出:Reversed number is 7870
示例:显示错误消息
class IncorrectMessage { public static void main(String args[]) { int a = 2, b = 8, c = 6; System.out.println( "Finding the largest number \n"); if (a > b && a > c) System.out.println( a + " is the largest Number"); else if (b > a && b > c) System.out.println( b + " is the smallest Number"); // The correct message should have // been System.out.println //(b+" is the largest Number"); // to make logic else System.out.println( c + " is the largest Number"); } }
输出:Finding the largest number 8 is the smallest Number