举个例子:
public class Example{
public static void main(String[] args){
//Bean 对象
Bean b = new Bean();
b.way();
}
}
class Bean{
private int num =0;
public Bean(){
this.num = 5;
}
public void way(){}
}
这里把JVM当做一个实例对象
JVM j = new JVM();
首先,JAVA虚拟机在执行一个主程序Main方法之前,先创建一个虚拟机的实例,在虚拟机创建实例就拥有一个堆一个方法区,实例就会启动线程来执行Main方法,(所有的Java程序的入口必须执行Main方法的).方法执行完后,类装载器会编译
.class的文件,并将读取到的类信息放到方法区.并且把读取到的(二进制的)类信息返回给JVM,JVM得到类型信息后,会立即取得ClassName,比如Bean, 并且在JAVA栈中入栈一个对Bean类型的引用,
Bean b ;并且有一个指向堆的指针,由Bean b 指向堆的指针,堆中的指针还会指向一个方法区的指针(用来存放方法)。当用new运算符的时候,会在堆中分配内存,把类型信息放进方法区中,并初始化类中的成员变量 int num = 0.这时候,调用new 之后的构造函数之后的时候,才真正的为对象分配内存(至于分配多大的内存,由JVM所读取的类型信息来决定),即 int num =5; 栈中的Bean b 的指针会指向堆中的对象。
并且在堆中还有一个指向方法区取得指针,这时候指针就会到方法区找到它所对应的way方法.
就完成了Java对象对方法的调用.
1 . 利用反射获得类名
2 . 找到,读入.class文件
3 . 提取类型信息到方法表
4 . 执行Main方法
5 . 在常量池以列项分配空间
6 . 判读.class文件是否加载
7. 如果成功加载,就获得对象类名得应用,否查找.class文件把信息放入方法区
8. JVM一个指向方法区的类数据结构指针替换到常量池的第一项
9. 为对象分配内存,并且用常量池中的第一项指针访问类型信息
10. 确定对象的大小,堆里分配,初始化实例化的变量 num=0;
11 生成对象的引用压入栈中
12.通过调用JAVA代码初始化成员变量,初始化正确的初始值 num=5
13. 通过对象引用调方法 (b.way())
分享到:
相关推荐
Java远程调用(Remote Method Invocation,RMI)是Java平台中一种重要的分布式计算技术,它允许在不同网络环境中的Java对象之间进行透明的交互。在本文中,我们将深入探讨三种不同的RMI实现方法:原始方式、Spring...
在给定的文件列表中,`writeutfLib`可能是一个实现了JNI接口的动态链接库,而`WriteExample`可能是一个Java示例项目,展示了如何在Java中调用`writeutfLib`中的C++类和方法。通过运行这个示例,我们可以看到Java如何...
Java远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算模型,允许一个Java虚拟机(JVM)上的对象通过网络调用另一个JVM上对象的方法,如同调用本地对象一样。这一特性使得Java应用...
理解如何在一个类内部调用方法是编写高效、易于维护的Java程序的关键。无论是静态方法还是非静态方法,掌握正确的调用方式都能帮助开发者有效地组织和优化代码结构。随着对Java语言的深入学习,我们还将接触到更多...
总之,这个示例提供了Java通过Jacob库调用C# DLL的方法,这对于那些需要在Java应用中利用.NET功能的开发者来说,是一个非常有价值的参考资源。通过理解Jacob的工作原理和实践中的调用流程,可以有效地实现Java和.NET...
Java的多态性是面向对象编程的一个核心特性,它允许我们使用父类(或接口)的引用指向子类(或实现接口的类)的对象。这样做的好处在于代码的灵活性和可扩展性,使得程序能够处理多种不同的对象类型,而不必关心具体...
3. **创建Java对象**:通过反射机制创建Java对象,调用`JNIEnv.NewObject`方法。 4. **调用Java方法**:使用`JNIEnv.CallObjectMethod`、`JNIEnv.CallVoidMethod`等方法,根据返回值类型和参数类型选择合适的方法。 ...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...
RMI允许一个Java对象调用运行在另一台机器上的对象的方法,就像调用本地对象一样简单。这对于构建分布式应用和服务尤其有用。 Java RMI的基本步骤包括: 1. **定义接口**:创建一个Java接口,声明远程方法。 2. **...
Java动态调用方法是Java反射机制的一个重要应用,它允许我们在程序运行时,根据需要动态地获取类的信息并调用其方法。这种能力为代码的灵活性和可扩展性提供了强大的支持,尤其在处理不确定的对象类型或者需要在运行...
在这个Java类中,定义了一个静态方法`replace`,该方法接收一个字符串参数,并将字符串中的"unmi"替换为"unmi.cc"。 ##### 3. XML 输入文件 (example.xml) ```xml <name>unmi <blog>http://unmi.cc</blog> ...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种用于分布式计算的技术,它允许一个Java对象调用另一个在不同JVM上的对象的方法。这个简单的例子将引导我们了解如何利用Java RMI实现远程...
QAndroidJniObject允许我们在C++代码中创建和操作Java对象,调用Java方法,从而实现跨语言通信。 1. **环境准备**:确保你的开发环境已经配置好QT和NDK,同时安装了Android SDK,并且在QT中配置了Android开发环境。...
接下来的代码段提供了一个通用的 `invokeMethod` 方法,这个方法接受一个对象、一个方法名和一个参数数组,然后动态地调用指定对象上的方法。其工作原理如下: 1. 获取方法对象的类 `ownerClass`。 2. 创建一个 `...
本文主要讲解了在遇到需要操作Java对象的参数或返回值时,如何利用Frida这一动态代码插桩工具来进行反射调用,包括调用对象的方法和获取对象的字段。Frida是一个强大的动态代码插桩工具,它可以注入到几乎所有的进程...
`JNIEnv*`指针提供了访问Java对象和执行Java方法的接口。 4. **编译C++代码**:将C++源代码编译为动态链接库(在Windows上是.dll,在Linux上是.so,在macOS上是.dylib)。确保正确链接了JNI库。 5. **加载库**:在...
接着,我们使用 eval() 方法执行 JS 代码,并将其转换为一个 Invocable 对象,以便调用 JS 方法。 在我们的示例代码中,我们调用了一个名为 "test" 的 JS 方法,并将其返回值打印到控制台。 JS 代码实现 在我们的...
这个C函数会接受JNIEnv指针和Java对象的指针作为参数,然后可以调用Java方法。例如: ```c #include "MyJavaClass.h" JNIEXPORT void JNICALL Java_MyJavaClass_callFromC(JNIEnv *env, jobject obj) { // 调用...
Java异步调用转同步方法实例详解 Java异步调用转同步方法实例详解是指在Java中将异步调用转换为同步调用的...Java中有多种方法将异步调用转换为同步调用,开发者可以根据实际情况选择合适的方法来实现异步调用转同步。
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间透明地调用对象的方法。在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象...