caller callee c语言 函数调用_Java invoke

caller callee c语言 函数调用_Java invoke1、什么是JVM?JVM本质上就是一个软件,是计算机硬件的一层软件抽象,在这之上才能够运行Java程序,JAVA在编译后会生成类似于汇编语言的JVM字节码,与C语言编译后产生的汇编语言不同的是,C编译成的汇编语言会直接在硬件上跑,但JAVA编译后生成的字节码是在J今天在遇到个问题,如何在callee中获取caller的信息?搜索了一下,java提供一种如下的方法:StackTraceElemen…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1、什么是JVM? JVM本质上就是一个软件,是计算机硬件的一层软件抽象,在这之上才能够运行Java程序,JAVA在编译后会生成类似于汇编语言的JVM字节码,与C语言编译后产生的汇编语言不同的是,C编译成的汇编语言会直接在硬件上跑,但JAVA编译后生成的字节码是在J

今天在遇到个问题,如何在callee中获取caller的信息?

搜索了一下,java提供一种如下的方法:

StackTraceElement stack[] = (new Throwable()).getStackTrace();

即可获得相应的调用栈中的信息。

方法其实类似new 一个Exception ,然后printStackTrace…….

但是有大牛说这是一个不精确的方法,java并未保证可以获取caller信息的完整;

看到这个题目,很多人会觉得我写我的java代码,至于类,JVM爱怎么加载就怎么加载,博主有很长一段时间也是这么认为的。随着编程经验的日积月累,越来越感觉到了解虚拟机相关要领的重要性。闲话不多说,老规矩,先来一段代码吊吊胃口。 public class SSClass{

查阅了Java文档说明:

getStackTrace

public StackTraceElement[] getStackTrace()

Provides programmatic access to the stack trace information printed by

printStackTrace(). Returns an array of stack trace elements, each representing one stack frame. The zeroth element of the array (assuming the array’s length is non-zero) represents the top of the stack, which is the last method invocation in the sequence. Typically, this is the point at which this throwable was created and thrown. The last element of the array (assuming the array’s length is non-zero) represents the bottom of the stack, which is the first method invocation in the sequence.

Some virtual machines may, under some circumstances, omit one or more stack frames from the stack trace. In the extreme case, a virtual machine that has no stack trace information concerning this throwable is permitted to return a zero-length array from this method. Generally speaking, the array returned by this method will contain one element for every frame that would be printed by printStackTrace.

Returns:

an array of stack trace elements representing the stack trace pertaining to this throwable.

Since:

1.4

注意红色部分:某些虚拟机在一些情况下,会省略一个或多个栈信息;而甚至在某些极端case里,这个方法甚至返回一个长度为零的数组;

可见,不可以使用这种方法来保证程序的正确运行,特别是需要根据caller来进行判断处理的需求,在这种情况下只能考虑其他的方法(譬如caller在调用前传递活着设置相关信息);

那这个方法有什么用?或许在进行调试或者Log的时候可以吧?还需要调查一番。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214262.html原文链接:https://javaforall.net

(0)
上一篇 2025年7月16日 上午11:43
下一篇 2025年7月16日 下午12:15


相关推荐

  • 奇安信董事长齐向东:用“端-网-云”三层联动防护体系 安全释放AI智能体效能

    奇安信董事长齐向东:用“端-网-云”三层联动防护体系 安全释放AI智能体效能

    2026年3月17日
    2
  • 三、行列式的几何意义

    三、行列式的几何意义三 行列式的几何意义 nbsp 行列式的定义 行列式是由一些数据排列成的方阵经过规定的计算方法而得到的一个数 当然 如果行列式中含有未知数 那么行列式就是一个多项式 它本质上代表一个数值 这点请与矩阵区别开来 矩阵只是一个数表 行列式还要对这个数表按照规则进一步计算 最终得到一个实数 复数或者多项式 一阶行列式 注意不是绝对值 二阶行列式三阶行列式 N 阶行列式

    2026年3月26日
    2
  • docker php 安装redis,Docker 安装 Redis

    docker php 安装redis,Docker 安装 RedisDocker 安装 RedisRedis 是一个开源的使用 ANSIC 语言编写 支持网络 可基于内存亦可持久化的日志型 Key Value 的 NoSQL 数据库 并提供多种语言的 API 1 查看可用的 Redis 版本可以通过 Sortby 查看其他版本的 Redis 默认是最新版本 redis latest 你也可以在下拉列表中找到其他你想要的版本 此外 我们还可以用 docker

    2026年3月19日
    2
  • webpack版本问题_webpack查询有没有安装

    webpack版本问题_webpack查询有没有安装卸载后重新安装卸载重新安装卸载#卸载全局npmuninstall-gwebpack-clinpmuninstall-gwebpack#卸载局部npmuninstallwebpack-clinpmuninstallwebpack重新安装npminstall-g–save-devwebpack@version#不指定版本,默认安装最新npminstall-g–save-devwebpack-cli#查看webpack-v#若命令不存在,

    2022年8月10日
    6
  • jqprint 分页打印_Jqprint实现页面打印

    jqprint 分页打印_Jqprint实现页面打印好些项目需要实现页面打印 特别是一些后台管理类系统 下面介绍一款轻量级的打印插件 1 实现页面打印要引入 jQuery 和 Jqprint 点击下载 Jqprint 插件 2 HTML 代码 testtesttest JavaScrip

    2026年3月19日
    2
  • sed命令详解+示例

    sed命令详解+示例sed 命令解析 sed StreamEDitor 流式编辑器非交互式 基于模式匹配过滤及修改文本 类比 Vim 是一个交互的编辑器逐行处理 并将结果输出到屏幕可实现对文本的输出 删除 替换 复制 剪切 导入 导出等各种操作语法格式 格式 1 前置命令 sed 选项 定址符 处理动作 格式 2 sed 选项 定址符 处理动

    2026年3月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号