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)里。