如何解决Java中的类转换异常?
扰乱程序正常流程的无例外、不需要的事件称为Exception 。大多数时候异常是由我们的程序引起的,这些都是可以恢复的。示例:如果我们的程序要求是从位于美国的远程文件中读取数据 在运行时,如果远程文件不可用,那么我们将得到 RuntimeException 说 fileNotFoundException。如果发生fileNotFoundException,我们可以将本地文件提供给程序以正常读取并继续程序的其余部分。
Java中的异常主要有以下两种:
1、受检异常:在运行时为了程序的顺利执行而被编译器检查的异常称为受检异常。在我们的程序中,如果有可能出现已检查异常,那么我们应该处理该检查异常(通过 try-catch 或 throws 关键字),否则我们将得到编译时错误。
已检查异常的示例有classNotFoundException、IOException、SQLException 等。
2. Unchecked Exception:未经编译器检查的异常,无论程序员是否处理这类异常,都称为unchecked 异常。
未检查异常的示例有ArithmeticException、ArrayStoreException 等。
仅当在编译时没有机会发生任何异常时,异常是检查还是未检查,每个异常才会在运行时发生。
ClassCastException:它是 RuntimeException 的子类,因此它是一个未经检查的异常。每当我们试图将一个类从一种类型错误地类型转换为另一种类型时,即当我们试图将父对象类型转换为子类型时,或者当我们尝试将一个对象类型转换为它不是它的子类时,JVM 会自动引发此异常实例。
在下面的程序中,我们创建了一个 Object 类型的对象 o 并将该对象 o 类型转换为 String 对象 s。我们知道 Object 类是Java中所有类的父类,当我们试图将父对象类型转换为其子类型时,最终我们得到Java.lang.ClassCastException
Java
// import required packages
import java.io.*;
import java.lang.*;
import java.util.*;
// driver class
class geeks {
// main method
public static void main(String[] args)
{
try {
// creating an object
Object o = new Object();
// type casting the object o to string which
// give the classcasted exception because we
// type cast an parent type to its child type.
String s = (String)o;
System.out.println(s);
}
catch (Exception e) {
System.out.println(e);
}
}
}
Java
// import required packages
import java.io.*;
import java.lang.*;
import java.util.*;
// driver class
class geeks {
// main method
public static void main(String[] args)
{
try {
// creating an object
String s = "GFG";
Object o = (Object)s;
// Object class is parent class of every class
// Hence exception doesn't occur.
System.out.println(o);
}
catch (Exception e) {
System.out.println(e);
}
}
}
java.lang.ClassCastException: class java.lang.Object cannot be cast to class java.lang.String (java.lang.Object and java.lang.String are in module java.base of loader 'bootstrap')
为了处理 ClassCastException,请注意,当您尝试将一个类的对象类型转换为另一个类时,请确保新类型属于其父类之一,或者不要尝试将父对象类型转换为其子类型。在使用集合时,我们可以通过使用泛型来防止 ClassCastException,因为泛型提供了编译时检查。
下面是问题陈述的实现:
Java
// import required packages
import java.io.*;
import java.lang.*;
import java.util.*;
// driver class
class geeks {
// main method
public static void main(String[] args)
{
try {
// creating an object
String s = "GFG";
Object o = (Object)s;
// Object class is parent class of every class
// Hence exception doesn't occur.
System.out.println(o);
}
catch (Exception e) {
System.out.println(e);
}
}
}
GFG