枚举的构造函数中抛出异常会怎样
编程技术  /  houtizong 发布于 3年前   313
public enum Singleton {INSTANCE;}
枚举值 如果是完备集,可以用Enum,比如:ENABLE, DISABLE。 如果是业务种类,以后明显会有类型增加,不建议用Enum,可以用String代替。 如果是在返回值中用了Enum,并新增了Enum值,建议先升级服务消费方,这样服务提供方不会返回新值。 如果是在传入参数中用了Enum,并新增了Enum值,建议先升级服务提供方,这样服务消费方不会传入新值。
public enum EnumSingleton { INSTANCE; private EnumSingleton () { //模拟在构造函数中抛出异常的情况。实际情况中可能抛异常的情况包括:读取配置文件时文件不存在,连接数据库失败等等。 int i = 1 / 0; } public String hello() { return "hello"; }}public class LazyClassSingleton { private static LazyClassSingleton instance; private LazyClassSingleton () { int i = 1 / 0; } public static synchronized LazyClassSingleton getInstance () { if (instance == null) { instance = new LazyClassSingleton(); } return instance; } public String hello() { return "hello"; }}public class EagerClassSingleton { private static EagerClassSingleton instance = new EagerClassSingleton(); private EagerClassSingleton () { int i = 1 / 0; } public static EagerClassSingleton getInstance() { return instance; } public String hello() { return "hello"; }}public class TestSingleton { public static void main(String[] args){// testEnumSingleton();// testEagerClassSingleton(); testLazyClassSingleton(); } public static void testEnumSingleton() { try { System.out.println(EnumSingleton.INSTANCE.hello()); } catch (Throwable e) { //抛出的是Error:java.lang.ExceptionInInitializerError。如果“catch Exception”而不是“catch Throwable”的话,那就捕获不到出错信息了 System.out.println(e); } } public static void testEagerClassSingleton() { try { System.out.println(EagerClassSingleton.getInstance().hello()); } catch (Throwable e) { //抛出的是Error:java.lang.ExceptionInInitializerError。如果“catch Exception”而不是“catch Throwable”的话,那就捕获不到出错信息了 System.out.println(e); } } public static void testLazyClassSingleton() { try { System.out.println(LazyClassSingleton.getInstance().hello()); } catch (Exception e) { //抛出的是Exception:java.lang.ArithmeticException System.out.println(e); } }}
public class Person { public Person (int age) { if (age < 0) { throw new IllegalArgumentException("age cannot be less than 0"); } }}
try { Person p = new Person(20); } catch (Exception e) { e.printStackTrace(); }
public class Person { private int age; public Person (int age) { this.age = age; }}
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接