属性:对象的静态特征;用变量来描述,这样的变量叫成员变量。
行为:对象的动态特征;用方法来描述,这样的变量叫成员方法。
当成员变量不初始化(不赋值)直接打印输出时,JVM会给它默认值,不同类型的默认值不同。
实例:
Game.java:
package nowcoder3.part02; /* * 成员方法详解 * */ public class Game { public static void main(String[] args) { Car c = new Car(); System.out.println(c.brand); System.out.println(c.color); System.out.println(c.maxSpeed); } }
Car.java:
package nowcoder3.part02; public class Car { //成员变量 String brand; String color; int maxSpeed; }
运行结果:
不同类型的默认值:
实列:
Game.java:
package nowcoder3.part01; //游戏类 public class Game { public static void main(String[] args) { //创建一个赛车 Car c = new Car(); //访问成员变量 c.brand="宝马"; c.color="黑色"; System.out.println(c.brand); System.out.println(c.color); System.out.println(c.maxSpeed); //访问成员方法 c.run(); //再创建一个对象 Car r = new Car(); r.brand = "大奔"; r.color = "绿色"; System.out.println(r.brand); System.out.println(r.color); System.out.println(r.maxSpeed); r.run(); //直接打印对象 System.out.println(c); System.out.println(r); } }
Car.java:
package nowcoder3.part01; //赛车类 public class Car { //成员变量 String brand; String color; int maxSpeed = 500; //成员方法 void run(){ System.out.println("Running..."); } }
运行结果:
因为两个对象的哈希码值(地址)并不同,所以这是两个对象。
实例:
Game.java:
package nowcoder3.part02; /* * 成员方法详解 * */ public class Game { public static void main(String[] args) { Car c1 = new Car(); c1.brand="宝马"; c1.color="黑色"; c1.maxSpeed=666; c1.run(); Car c2 = new Car(); c2.brand="奔驰"; c2.color="红色"; c2.maxSpeed=999; c2.run(); } }
Car.java:
package nowcoder3.part02; public class Car { //成员变量 String brand; String color; int maxSpeed; //行驶 void run(){ //方法内声明的变量是局部变量,只能在方法内访问 //调用成员变量 System.out.println(color + brand +"速度是" + maxSpeed); //调用成员方法 startup(); speedup(); stop(); } //启动 void startup(){ System.out.println(brand+"启动!"); } //加速 void speedup(){ System.out.println(brand+"加速!"); } //刹车 void stop(){ System.out.println(brand+"刹车!"); } }
运行结果:
JVM启动时会向系统申请一块内存,它将这块内存划分为若干个子区域,用以存放不同形式的。数据。
堆用于存储引用类型的数据;
这些数据相互之间是无序的; .
堆中数据是可以反复使用的;
JVM会定期清理堆中的垃圾数据;
栈以方法为单元存储数据,这样的单元叫方法栈帧;
栈中存放的数据是有序的,遵循着先进后出的规则;
方法调用结束后,它占有的方法栈帧将会立刻释放;
注意:出栈入栈顺序不同
通过实例理解:
public static void main(String[] args) { Car c = new Car(); c.brand="宝马"; c.color="黑色"; c.maxSpeed=500; c.run(); }
Car c = new Car();
3步 main()入栈—>创建对象—>赋值
c.brand="宝马"; c.color="黑色"; c.maxSpeed=500;