概述
RuntimeException
是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的
RuntimeException
的任何子类都无需在
throws
子句中进行声明。它是Exception的子类。
public String getName(Cat c){ return c.name; }
这段代码用来获取Cat对象:c的姓名,这里的c为null时,100%会出现空指针错误了。
保险的作法是在执行name方法前先检查u是否为空?
public String getName(Cat c){ if (c == null){ return null; } return c.name; }
这样就不会导致出现空指针异常了,一个经验,对于那些可能为空的对象进行操作时,一定要检查是否为空,可避免空指针异常。
public static String getName(Cat c){ Optional<Cat> cat = Optional.ofNullable(s); if (!cat.isPresent()){ return "is Null"; } return c.get().name; }
或者简写:
public static String getName(Cat s){ return Optional.ofNullable(s).map(sl-> sl.name).orElse("is Null"); }
import java.text.SimpleDateFormat; import java.util.Date; public class test{ public static void main(String[] args) { Date day = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date = df.format(day); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM"); String format = dateFormat.format(date); System.out.println(format); } }
运行会报错:
无法将给定的对象作为日期格式化,即因为传递了一个错误的参数。
import java.util.*; public class test{ public static void main(String[] args){ List<String> list = new ArrayList<>(); System.out.println(list.get(0)); } }
运行时会报错
public class test{ public static void main(String[] args) { String[] array = {"a", "b"}; Object[] o = array; System.out.println(o.getClass()); o[0] = new Object(); } }
运行时会报错
代码中将String[]类型的数组向上转型成为Object[]数组,而真正在运行时,打印出来该数组的实际类型依旧是String[]数组,之后向该数组插入一个Object类型的元素时,抛出异常。
测试示例2:
import java.util.*; public class test{ public static void main(String[] args) { List<String> list = Arrays.asList("a", "b"); System.out.println(list.getClass()); Object[] o = list.toArray(); System.out.println(o.getClass()); o[0] = new Object(); } }
运行时报错
代码中声明了一个List<String>的集合,运行时得到的是Arrays的内部类ArrayList类型。通过toArray()方法后,实际得到的是String[]数组,也不是Object[]数组,之后插入Object类型的元素时,抛出异常。
import java.util.*; public class test{ public static void main(String[] args) { String str = "a123"; int i = Integer.parseInt(str); System.out.println("Integer value = " + i); System.out.println("value = " + str); } }
运行时报错
解决方案:
只需删除任何非数字字符;
System.out.println("Integer value = " + str.replaceAll("[^0-9]", ""));
public class BaiDu { String name = "baidu"; } public class JingYan extends BaiDu{ String Cname = "jingyan"; } public class test{ public static void main(String[] args) { BaiDu baidu = new BaiDu(); JingYan jingyan = new JingYan(); //这里将定义了的baidu赋值给jingyan //由于类型不一致,所以要进行强制转换,用JingYan这个类来进行强制转换 jingyan = (JingYan) baidu; System.out.println(jingyan); } }
运行时报错
修改代码
public class test{ public static void main(String[] args) { BaiDu baidu = new BaiDu(); JingYan jingyan = new JingYan(); baidu = (BaiDu) jingyan; System.out.println(jingyan); } }
这里是把jingyan赋值给baidu,由于类型不一致,所以要进行类型强制转化,用BaiDu这个类来进行强制转换。
由此我们可以知道,可以用父类对象去强制转换为子类对象,但是不能用子类对象去强制转换呈匪类对象就会报错,或者使用子类对象 = 父类对象。
java.lang.UnsupportedOperationException
异常。把数组转化为 List 的操作代码如下
String[] stringArray = ResourcesUtils.getStringArray(R.array.home_channel); List<String> stringList = Arrays.asList(stringArray); stringList.remove(0)
运行时报错
Caused by: java.lang.UnsupportedOperationException
原因:
java.lang.UnsupportedOperationException 是指请求的方法不被支持的异常。
在从 Arrays.asList() 转化过来的 List 的不支持 add() 和 remove() 方法,这是由于从 Arrays.asList() 返回的是返回 java.util.Arrays$ArrayList ,而不是 ArrayList。
一般首先要判断一下传入是是否大于0才做出相应的操作,这样就不会提示错误。
转载于:https://www.cnblogs.com/lixiansheng/p/11299880.html
最后
以上就是凶狠耳机为你收集整理的(十五)、常见的几种RuntimeException的全部内容,希望文章能够帮你解决(十五)、常见的几种RuntimeException所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复