java面向对象简易内存分析

java面向对象简易内存分析

注:本次内存分析主要是通过其内存中的地址来实现。

内存分析中相关知识点普及:

栈:

  1. 每个线程私有,不能实现线程间的共享!
  2. 局部变量放置于栈中。 ** 3. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!

堆:

  1. 放置new出来的对象!
  2. 堆是一个不连续的内存空间,分配灵活,速度慢!

方法区:

  1. 被所有线程共享!
  2. 用来存放程序中永远是不变或唯一的内容。(类代码信息、静态变量、字符串常量)

本次内存分析的实现通过一个事件来演示。主要通过对电脑的颜色修改来实现。

首先,创建一个 人 类(Person ),
具有 姓名(name),年龄(age)属性
人可以对电脑进行修改颜色(changeComputer),

其次,创建一个电脑 类(Computer),
电脑具有品牌(computerName),颜色(computerColor)两个属性。

最后,创建一个Test类执行主方法,测试内存分析。

测试开始,
创建一台电脑对象,黑色的华硕电脑。引用对象c(地址是:0x0001),color=“黑色”,name=“华硕”
在这里插入图片描述

接着创建一个电脑维修员,30岁的李师傅。引用对象p,
打印我自己的电脑 c (地址是:0x0001)的信息
在这里插入图片描述
这台电脑(地址是:0x0001)想改成 守望先锋款式 的颜色,通过changeColor(c,“守望先锋”)

p.changeColor(c,"守望先锋");

通过对电脑c (地址是:0x0001)调用人(类)中的 changColor()方法实现

 //改变电脑颜色功能  两个形参 电脑 和  颜色
    public void changeColor(Computer computer,String color){
        //通过传过来的电脑地址  对相应地址的电脑颜色参数  进行改变
        computer.setComputerColor(color);
        //打印 电脑的颜色
        System.out.println("修改后的电脑颜色为:"+computer.getComputerColor());
    }

方法中通过对传过来的电脑地址,确定要修改的电脑。通过修改电脑颜色功能实现对相应电脑颜色的修改。修改后的电脑地址仍然是0x0001。

 //打印我现在的电脑款式
        System.out.println("现在我的电脑是"+c.getComputerColor()+"款式的"+c.getComputerName()+"电脑");

修改后测试,仍然是原来地址的电脑(地址是:0x0001)。但是,其中颜色已经被改变了。
在这里插入图片描述
后来,你的电脑(地址是:0x0001)时间长了,玩游戏有点带不动了。你想让李师傅给你的电脑颜色重新喷一遍 守望先锋款式 的。
李师傅看着破旧的电脑摇了摇头,没有给你的电脑喷漆。他向你推荐了一款新的电脑。

 //有一天,你的电脑坏掉了,没有维修的价值了,没有给你修改颜色。
        // 维修员让你买一台新的电脑,没有返回值
        p.changeComputer(c,"守望先锋");

他向你推荐了一款粉色的联想小新,是一台新的电脑 (地址是:0x0010)。他说还可以帮你把新电脑的颜色喷成守望先锋款式的,你看了看,并没有购买。

//一个没有返回值换电脑方法
    public void changeComputer(Computer computer,String color){
        Computer c=new Computer("联想小新","粉色");
        c.setComputerColor(color);
        //没有返回值,所以对原来的电脑没有发生改变
    }

在这里插入图片描述

在这儿,出现了一台新的电脑(地址是:0x0010),与你原来的电脑(地址是:0x0001)并没有什么关系。
在这里插入图片描述
所以返回你的电脑信息的时候仍然是你之前的老电脑,你带着你之前的老电脑走了。
过了几天,你又带着你的老电脑(地址是:0x0001)回来了。

//有一天,你的电脑坏掉了,没有维修的价值了,没有给你修改颜色。
        // 维修员让你买一台新的电脑,有返回值
        c=p.changeComputer1(c,"守望先锋");

