try
{
def();
}
catch (IOException e)
{
throw e;
}
catch (Exception e)
{
throw new RuntimeException(e);
}
现在我必须使用一个直接处理字节码的框架(BAT-Bytecode Analysis Toolkit)。
首先,catch块在字节码中是如何表示的?如何检测其中的抛出语句?
每个方法都有一个异常表,该表将指令和异常类型的范围映射到异常处理程序(它的入口点)。这并不总是很容易翻译回Java代码。但通常,您需要检查这个表,然后分析从这些入口点可到达的代码。所有这些代码都属于catch
子句。那么这只是识别athrow
指令的问题。
使用javap
或其他好的字节码可视化工具进行操作并更好地理解它。完成代码、编译代码并使其服从javap
将产生:
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void def() throws java.io.IOException;
Code:
0: new #2; //class java/io/IOException
3: dup
4: invokespecial #3; //Method java/io/IOException."<init>":()V
7: athrow
public static void main(java.lang.String[]) throws java.io.IOException;
Code:
0: invokestatic #4; //Method def:()V
3: goto 19
6: astore_1
7: aload_1
8: athrow
9: astore_1
10: new #6; //class java/lang/RuntimeException
13: dup
14: aload_1
15: invokespecial #7; //Method java/lang/RuntimeException."<init>":(Ljava/lang/Throwable;)V
18: athrow
19: return
Exception table:
from to target type
0 3 6 Class java/io/IOException
0 3 9 Class java/lang/Exception
}
对于main
方法,我们有两个异常入口点(“targets”):6和9。在6之后,我们在偏移量8处有一个athrow
。在入口点9之后,我们在偏移量18处有一个athrow
。就是这样!
在我必须进行的猜测游戏中,我需要包含一个带有两个catch子句的try-catch块(一个多catch块用于我的两个自定义异常:和,一个块用于)。 我试图在程序中创建条件来抛出自定义异常,因为我不知道它们如何正常工作的逻辑。我有编译错误,希望能帮助重新运行我的程序,以便它正确地实现try-catch块。 我的自定义异常类: 我的程序有编译错误:
本文向大家介绍JavaScript语句错误throw、try及catch实例解析,包括了JavaScript语句错误throw、try及catch实例解析的使用技巧和注意事项,需要的朋友参考一下 try 语句测试代码块的错误。 catch 语句处理错误。 throw 语句创建自定义错误。 finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行。 JavaScr
我有一个包含两个方法的类,每个方法都有一个try-catch块来查找任何异常。 代码如下: 我提出了一个测试用例,使用Mokito来测试上述场景,但不知道如何进入上述的catch块 我试图提出一个NullPointerException,但catch块仍然没有出现在CodeOverage中(我假设它没有经过测试)。请帮我写一个Junit测试用例来输入异常。我对所有这些话题都很陌生。
问题内容: 我读取了大约1000个文件名,其中一些文件以UTF8编码,而某些文件为CP1252。 我想将它们全部解码为Unicode,以便在脚本中进行进一步处理。有没有一种方法可以使源编码正确解码为Unicode? 例: 问题答案: 如果您的文件位于和中,则有一种简单的方法。 否则,有一个字符集检测库。 Python-检测字符集并转换为utf-8 https://pypi.python.org/p
问题内容: 在内部使用try / catch或在内部使用try / catch的正确方法是什么? 与 问题答案: 在我看来,我的观点是: 以上是正确的方法。 因为,使用这种方法,如果与数据库的连接存在异常,则将其捕获在catch块内。但是使用第一种方法,则不会。
如何通过CBC或ECB模式检测邮件是否为加密? 我已经做了一个函数,它可以在AES 128 CBC或ECB中随机加密,我可以在明文和密文之间进行汉明,但与密码模式无关。 如何检测分组密码模式? 先谢谢你