java----内存模型

内存模型

一个对象的内存图

方法区开始运行,先找到Main函数,然后将这个方法入栈.new将会在堆空间中开辟空间,里面有成员变量和成员方法(注意,成员方法保存的是方法区的成员方法的地址值).new将会把地址返回给创建的对象,保存起来.访问成员变量只需要一步,访问成员方法需要两步.并且将成员方法入栈.方法调用完之后会弹栈.

image-20230326150049678

两个对象的内存图

1.程序运行时先让main函数进栈,new开辟的内存都在堆空间中.注意开辟成员方法是地址值.

2.方法执行的时候也要进栈.

image-20230327203529617

类的代码

import org.w3c.dom.ls.LSOutput;

public class Phone {
    //定义成员变量
    String brand;

    String soc;//处理器
    double price;
    String color;
    String charge;//充电速度
    //定义成员方法
    public  void call(String who)//打电环
    {
        System.out.println("给"+who+"打电话");
    }
    public void sendSmS(String who)//发短信
    {

        System.out.println("给"+who+"发短信");

    }
    public  void music()//播放音乐
    {
        System.out.println("正在播放音乐");
    }

}

main里面的代码

public class text {
    public static void main(String[] args) {
        //1.导包
        //2.创建对象 类名 对象名 = new 类名();
        Phone one =new Phone();
        //创建一个手机的对象
        //访问成员变量
        System.out.println(one.soc);//null
        System.out.println(one.brand);//null
        System.out.println(one.charge);//null
        System.out.println(one.color);//null
        System.out.println(one.price);//0.0
        System.out.println("============");
        //修改成员变量
        one.soc="新一代骁龙8+";
        one.brand="小米";
        one.charge="120w极速闪充";
                one.color="火焰红";
                        one.price=1999.0;
        System.out.println(one.soc);
        System.out.println(one.brand);
        System.out.println(one.charge);
        System.out.println(one.color);
        System.out.println(one.price);
//使用成员方法
        System.out.println("============");
        one.call("雷军");
        one.sendSmS("卢伟冰");
        one.music();

        System.out.println("============");
        //1.导包
        //2.创建对象 类名 对象名 = new 类名();
        Phone two =new Phone();
        //创建一个手机的对象
        //访问成员变量
        System.out.println(two.soc);//null
        System.out.println(two.brand);//null
        System.out.println(two.charge);//null
        System.out.println(two.color);//null
        System.out.println(two.price);//0.0
        System.out.println("============");
        //修改成员变量
        two.soc="第二代骁龙8";
        two.brand="苹果";
        two.charge="20w极速闪充";
        two.color="玫瑰金";
        two.price=6999.0;
        System.out.println(two.soc);
        System.out.println(two.brand);
        System.out.println(two.charge);
        System.out.println(two.color);
        System.out.println(two.price);
//使用成员方法
        System.out.println("============");
        two.call("库克");
        two.sendSmS("何同学");
        two.music();
        System.out.println("============");



    }
}

一个对象引用另一个对象的内存图

image-20230328222631171

类的代码

import org.w3c.dom.ls.LSOutput;

public class Phone {
    //定义成员变量
    String brand;

    String soc;//处理器
    double price;
    String color;
    String charge;//充电速度
    //定义成员方法
    public  void call(String who)//打电环
    {
        System.out.println("给"+who+"打电话");
    }
    public void sendSmS(String who)//发短信
    {

        System.out.println("给"+who+"发短信");

    }
    public  void music()//播放音乐
    {
        System.out.println("正在播放音乐");
    }

}

main函数内的代码

public class text {
    public static void main(String[] args) {
        //1.导包
        //2.创建对象 类名 对象名 = new 类名();
        Phone one =new Phone();
        //创建一个手机的对象
        //访问成员变量
        System.out.println(one.soc);//null
        System.out.println(one.brand);//null
        System.out.println(one.charge);//null
        System.out.println(one.color);//null
        System.out.println(one.price);//0.0
        System.out.println("============");
        //修改成员变量
        one.soc="新一代骁龙8+";
        one.brand="小米";
        one.charge="120w极速闪充";
                one.color="火焰红";
                        one.price=1999.0;
        System.out.println(one.soc);
        System.out.println(one.brand);
        System.out.println(one.charge);
        System.out.println(one.color);
        System.out.println(one.price);
//使用成员方法
        System.out.println("============");
        one.call("雷军");
        one.sendSmS("卢伟冰");
        one.music();

        System.out.println("============");
        //1.导包
        //2.创建对象 类名 对象名 = new 类名();
        Phone two = one;
        //访问成员变量
        System.out.println(two.soc);//新一代骁龙8+
        System.out.println(two.brand);//小米
        System.out.println(two.charge);//120w极速闪充
        System.out.println(two.color);//火焰红
        System.out.println(two.price);//1999.0;
        System.out.println("============");
        //修改成员变量
        two.soc="第二代骁龙8";
        two.brand="苹果";
        two.charge="20w极速闪充";
        two.color="玫瑰金";
        two.price=6999.0;
        System.out.println(two.soc);
        System.out.println(two.brand);
        System.out.println(two.charge);
        System.out.println(two.color);
        System.out.println(two.price);
//使用成员方法
        System.out.println("============");
        two.call("库克");
        two.sendSmS("何同学");
        two.music();
        System.out.println("============");



    }
}

使用对象作为方法的参数

内存图

image-20230328223337376

Student类代码

public class Student {
/*
创建一个学生类
 */
    //下面是成员变量
    String name;//
    int age;
    int weight;

    //下面是成员方法
    public void eat ()
    {
        System.out.println("吃饭");


    }
    public  void sleep()
    {
        System.out.println("睡觉");
    }
    public  void study()
    {
        System.out.println("学习");
    }
}

main函数代码

public class text {
    public static void main(String[] args) {
        //1.导包
        //2.创建对象 类名 对象名 = new 类名();
        Phone one =new Phone();
        //创建一个手机的对象
        one.soc="骁龙730";
        one.price=2099.0;
        one.color="火焰红";
        one.charge="18w";
        one.brand="红米";
        getPhone(one);

    }
    public static void getPhone(Phone two)
    {
        System.out.println(two.brand);
        System.out.println(two.price);
        System.out.println(two.soc);
        System.out.println(two.color);
        System.out.println(two.charge);
    }
}

使用对象作为方法的返回值

内存图

image-20230328223725951

Student类代码

public class Student {
/*
创建一个学生类
 */
    //下面是成员变量
    String name;//
    int age;
    int weight;

    //下面是成员方法
    public void eat ()
    {
        System.out.println("吃饭");


    }
    public  void sleep()
    {
        System.out.println("睡觉");
    }
    public  void study()
    {
        System.out.println("学习");
    }
}

main函数代码

public class text {
    public static void main(String[] args) {
        //1.导包
        //2.创建对象 类名 对象名 = new 类名();
        Phone two=getPhone();
        System.out.println(two.brand);
        System.out.println(two.price);
        System.out.println(two.soc);
        System.out.println(two.color);
        System.out.println(two.charge);

    }
    public static Phone getPhone()
    {
        Phone one =new Phone();
        //创建一个手机的对象
        one.soc="骁龙730";
        one.price=2099.0;
        one.color="火焰红";
        one.charge="18w";
        one.brand="红米";
        return one;
    }
}

posted @ 2023-03-26 15:03  harper886  阅读(19)  评论(0编辑  收藏  举报