`

JAVA对象怎样实现对一个方法的调用的?

阅读更多
举个例子:
  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调用c++类对象

    使用Jni实现对C++类库调用的实例,主要方法是利用了C++中的指针机制和jlong类型的对接,从而在java中能够调用c++。

    JAVA类的方法调用和变量

    JAVA类的方法调用和变量 一、类的分类: 1、普通类 2、抽象类(含有抽象方法的类) 3、静态类(不需要实例化,就可以使用的类) 二、方法的分类: 1、私有方法(只有类的内部才可以访问的方法) 2、保护方法(只有...

    JAVA调用C++的dell应用例子

    java与dll交互的技术主要有3种:jni,jawin和jacob。Jni(Java Native Interface)是sun提供的java与系统中的原生方法交互的技术(在...Jacob(Java-Com Bridge)提供了java程序调用microsoft的com对象中的方法的能力。

    JNI技术手册 c/c++调用java

    6、 新增一个方法处理java对象 26 7、 新增一个方法处理数组 29 8、 改写RunMain 32 四、 参考资料: 33 V. Eclipse+CDT+MinGW 进行JAVA调用C/C++ 34 一、 安装eclipse3.2。 34 二、 安装MinGW。 34 1、 下载MinGW...

    Java SpringBoot实现调用OpenAI ChatGPT的相关接口教程.zip

    Java SpringBoot实现调用OpenAI ChatGPT的相关接口教程.zip

    编写计算器类,实现加法、减法操作,使用JAVA反射机制动态调用计算器对象的加法,减法函数

    编写计算器类,实现加法、减法操作 使用JAVA反射机制动态调用计算器对象的加法,减法函数

    3.jni_c++调用java中的方法

    jni_c++调用java中的方法 文档中包含(c++与js互相调用的实现)

    编写一个JAVA程序,定义一个Student类

    编辑一个JAVA程序,定义一个学生的类Student。这个类的属性(成员变量):“学号”,“班号”,“姓名”,“性别”,...编写一个Java Application程序,创建Student类的对象,调用上述方法进行验证并实现相应输出。

    Java实现调用MySQL存储过程详解

    相信大家都知道存储过程是在大型...存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。Java调用mysql存储过程,实现如下,有需要的朋友们可以参考借鉴,下面来一起看看吧。

    JAVA反射机制动态调用 计算器对象的加法,减法函数;JAVA反射机制修改一个学生对象 的私有数据成员

    使用JAVA反射机制动态调用 计算器对象的加法,减法函数。 使用JAVA反射机制修改一个学生对象 的私有数据成员(不允许调用setters) 使用的类有Class, Method, Field

    JAVA面向对象详细资料

    Java面向对象 1 1 学习方法与要求 1 2 面向对象语言与面向过程语言的区别 7 3 面向对象?什么对象? 8 4 什么是类? 9 5 如何创建一个类Class? 10 6 如何使用类创建对象 10 7 引用与实例 11 8 实例属性与实例方法 ...

    PB调用java组件SatJni

    SatJni是C++编写的动态链接库,实现了C#,PB,Delphi,VB,VC等对Java的调用,能让你很容易地调用成熟的java类库和第三方java组件。不用再为移值java代码而烦恼。 示例中演示了PB调用webservice服务(无需代理对象)得到...

    java调用com组件实例

    java调用com组件实例,使用jacb访问com对象

    使用Java的文件操作实现一个简单的通讯录管理系统.txt

    这个代码实现了一个简单的通讯录管理系统,主要使用了Java的文件操作。 首先定义了一个Contact类,用于存储联系人的姓名和电话号码。 然后定义了一个AddressBook类,用于管理通讯录。在构造函数中,传入一个文件名...

    JAVA实验报告二Java面向对象程序设计.docx

    定义主函数,创建元素个数为3的Shape类型的一维数组,分别为数组元素创建Circle、Square和Triangle类型的对象,最后分别调用各数组元素的Area方法,输出相关信息。 (3)编制程序,完成自定义异常。

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA可着色接口Colorable

    JAVA课程实验,设计一个名为Colorable的接口,其中有名为howToColor()的void方法。可着色对象的每个类必须实现Colorable接口。设计一个扩展GeometricObject类并实现Colorable接口的名为Square的类。实现howToColor...

    Java实现基于内存的搜索引擎设计和实现.zip

    比如在类Index中的getDictionary方法中,需要返回所有保存的Term,可以直接调用map结构的keySet方法返回一个Set对象,包含了所有的键,也即所有的Term,类似的还有由于实现了子类的compareTo以及equal方法,对于子类...

    java复数四则运算-类的定义与对象.rar

    1. 编写一个类实现复数的运算。 复数类ComplexNumber的属性: m_dRealPart:实部,代表复数的实数部分。 m_dImaginPart:虚部,代表复数的虚数部分。 复数类ComplexNumber的方法: ComplexNumber():构造函数,...

Global site tag (gtag.js) - Google Analytics