中易网

Java中数组向下转型,编译没问题,运行却报错???

答案:5  悬赏:0  
解决时间 2021-01-17 15:22
Java中数组向下转型,编译没问题,运行却报错???
最佳答案
不是编译不报错,程序就没有问题的。难道那些有bug甚至崩溃的程序没经过编译?
Java只支持一种向下转型,就是要转的类型本身就是那个类型的向上转型,比如代码中的os,父类直接转子类是会发生运行时异常的,所以如果要向下转型可以用instanceof进行判断要向下转型的父类对象是否是子类的实例,此题是if(a instanceof String[]),为真时才可转换(注意:String和String[]是不同类型)
全部回答
http://bbs.csdn.net/topics/390028191参考一下这个帖子不,希望你能找到答案;
当然不行啦,比如说:猫是动物,但是动物不一定是猫啊……
Object[] a = { "a", "b", "c" };
String[] b = { "q", "a", "f" };
Object[] os = (Object[]) b; //向上转型,可以输出,没有问题
System.out.println(Arrays.toString(os));
System.out.println("------------");
String[] as = new String[a.length]; //向下强转,编译没有任何问题,运行报错???
for (int i = 0; i < as.length; i++)
{
as[i] = (String)a[i];
}
System.out.println(Arrays.toString(as));
或者instanceof

异常提示不可以直接转,换这样写String[] as = Arrays.asList(a).toArray(new String[0]);
楼主你首先异常那里概念没有弄清,在java中分为运行时异常runtime Exception,以及一般的Exception,如图

你这个就属于运行时异常,编译是不会报错的,编译不报错不代表没有错误,你写个int a =1;int b = 0;  输出 a/b编译也不会出粗,但是运行就报除数不为0异常了。追问我的重点是,为什么向下转型会报错?追答楼上已经给出解释了( 猫是动物,但是动物不一定是猫啊……)
编译时,编译器看的是引用变量的类型,只要它是目的类型的父类或子类或者同类型,编译就通的过。而运行时,还是要看它实际引用的对象的类型,若目的类型跟实际引用类型没有关系,就会报类型转换异常了……
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
蒙优是专门做冷榨油的吗?
现在2018届初中可以复读吗
无锡市美心双语幼儿园地址有知道的么?有点事
航旅旅行社地址在什么地方,我要处理点事
诚于嘉许 宽于称道 是什么意思?
有一个底面积是200平方厘米,高是十二厘米的
什么是拉爆膨胀螺丝?
歌词有Baby I`m fall in love with you 是哪
梦幻已上锁的物品在全面解锁之后,为什么还是
梦主忧虑,亡人之象是什么意思?
其实魅族应该研究研究pro5为什么大卖
XQ造型地址在哪,我要去那里办事
今天运河边捡的,求看是老的东西么
台州路桥金恩教育有几家,质量怎么样?
聋人怎么用文雅的词形容
推荐资讯
这是什么红啊
39比42化简比并求比值
请问我养的蜜蜂看见有野蜂飞出飞进怎么办?
妒忌的意思
红心咸蛋怎么做
胚胎培养一天叫什么
酸枣吃多了有什么坏处?
k339,12车厢靠窗座位,尾号是多少啊?谢谢
有哪些鸟能在人肩膀上停着?????????
长春滚石琴行大安分行怎么去啊,有事要去办理
吊扇声音大怎么修理
今年法硕到底是难还是简单
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?