黑马程序员技术交流社区

标题: 编译通过,运行报错,为什么? [打印本页]

作者: itisdream    时间: 2014-7-5 21:33
标题: 编译通过,运行报错,为什么?
ArrayList<Integer> collection3 = new ArrayList<Integer>();
collection3.add(5);
collection3.add(6);
int i = Integer.valueOf("abc").intValue();
collection3.add(i);
System.out.println("collection3====="+collection3);
编译可以通过,运行有错为什么?
作者: 黎志勇    时间: 2014-7-5 21:38
本帖最后由 黎志勇 于 2014-7-5 21:47 编辑
  1. int i = Integer.valueOf("abc").intValue();
复制代码

把一个非数字字符串"abc"转成整形的数字,那怎么转?当然报异常。往里面填个"100"之类的数字字符串就可以了,注意不要超过int的数值范围。
作者: endian11    时间: 2014-7-5 21:56
编译时只检查基本的语法错误 ,逻辑上错误只能在运行时才晓得
作者: ⋛⋌⋚JEEP    时间: 2014-7-5 23:51
本帖最后由 ⋛⋌⋚JEEP 于 2014-7-5 23:55 编辑

楼上的说法都很对!就此简单表述一下:

  1. int i = Integer.valueOf("abc").intValue();创建一个字符串,由于该字符串的值不能解析为整数包装类类型Integer,所以抛出异常;编译时,你已经抛出异常了,语法没错,可以通过;但是运行时,逻辑上出错,所以报错。
  2. 建议改成以下代码演示一下:
  3. String stri =new String("0123");  //创建一个数字字符串。数字大小值域[-2^31~(2^31-1)]。
  4. int str=Integer.valueOf(stri).intValue();//valueOf:返回String的值的Integer对象; intValue:返回Integer对象的int类型。
  5. System.out.println(str);
复制代码

{:3_57:}
作者: ⋛⋌⋚JEEP    时间: 2014-7-7 00:10
⋛⋌⋚JEEP 发表于 2014-7-5 23:51
楼上的说法都很对!就此简单表述一下:

luheiqi,说的没错,语法不错,不抛异常编译一样能通过的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2