当前位置: 首页 > 知识库问答 >
问题:

不可追踪的异常

孟花蜂
2023-03-14

是否有可能用Java构造一段代码,从而生成一个假设的Java。lang.chucknorriseException不可修补?

想到的想法是使用例如拦截器或面向方面的编程。

共有3个答案

周云
2023-03-14

除此之外,显然必须使用系统。退出(整数最小值)

孟跃
2023-03-14

在考虑了这一点之后,我成功地创建了一个不可跟踪的异常。然而,我选择给它取名为朱尔斯·温菲尔德,而不是查克,因为它是一个例外。此外,这可能不是你想要的,但肯定不会被发现。注意:

public static class JulesWinnfield extends Exception
{
    JulesWinnfield()
    {
        System.err.println("Say 'What' again! I dare you! I double dare you!");
        System.exit(25-17); // And you shall know I am the LORD
    }
}
    
    
public static void main(String[] args)
{       
    try
    {
        throw new JulesWinnfield();
    } 
    catch(JulesWinnfield jw)
    {
        System.out.println("There's a word for that Jules - a bum");
    }
}

瞧!未捕获的例外。

输出:

运行:

再说一遍什么!你敢不敢!我敢加倍!

Java结果:8

生成成功(总时间:0秒)

当我有更多的时间,我会看看我是否能想出其他的东西,以及。

还有,看看这个:

public static class JulesWinnfield extends Exception
{
    JulesWinnfield() throws JulesWinnfield, VincentVega
    {
        throw new VincentVega();
    }
}

public static class VincentVega extends Exception
{
    VincentVega() throws JulesWinnfield, VincentVega
    {
        throw new JulesWinnfield();
    }
}


public static void main(String[] args) throws VincentVega
{
    
    try
    {
        throw new JulesWinnfield();
    }
    catch(JulesWinnfield jw)
    {
        
    }
    catch(VincentVega vv)
    {
        
    }
}

导致堆栈溢出——同样,异常保持未捕获状态。

袁英豪
2023-03-14

我还没有尝试过这个,所以我不知道JVM是否会限制这样的东西,但也许你可以编译抛出ChuckNorriseException的代码,但在运行时提供ChuckNorriseException的类定义,它不扩展Throwable。

更新:

这不管用。它会生成一个验证器错误:

Exception in thread "main" java.lang.VerifyError: (class: TestThrow, method: ma\
in signature: ([Ljava/lang/String;)V) Can only throw Throwable objects
Could not find the main class: TestThrow.  Program will exit.

更新2:

实际上,如果你禁用字节码验证器,你就可以让它工作!(-X验证:无

更新3:

对于那些从家里来的人,以下是完整的脚本:

创建以下类:

public class ChuckNorrisException
    extends RuntimeException // <- Comment out this line on second compilation
{
    public ChuckNorrisException() { }
}

public class TestVillain {
    public static void main(String[] args) {
        try {
            throw new ChuckNorrisException();
        }
        catch(Throwable t) {
            System.out.println("Gotcha!");
        }
        finally {
            System.out.println("The end.");
        }
    }
}

编译类:

javac -cp . TestVillain.java ChuckNorrisException.java

运行:

java -cp . TestVillain
Gotcha!
The end.

注释出扩展RuntimeExctive并重新编译ChuckNorrisException.java

javac -cp . ChuckNorrisException.java

运行:

java -cp . TestVillain
Exception in thread "main" java.lang.VerifyError: (class: TestVillain, method: main signature: ([Ljava/lang/String;)V) Can only throw Throwable objects
Could not find the main class: TestVillain.  Program will exit.

无需验证即可运行:

java -Xverify:none -cp . TestVillain
The end.
Exception in thread "main"
 类似资料:
  • 主要内容:可追溯性矩阵的目标可追踪性矩阵是一种表格类型的文档,用于开发软件应用程序以跟踪需求。它可用于向前(从需求到设计或编码)和向后(从编码到需求)跟踪。它也称为需求可追踪性矩阵(RTM)。 通常,这就像一个包含表格的工作表文档,但是还有许多用户定义的可追溯性矩阵模板。可追溯性矩阵中的每个要求都与其各自的测试用例相关联,以便可以根据具体要求顺序执行测试。 下面给出一个表作为示例,以便可以理解可追溯性矩阵的格式: 业务需求

  • 问题内容: 我想在我的应用程序中为客户打印发票。每个发票都有一个 发票ID 。我希望ID为: 顺序的(最近输入的ID迟到) 32位整数 *像1 2 3这样 *不易 追踪,以至于人们无法分辨我们卖出了多少商品。 我自己的一个想法: 自特定日期和时间以来 的 秒数 (例如1/1/2010 00 AM)。 还有其他想法如何生成这些数字? 问题答案: 我不喜欢浪费时间。您可能会遇到各种各样的问题-时差,在

  • 页面追踪分为两部分: 时间筛选 和 页面追踪列表详情 1.时间筛选 便捷按钮有今日、昨日、前日、上周 X、近七天,并且能自定义选择时间段 2.页面追踪列表 1)通过页面本身的热区来监测页面内容的热度,点击越多的内容越亮,反之则越暗 2)可以非常快速地观察到网页中的点击分布情况 注意:该功能正在优化中,暂时不对外开放。

  • Akka使用 GitHub Issues作为其问题跟踪系统。 浏览 Tickets 在提交一张ticket之前,请检查现有的Akka tickets是否在早些时候报告了同样的问题。非常欢迎你在现有的ticket中发表评论,尤其是当你有可以分享的重复性测试用例的时候。 路线图 请参看Akka路线图,以找出即将发行的Akka版本中的总体主题。 创建ticket 请包括 Scala 和Akka的版本及相

  • 在Git中‘追踪分支’是用与联系本地分支和远程分支的. 如果你在’追踪分支'(Tracking Branches)上执行推送(push)或拉取(pull)时, 它会自动推送(push)或拉取(pull)到关联的远程分支上. 如果你经常要从远程仓库里拉取(pull)分支到本地,并且不想很麻烦的使用"git pull "这种格式; 那么就应当使用‘追踪分支'(Tracking Branches). ‘

  • 关键字 defer 允许我们推迟到函数返回之前(或任意位置执行 return 语句之后)一刻才执行某个语句或函数(为什么要在返回之后才执行这些语句?因为 return 语句同样可以包含一些操作,而不是单纯地返回某个值)。 关键字 defer 的用法类似于面向对象编程语言 Java 和 C# 的 finally 语句块,它一般用于释放某些已分配的资源。 示例 6.8 defer.go: packag