Java中的前 5 个异常示例
程序运行时被编译后干扰正常执行的意外事件称为异常。为了处理程序的这种突然执行,异常处理就是程序的正常终止。
插图:考虑一个现实生活中的例子
Suppose books requirement is from Delhi library at runtime if Delhi library is not available to provide books due to some transport issues. Then Delhi library suggests taking books from Indore library to continue the rest of our work. This way of defining alternative is nothing but exception handling.
例外情况如下:
- 已检查异常:这些是在程序执行时编译器可以检测到的异常,并显示警告消息。
- Unchecked Exceptions:这些是编译器检查遗漏的异常,产生了突然的流程。由于编译器没有检测到这些异常,因此不会显示警告消息。
现将上述两类异常分类如下:
- 通用编程异常:通用编程异常是指那些由程序员(或)由 API 开发人员明确提出的异常称为程序异常。示例包括IllegalArgumentException(IAE)
- JVM 异常:异常 被称为在特定事件发生时由 JVM(Java虚拟机)自动引发的异常。例如ArrayIndexOutOfBoundsException和NullPointException(NPE)。
发生最多的前 5 种异常如下:
- 非法参数异常
- 数组出界异常
- 堆栈溢出异常
- 数字格式异常
- 空指针异常
1.IllegalArgumentException(IAE)
抛出它表示已使用非法索引访问了数组。索引为负数或大于或等于数组的大小。
例子:
Java
// IllegalArgumentException in Java
// Class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating a new thread
Thread t = new Thread();
// valid in thread
t.setPriority(10);
// invalid(IllegalArgumentException(IAE))
t.setPriority(100);
}
}
Java
// ArrayIndexOutOfBoundsException in Java
// Importing all classes of
// java.util package
import java.util.*;
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Size of array is 10
// Indexes ranging [00 - 09]
int[] a = new int[10];
// Case 1: Custom index within array size
// Valid
System.out.println(a[0]);
// Case 2: Index greater than the size of the array
// Invalid
// ArrayIndexOutOfBoundsException
System.out.println(a[100]);
// ArrayIndexOutOfBoundsException
System.out.println(a[-100]);
}
}
Java
// StackOverflowException in Java
// Importing all classes of
// java.util package
import java.util.*;
// Class
public class GFG {
// Method1()
public static void methodOne()
{
// Defining Method2() in Method1()
methodTwo();
}
// Method2()
public static void methodTwo()
{
// Calling method1 in methos2()
methodOne();
}
// Main driver method
public static void main(String[] args)
{
// Calling method1() in main()
methodOne();
}
}
Java
// NumberFormatException in Java
// Importing input output java classes
import jav.io.*;
// Class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// ParseInt() takes integer value as parameter
// other values
// valid
int i = Integer.parseInt("50");
// invalid
// forInputString(A)
// NumberFormatException will be thrown
int j = Integer.parseInt("A");
// invalid
// forInputString(five)
// NumberFormatException will be thrown
int k = Integer.parseInt("five");
}
}
Java
// NullPointerException in Java
// Importing all classes of
// java.util package
import java.util.*;
// Class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Assigning null to string
String str = null;
// Calculating length of string
// Forcefully printing length which throws
// NullPointerException
System.out.println(str.length());
}
}
输出:
2. ArrayIndexOutOfBoundsException
ArrayIndexOutOfBoundsException 是仅在运行时抛出的运行时异常。 Java编译器在程序编译期间不会检查此错误。
例子:
Java
// ArrayIndexOutOfBoundsException in Java
// Importing all classes of
// java.util package
import java.util.*;
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Size of array is 10
// Indexes ranging [00 - 09]
int[] a = new int[10];
// Case 1: Custom index within array size
// Valid
System.out.println(a[0]);
// Case 2: Index greater than the size of the array
// Invalid
// ArrayIndexOutOfBoundsException
System.out.println(a[100]);
// ArrayIndexOutOfBoundsException
System.out.println(a[-100]);
}
}
输出:
3. 堆栈溢出错误
StackOverflowError 是Java不允许捕获的错误,例如堆栈空间不足,因为它是人们可能遇到的最常见的运行时错误之一。 StackOverflowError 的主要原因是我们没有为我们的递归函数或模板提供适当的终止条件,这意味着它会变成一个无限循环。
例子:
Java
// StackOverflowException in Java
// Importing all classes of
// java.util package
import java.util.*;
// Class
public class GFG {
// Method1()
public static void methodOne()
{
// Defining Method2() in Method1()
methodTwo();
}
// Method2()
public static void methodTwo()
{
// Calling method1 in methos2()
methodOne();
}
// Main driver method
public static void main(String[] args)
{
// Calling method1() in main()
methodOne();
}
}
输出:
4. 数字格式异常:
当强制将字符串转换为数值但不支持输入字符串的格式时抛出此异常。例如,将字符串解析为整数,其中在字符串中分配了 NULL 会引发未经检查的异常。
例子:
Java
// NumberFormatException in Java
// Importing input output java classes
import jav.io.*;
// Class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// ParseInt() takes integer value as parameter
// other values
// valid
int i = Integer.parseInt("50");
// invalid
// forInputString(A)
// NumberFormatException will be thrown
int j = Integer.parseInt("A");
// invalid
// forInputString(five)
// NumberFormatException will be thrown
int k = Integer.parseInt("five");
}
}
输出:
5. 空指针异常
Null 是Java中使用的特殊值。它主要用于表示没有给引用变量赋值。这是一个运行时异常,其中可以将特殊的空值分配给对象引用。当程序尝试使用具有空值的对象引用时,将引发 NullPointerException。
例子:
Java
// NullPointerException in Java
// Importing all classes of
// java.util package
import java.util.*;
// Class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Assigning null to string
String str = null;
// Calculating length of string
// Forcefully printing length which throws
// NullPointerException
System.out.println(str.length());
}
}
输出:
Note:: There are two more exceptions that do occurs frequently
- NoClassDefFound where the definition for the corresponding class is missing
- ClassCastException is runtime exception where a class is improperly casted from one type to another.