当前位置 博文首页 > m0_48462648的博客:Java面试题,成员变量以及成员方法的调用,

    m0_48462648的博客:Java面试题,成员变量以及成员方法的调用,

    作者:[db:作者] 时间:2021-08-02 09:53

    一共有两个类,一个是Test类,主要是声明成员变量的属性和创建成员方法的
    第二个是TestA,主要是用来调取成员变量,并为变量进行赋值,以及方法的调用,同时也会详细讲解类和变量的栈堆内存的流程图

    首先看两个类

    /*
    *
    * 创建一个类,创建一个成员变量和成员方法
    *
    * */
    public class Test {
        //创建成员变量属性
         String name;
         String type;
         int age;
    
         //创建成员方法
        public void eta(){
            System.out.println("这个吃饭的方法");
        }
    }
    
    public class TestA {
        public static void main(String[] args) {
            //通过Test类new一个新的对象
            Test test = new Test();
            test.name="张三";
            test.type="人";
            test.age=40;
            test.eta();//调用Test类中的成员方法
    
    
            System.out.println("-----------------------------------");
            //通过Test类再new一个新的对象
            Test test2 = new Test();
            test.name="李四";
            test.type="人";
            test.age=20;
            test.eta();//调用Test类中的成员方法
        }
    }
    

    下面是运行结果:

    这个吃饭的方法
    -----------------------------------
    这个吃饭的方法
    

    在这里插入图片描述

    1. 首先我们一开始声明的成员变量的属性再堆内存中
    2. 当我们的main方法运行后,我们再栈内存中创建的属性值就会通过0x333的字码连接到堆内存的成员变量,并把栈内存中的数据传输给他,(李四那里有一个0x444,手误打错了,应该也是0x333)
    3. 传输完成后,我们堆内存中的变量就已经被成功赋值,因为我们一开始还创建了成员方法,我们最终的结果输出也是通过成员方法输出的,所以我们的堆内存的成员方法通过字码0x33与方法区内的方法进行连接(这个方法区知识意义上的方法去,在有些细节处可以忽略,直接说在栈内存快速遍历即可)
    4. 方法区内的方法接收到之后,就会到栈内存中直接遍历
    5. 值得注意的是,如果有其他的属性值出现,比如李四,会直接顶替上一个属性,之后重复之后的步骤即可

    缓解疲劳
    在这里插入图片描述

    cs