Java 为什么带字符串编码参数的扫描程序构造函数不会引发UnsupportedEncodingException?
如果Java 为什么带字符串编码参数的扫描程序构造函数不会引发UnsupportedEncodingException?,java,encoding,character-encoding,Java,Encoding,Character Encoding,如果字符串编码是构造函数的参数,则java.io和Formatter中几乎所有类的构造函数都会抛出checkedUnsupportedEncodingException 但Scanner完全不同——如果编码参数拼写错误,它只抛出runtineIllegalArgumentException 在所有java API中,扫描器类构造函数似乎是唯一一个不抛出checked UnsupportedEncodingException的构造函数(使用字符串编码构造函数的参数),只抛出运行时IllegalAr
字符串编码
是构造函数的参数,则java.io和Formatter中几乎所有类的构造函数都会抛出checkedUnsupportedEncodingException
但Scanner完全不同——如果编码参数拼写错误,它只抛出runtineIllegalArgumentException
在所有java API中,扫描器类构造函数似乎是唯一一个不抛出checked UnsupportedEncodingException的构造函数(使用字符串编码构造函数的参数),只抛出运行时IllegalArgumentException。
为什么呢?仅仅是设计/兼容性方面的怪癖或是背后的深层次推理?首先,唯一能够明确回答这一问题的人是设计相应接口的人 我认为这个决定是故意的
UnsupportedEncodingException
异常有点异常:
- 这是一个已检查的异常,但有令人信服的理由认为应该取消检查:
- 如果实际引发了
,则很可能是编程错误导致的,而不是应用程序能够从中恢复的错误UnsupportedEncodingException
- 最常见的用例之一是将字符串“UTF-8”作为编码名称。Java规范保证UTF-8将始终由兼容的JVM支持,但是由于检查了异常,我们仍然需要编写一个处理程序。。。为了一个不可能发生的失败
考虑到这些问题,我认为设计师决定最好不要在
扫描仪中使用未经支持的编码异常
,在请求的编码不受支持的情况下使用未经检查的异常。除了给出意见或猜测之外,几乎不可能回答。我猜这个构造函数是在1.7版本中创建的,当时,检查异常已经被认为是一个坏主意,特别是在99%的情况下,字符集是,我不知情的猜测是UnsupportedEncodingException很难处理,因为它是一个需要显式处理的检查异常(没有人喜欢这些)。涉及到这一点,并引入了传递字符集对象而不是字符串的重载,因此将来情况可能会更好。