从Map、JSONObject取不存在键值对时的异常情况
2016-03-17 15:00
567 查看
1.在Map中取不存在的键值对时不会报异常,只会返回null。
2.在JSONObject中取不存在的键值对时分两种情况:
利用jSONObject.get(Object key)方法及get(String key)取不存在的键值对时不会报异常,会返回null;但是利用jSONObject.getxxx(String key)方法取时会报空指针异常:
对null处理时会报空指针异常:
如果是Object null,则可以转为其他类型的null,因为其他类型都是Object的子类。但是其他类型的null不能随便转类型,除非是有父子关系的类型。例如,如果String类型的想转为User类型的,就会有编译错误,说Cannot cast from String to User。
@Test public void testMap() { Map<String, Object> map = new HashMap<String, Object>(); map.put("d", 10); Object b = map.get("c"); System.out.println(b); } //打印结果是:null。结论:从map中取出不存在的键值对时不会报异常,会返回null。
2.在JSONObject中取不存在的键值对时分两种情况:
利用jSONObject.get(Object key)方法及get(String key)取不存在的键值对时不会报异常,会返回null;但是利用jSONObject.getxxx(String key)方法取时会报空指针异常:
@Test public void testJSONObject() { Map<String, Object> map = new HashMap<String, Object>(); map.put("d", 10); JSONObject jSONObject = JSONObject.fromObject(map); int xx = jSONObject.getInt("d"); System.out.println(xx); // 从jSONObject中用get(Object key)方法取出不存在的键值对时不会报异常,会返回null Object y = jSONObject.get("dd"); System.out.println(y); // 从jSONObject中用getxxx(String key)方法取出不存在的键值对时报异常 String y2 = jSONObject.getString("dd"); System.out.println(y2); }
对null处理时会报空指针异常:
@Test public void testNull() { Object o = null; System.out.println(o); String s = (String) o; System.out.println(s); // System.out.println(s.getClass()); User u = (User) o; System.out.println(u); // System.out.println(u.getClass()); } //打印结果: //null //null //null分析可知:不管null是何种类型,Object null或者String null或者其他类型的null,调用getClass()方法时都会报空指针异常。
如果是Object null,则可以转为其他类型的null,因为其他类型都是Object的子类。但是其他类型的null不能随便转类型,除非是有父子关系的类型。例如,如果String类型的想转为User类型的,就会有编译错误,说Cannot cast from String to User。
相关文章推荐
- Object类
- Objective-C 【对于@property功能的新认识(setter、getter)】
- Objective-C中 ==、isEqual、isEqualToString判断字符串相等
- 转载_理解 Objective-C Runtime
- JSON: Python Objects与String之间转换【json.dumps把python任意数据类型转换成字符串,json.loads把字符串转换为unicode编码】
- JSONObject和JSONArray的使用
- RPL objective function & simulation using DGRM model in cooja
- Qt MetaObject System详解
- BOOST内存管理(一) --- boost::object_pool
- 关于Object.clone克隆方法的测试
- object-c 的runtime.h
- Objective-C 中的 instancetype 和 id 关键字
- Selective Search for Object Recognition
- 在Tamarin中 3D Touch 的使用
- Object-C基础-02-第一个OC的类
- Object-C基础-03-点语法
- Object-C基础-04-自定义构造方法和description方法
- Object-C基础-05-self关键字
- Object-C基础-06-空指针和野指针
- Objective-C中的instancetype和id区别