为什么你能用Java扔东西?

时间:2013-03-04 11:05:51

标签: java jvm jvm-hotspot

在Java 理论上,您只能抛出Throwables

语言允许这种情况,并在课程加载期间进行检查。但是如果你禁用了班级检查

java -Xverify:none -cp . BadClassThatCompiles

然后你可以运行一个抛出任何类的类(不是从Throwable派生的)(Example

为什么吗

为什么这样设计..意味着允许抛出对象的虚拟机和必须过滤掉错误的代码的验证程序。好像某些代码可能是错误的。这不是代码,而是设计!

为什么?

1 个答案:

答案 0 :(得分:4)

  

为什么这样设计..意味着允许抛出对象的虚拟机和必须过滤掉错误代码的验证器。好像有些代码可能是错的。这不是代码,而是设计!

     

为什么?

仅仅因为设计几乎可以从所有角度出发。

那么替代方案会是什么?

我猜你必须要有一种特殊的“东西”,这些东西不是为了被抛出而设计的类的实例。

这需要:

  • 用于定义这些异常非对象的新语法
  • 处理这些非对象的一整套新的输入规则(例如,它们不能与赋值兼容的对象...)
  • 等等。

在一天结束时,Java语言会更复杂,并且对程序员来说更难使用。到底是什么?略微简化验证者的任务?

很抱歉,但如果按照合乎逻辑的结论,这个想法是不可能的。


坦率地说,如果你可以通过禁用验证程序来破解JVM,关心。它就像抱怨你可以自己射击,如果你玩耍装满手枪。