📜  如何解决Java中的类转换异常?

📅  最后修改于: 2022-05-13 01:54:37.940000             🧑  作者: Mango

如何解决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