你还是之前的要求,李师傅还是向你推荐了这款电脑(地址是:0x0010),你心动了,咬了咬牙,为了更棒的游戏体验,买了新的电脑。

 //一个含有返回值的换电脑方法
    public Computer changeComputer1(Computer computer,String color){

        Computer c=new Computer("联想小新","粉色");

        c.setComputerColor(color);
        //返回的时候将新的电脑地址给了原来的地址,原来的电脑地址被改变了
        return c;
    }

在这儿,你走的时候拿走了新的电脑(地址是:0x0010),你原来的电脑被扔掉了,所以再查看你的电脑信息的时候,看到的是新的电脑信息。
在这里插入图片描述
至此,整个的简易内存分析就结束了。

新的电脑地址覆盖了你以前的来的电脑地址,你手里的是新的电脑。

在这里插入图片描述

测试源码如下:

//内存分析
public class Test {
    public static void main(String[] args) {
        //创建一台电脑对象
        Computer c=new Computer("华硕","黑色");
        //创建一个电脑维修员
        Person p=new Person("李师傅",30);
        //打印我原来的电脑信息
        System.out.println("原来我的电脑是"+c.getComputerColor()+"款式的"+c.getComputerName()+"电脑");
        //修改我的电脑颜色 为守望先锋款式
        p.changeColor(c,"守望先锋");
        //打印我现在的电脑款式
        System.out.println("现在我的电脑是"+c.getComputerColor()+"款式的"+c.getComputerName()+"电脑");

        //有一天,你的电脑坏掉了,没有维修的价值了,没有给你修改颜色。
        // 维修员让你买一台新的电脑,没有返回值
        p.changeComputer(c,"守望先锋");
        //打印当前的电脑,没有返回值的时候
        System.out.println("现在我的电脑是"+c.getComputerColor()+"款式的"+c.getComputerName()+"电脑");

        //有一天,你的电脑坏掉了,没有维修的价值了,没有给你修改颜色。
        // 维修员让你买一台新的电脑,有返回值
        c=p.changeComputer1(c,"守望先锋");
        //打印当前的电脑
        System.out.println("现在我的电脑是"+c.getComputerColor()+"款式的"+c.getComputerName()+"电脑");
    }
}
//人
class Person {
    //属性私有化  人的名字  人的年龄
    private String name;
    private int age;
    //创建构造方法(无参)
    public Person() {
    }
    //创建构造方法(有参)
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //改变电脑颜色功能  两个形参 电脑 和  颜色
    public void changeColor(Computer computer,String color){
        //通过传过来的电脑地址  对相应地址的电脑颜色参数  进行改变
        computer.setComputerColor(color);
        //打印 电脑的颜色
        System.out.println("修改后的电脑颜色为:"+computer.getComputerColor());
    }
    //一个没有返回值换电脑方法
    public void changeComputer(Computer computer,String color){
        Computer c=new Computer("联想小新","粉色");
        c.setComputerColor(color);
        //没有返回值,所以对原来的电脑没有发生改变
    }
    //一个含有返回值的换电脑方法
    public Computer changeComputer1(Computer computer,String color){

        Computer c=new Computer("联想小新","粉色");

        c.setComputerColor(color);
        //返回的时候将新的电脑地址给了原来的地址,原来的电脑地址被改变了
        return c;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

//创建一个类电脑
class Computer {
    //属性私有化,电脑品牌,电脑颜色
    private String computerName;
    private String computerColor;

    public Computer() {
    }

    public Computer(String computerName, String computerColor) {
        this.computerName = computerName;
        this.computerColor = computerColor;
    }

    public String getComputerName() {
        return computerName;
    }

    public void setComputerName(String computerName) {
        this.computerName = computerName;
    }

    public String getComputerColor() {
        return computerColor;
    }

    public void setComputerColor(String computerColor) {
        this.computerColor = computerColor;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值