java关于对象的内部调用——理清栈与堆的关系

本文探讨了Java中对象的创建过程,如何在堆和栈中分配内存。通过实例展示了Car类、Engine类的使用,解释了引用变量的存储位置以及对象间的引用关系。同时,展示了Driver类如何调用Car类的方法,强调了类与类之间的交互和内存管理的重要性。
摘要由CSDN通过智能技术生成

Car类代码块

package car;
public class Car {
	private int color;
    private int speed;
    private Engine engine;
     void startup() {
        System.out.println("启动!");
    }
    
    void run() {
        startup();
        System.out.println("前进,速度为:" + speed);
    }
}

将Car类放入堆中,如果此时声明一个Car类的变量mycar
也就是Car mycar = new Car( )

那么这个引用型变量mycar就会被放在栈中,new表示在堆中新建了一个对象,而Car( )则是构造器的调用,对这个新创建的对象进行初始化

每次用new创建一个对象,就会在堆中分配新的内存来保存新的对象信息,而mycar这个引用变量本身则存储在栈中

Car mycar = new Car();
Car hercar = new Car();

你也可以创建多个对象,每个对象在堆中都有自己独立的位置

Engine类代码块

package com.tianmaying;

public class Engine {
    public double power;
    
    public Engine(double power) {
        this.power = power;
    }
}

如果对象中的成员变量有引用型变量的话,它还可以调用堆中的其他变量

例如:
Engine engine = new Engine(180);
Car mycar = new Car(0xffffff, 100, engine);

由于Engine对象在堆中也有一席之地,而Engine是Car中的成员变量,所以Engine它可以调用堆中的其他对象,也就是Engine本身,这个被调用的对象中的变量有double数据类型的power

Driver类代码块

package car;
public class Driver {  
        public static void main(String[] args) {
        Car car = new Car();
        car.run(); // 访问car对象的run()方法
    }
}

这段代码的意义便是声明一个公共类Driver,在堆新建一个Car对象并且使构造器初始化,使之作为在栈中的car的对象,car的地址指向就是这个新建的Car对象。

在这段代码中Driver类中调用了Car类中的方法run( ),通过 对象名.方法名的方式可以调用同一个包(package)里的方法,当然,属性也是可以跨类调用的,但是前提是这两个类必须在同一个包(package)里。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值