为什么你能用Java扔东西?

为什么你能用Java扔东西?,java,jvm,jvm-hotspot,Java,Jvm,Jvm Hotspot,从理论上讲,在Java中只能抛出可丢弃文件 这是语言允许的,并在类加载期间进行检查。但是如果禁用类检查 java -Xverify:none -cp . BadClassThatCompiles 然后,您可以运行一个抛出任何类的类(不是从Throwable派生的)() 为什么? 为什么它是这样设计的。。这意味着一个允许抛出对象的虚拟机和一个必须过滤出错误代码的验证器。好像有些代码可能是错的。这不是代码,而是设计 为什么? 为什么它是这样设计的。。这意味着一个允许抛出对象的虚拟机和一个必须过滤出

从理论上讲,在Java中只能抛出
可丢弃文件

这是语言允许的,并在类加载期间进行检查。但是如果禁用类检查

java -Xverify:none -cp . BadClassThatCompiles
然后,您可以运行一个抛出任何类的类(不是从
Throwable
派生的)()

为什么?

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

为什么?

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

为什么?

这仅仅是因为设计从几乎所有的角度工作

那么,另一种选择是什么呢

我想你必须有一种特殊的“东西”,它们不是专门为抛出而设计的类的实例

这将需要:

  • 定义这些异常非对象的新语法
  • 一套全新的键入规则来处理这些非对象(例如,它们不能是与赋值兼容的对象…)
  • 等等
最终,Java语言将更加复杂,程序员也更难使用。为了什么?稍微简化验证者的任务

对不起,但如果你从逻辑上得出结论,这个想法是不可能的



坦率地说,谁在乎你是否可以通过禁用验证器来破坏JVM呢。这就像抱怨说,如果你玩装有子弹的手枪,你可以开枪自杀。

为什么?为什么禁用验证器会让你做奇怪的事情?为什么JVM允许抛出对象@dystroy—它允许您加载字节码文件,这些字节码文件违反了旨在保护JVM免受损坏的各种规则;e、 g.从与预期返回类型不匹配的方法返回对象。这就像在玩装有子弹的手枪的杂耍。。。真是个糟糕的主意。为什么不允许在语言中扔东西呢?这似乎是一个糟糕的设计/需求不匹配…@johanematian我想如果你使用任何一种语言,我会发现许多黑客和不同的方法。没有完美的平台或语言。@StephenC-问题是:“为什么”。这是非常有建设性的。正如我所建议的,我已经清除了评论线索(或者至少是我的一部分)。