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的时候可以吧?还需要调查一番。

java caller_java中callee获取caller相关推荐

  1. java caller_JavaScript中callee和caller的区别与用法实例分析

    本文实例讲述了JavaScript中callee和caller的区别与用法.分享给大家供大家参考,具体如下: 1.callee 在函数的内部,有两个特殊的对象:arguments和this.其中arg ...

  2. Java Map中如何获取Map集合中所有value呢?

    转自: Java Map中如何获取Map集合中所有value呢? 下文笔者讲述使用Map.values()方法获取集合中"所有值"的方法分享,如下所示: 实现思路:借助Map的va ...

  3. Javascript中callee和caller的作用

    Javascript中callee和caller的作用 caller 是返回⼀个对函数的引⽤,该函数调⽤了当前函数: callee 是返回正在被执⾏的 function 函数,也就是所指定的 func ...

  4. JavaScript中callee和caller的用法解读

    1.callee: callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数. 作用:指向当前对象. 例1: <script type="text/java ...

  5. Javascript 中 callee 和 caller

    1.arguments.callee 返回正在执行的函数本身的引用,是arguments的一个属性. 当函数的名称未知时,例如匿名函数,使用callee很有用 用来代替函数名,降低耦合性 注: 这个属 ...

  6. Javascript中callee和caller的作用?

    caller是返回一个对函数的引用,该函数调用了当前函数: callee是返回正在被执行的function函数,也就是所指定的function对象的正文 那么问题来了?如果一对兔子每月生一对兔子:一对 ...

  7. Java编程中如何获取项目文件的路径/文件路径

    // 获取类加载器 ClassLoader cl = JDBCUtils.class.getClassLoader(); // 获取文件的统一资源定位器对象 URL url = cl.getResou ...

  8. java 汉字个数_java语言中如何获取字符串中汉字的个数

    java语言中如何获取字符串中汉字的个数? [实例描述] 字符串中可以包含数字,字母.汉字或者其他字符.使用Character 类的isDigit()方法可以判断字符中的某个字符是否为数字,使用Cha ...

  9. c# typescript_在任何IDE中从C#,Java或Python代码获取TypeScript接口的简单方法

    c# typescript by Leonardo Carreiro 莱昂纳多·卡雷罗(Leonardo Carreiro) 在任何IDE中从C#,Java或Python代码获取TypeScript接 ...

最新文章

  1. WPF Dispatcher介绍
  2. 写给程序员的有效学习方法
  3. C#获取网页内容的三种方式
  4. 转载:诠释Flash的职业发展道路
  5. java补码运算代码_计算机原码、补码、反码与java移位运算符(//)
  6. PhoneClean(iOS设备清理)下载安装,软件介绍
  7. Vsftp的PASV模式和Port模式及VsFTP配置方案
  8. 【Android】实现应用简单的用户登录界面
  9. C盘空间不足怎么办?试试这款软件
  10. 计算机与食品科学与工程关系,计算机在食品科学与工程中的应用课程标准.doc...
  11. 什么是ISP(网络业务提供商)?
  12. Allegro模块镜像详细操作教程
  13. win10关闭自动更新
  14. Pattern Recognition And Machine Learning读书会前言
  15. 【2022天梯赛】L1-8 静静的推荐 L2-1 插松枝 L2-2 老板的作息表
  16. Spyder 打开失败问题解决
  17. Android 应用快捷方式 Shortcuts(一)
  18. 说说移动设备的各种标识码(DeviceID, IMEI, UUID, UDID, OAID, IDFA, GAID)
  19. 视频镜头分割与关键帧提取
  20. hdoj4466题解

热门文章

  1. ubuntu中安装oracle sun java.
  2. Netron 模型可视化神器,保存好的模型丢进去就能可视化!
  3. 阿尔克分享平面设计的基本常识,以及ps软件小知识
  4. 目前市场上做一个网站大约需要多少钱?
  5. Vue获取当前的位置信息、经纬度
  6. Android Studio模拟器AndroidWifi连接成功但无法访问网络问题
  7. 中学计算机论文题目,中学计算机相关论文题目 中学计算机论文标题如何定
  8. 等保2.0三级移动互联安全扩展要求
  9. 补充:混淆矩阵、图像分割指标计算
  10. 手撕生产者-消费者模式 | P问题、NP问题