Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编译时&;运行时错误_Java - Fatal编程技术网

Java 编译时&;运行时错误

Java 编译时&;运行时错误,java,Java,我对上面的Java代码有疑问。 为什么它在第7行给出运行时异常而不是编译时错误?您不能通过强制转换将二维数组转换为一维数组。您需要以某种方式将值复制到新的一维数组。因为o1是int[]],而不是int[]。您得到的RuntimeException是一个ClassCastException,因为第一个是一个int数组数组,而后者只是一个int数组 您不会得到编译时错误,因为o1被定义为一个对象。因此,在编译时,它可以保存从object派生的任何内容,而object实际上是Java中的所有类型,除了

我对上面的Java代码有疑问。

为什么它在第7行给出运行时异常而不是编译时错误?

您不能通过强制转换将二维数组转换为一维数组。您需要以某种方式将值复制到新的一维数组。

因为o1是int[]],而不是int[]。您得到的RuntimeException是一个ClassCastException,因为第一个是一个int数组数组,而后者只是一个int数组


您不会得到编译时错误,因为o1被定义为一个对象。因此,在编译时,它可以保存从object派生的任何内容,而object实际上是Java中的所有类型,除了基本类型long、int、short、byte、char、double、float和boolean。因此,在编译时,对象可能实际上是int[]。

只要不使用强制转换,编译器就可以确定该用法是否有效。如果使用强制转换,则告诉编译器您知道自己在做什么,并且它必须使用不同的引用类型

class Dims {
    public static void main(String[] args) {
        int[][] a = {{1,2,}, {3,4}};
        int[] b = (int[]) a[1];
        Object o1 = a;
        int[][] a2 = (int[][]) o1;
        int[] b2 = (int[]) o1;   // Line 7
        System.out.println(b[1]);
    } 
}  

你有问题,或者你的家庭作业有问题?这是我正在读的一本Java书中的一个问题。这本书也有解决办法。
int[][] a = {{1, 2,}, {3, 4}};
int[] b = a[1]; // no cast is used here and the compiler can tell this is valid.
Object o1 = a;
int[][] a2 = (int[][]) o1; // This cast is fine.
int[] b2 = (int[]) o1;   // My IDE warns this case may produce a ClassCastException.
System.out.println(b[1]);