当前位置: 首页 > 面试题库 >

当我从本地Java方法抛出C ++异常时会发生什么?

经炜
2023-03-14
问题内容

假设我将Sun的JVM嵌入C ++应用程序中。通过JNI,我调用了Java方法(我自己的),该方法又调用了我在共享库中实现的本机方法。

如果此本机方法抛出C ++异常,会发生什么?

编辑:编译器是gcc 3.4.x,jvm是sun的1.6.20。


问题答案:

在JNI文献中,“ 异常 ”一词似乎专门用于指代Java异常。本机代码中发生的意外事件称为 编程错误
。JNI明确不需要JVM检查编程错误。如果发生编程错误,则行为不确定。不同的JVM的行为可能有所不同。

将所有编程错误转换为返回代码或Java异常是本机代码的责任。Java异常不会立即从本机代码中抛出。它们可以处于 待处理状态
,只有在本机代码返回到Java调用程序后才抛出。本机代码可以使用来检查未决的异常,ExceptionOccurred并使用来清除它们ExceptionClear



 类似资料:
  • 我注意到,在这个javadoc中,https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.UncaughtExceptionHandler.htmlUncaughtExceptionHandler用于发生异常但未被捕获的情况。但是,那个线程会悄悄地失败吗?我想是的,因为它是异步进行业务的,但我正在调查我们的一个进程的相关问题,我很惊讶现

  • 该文件指出 Lambda函数可能由于以下任何原因而失败: 函数在尝试到达终结点时超时。 函数无法成功解析输入数据。 该函数会遇到资源限制,例如内存不足错误或其他超时。 我的问题:如果我使用SQS Lambda集成(.NET) 我的函数引发异常 我的SQS可见性计时器设置为15分钟,最大接收计数为1,DLQ设置 函数会重试吗?当所有重试后抛出异常时,它会放入DLQ吗?

  • 抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因

  • 问题内容: 我有这样的方法: 我想抛出一个内。编译器不允许我这样做,因为不允许将我的方法扔在那里。但是我需要抛出一个的子类来进行测试 (我不能抛出Unchecked)。显然这是一个hack,但我需要进行测试。我尝试过EasyMock,但它也不允许我这样做。任何想法如何做到这一点? 谢谢,肖恩·阮 问题答案: 方法1: Alexey Ragozin的这篇文章介绍了如何使用泛型技巧引发未声明的检查异常

  • 我在其中一个POJO中使用javax.validation.constraints.NotNull,如下所示: 然后,即使我为两个字段都使用 null 值制作 Abc 的对象,它也不会引发任何异常。知道为什么吗? 例如。 不会抛出任何异常。

  • 这是我的申请 数据源:类型:com.zaxxer.hikari.HikariDataSource主要: 这是我的入门: 这是我的例外: 2017-11-21 10:10:33.126线程“main”中的表现:java.lang.运行时异常: java.lang.ClassCastException: 无法将 com.mysql.cj.jdbc.Driver to javax.sql.DataSou