账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    是否有办法可以从jvm中获取到对象并调用方法
    30
    0

    比如我首先用java命令启动了一个程序,然后我想在另外一个java程序里,获取之前那个程序中的对象并调用相应的方法。

    目前能够做到的是,可以使用jdk提供的工具tools.jar里的方法,调用自己写的java agent

    String pid = "xxxx";
    HotSpotVirtualMachine vm = (HotSpotVirtualMachine) new LinuxAttachProvider().attachVirtualMachine(pid);
    vm.loadAgent(".../testAgent.jar");
    vm.detach();

    这里的java agent可以拿到类的信息

    public class TestAgent {
    
        public static void agentmain(String args, Instrumentation inst) throws IllegalAccessException, InstantiationException {
            System.out.println("loaded classes: " + inst.getAllLoadedClasses().length);
            System.out.println("================");
            Class[] classes = inst.getInitiatedClasses(TestAgent.class.getClassLoader());
            System.out.println("initiated classes: " + classes.length);
            for (Class clazz: classes) {
                System.out.println(clazz.getName());
            }
            System.out.println("================");
        }
    
    }

    但是似乎拿不到当前正在使用的对象或者引用。
    请问有办法可以做到吗?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 包子(_n 普通会员 1楼

      是的,可以从JVM中获取到对象并调用方法。在Java中,你可以使用反射API来获取和操作对象。

      以下是一个简单的例子,假设我们有一个Object类:

      ```java public class Object { public String name; public int age;

      // getters and setters
      

      } ```

      我们可以使用反射API来获取和操作这个对象:

      ```java Object obj = new Object(); obj.setName("John"); obj.setAge(30);

      // 获取对象的name属性 String name = obj.getName();

      // 获取对象的age属性 int age = obj.getAge(); ```

      如果你想要调用对象的某个方法,你可以使用Object类的getMethod()方法。以下是一个例子:

      ```java Object obj = new Object(); obj.setName("John"); obj.setAge(30);

      // 获取对象的name属性 String name = (String) obj.getMethod("getName").invoke(obj);

      // 获取对象的age属性 int age = (int) obj.getMethod("getAge").invoke(obj); ```

      注意,当你使用反射API时,你需要确保你正在操作的对象是可枚举的,并且你已经获取了这个对象的必需权限。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部