关于Java中类和对象的再说明
Java中的类和对象
引言:
例如我们在开发一款坦克大战的小游戏时,会需要一个主角坦克(即“我的”坦克),同时还需要很多敌方坦克,同时,这些坦克还具有等级、名字和血量等信息。如果,把所有这些坦克以及所有这些信息全部写在主方法里面,会导致后期的维护工作非常的麻烦。为了解决这个问题,就需要用到Java面向对象编程的思想了。
类:
类class:
成员变量:属性;
成员行为:方法;
注意,在一个Java源文件中,只能有一个public类。我们可以把某一些坦克的属性和方法全部写在一个类里面,这样,在主方法里,就只需要调用即可。下面看代码:
1 package com.hw.TankWar0127;
2 class Player{ //定义了一个Player类
3 String name;
4 int tankLevel;
5 int damage;
6 int tankHp;
7
8 public void move(){
9 System.out.println("控制主角移动!");
10 }
11 public void attack(){
12 System.out.println("控制主角攻击!");
13 }
14 public void getDamaged(int damage){
15 tankHp -= damage;
16 }
17 public Boolean isDead(){
18 if(tankHp <= 0)
19 {
20 return true;
21 }
22 else
23 {
24 return false;
25 }
26 }
27 }
28 public class TankDemo {
29 public static void main(String[] args){
30 int enemyDamage = 30;
31 Player p1 = new Player(); //利用类声明出来的变量也叫做对象。p1就是一个用Player声明出来的对象
32 //后面那个= new Player()表示对这个对象进行初始化。
33 p1.name = "创生力量";
34 p1.tankHp = 100;
35 System.out.println("主角坦克名为"+p1.name);
36 p1.move();
37 p1.attack();
38 p1.getDamaged(enemyDamage);
39 System.out.println("主角遭到攻击!血量仅剩"+p1.tankHp);
40
41 if(p1.isDead())
42 {
43 System.out.println("主角已经阵亡!");
44 }
45 else
46 {
47 System.out.println("主角仍在继续战斗!");
48 }
49 }
50 }
在上面这份代码里面我们可以看到,我们定义了一个Player类,里面包含了name,tankLevel等属性,其次还包含了move(),attack()等一系列方法。在主方法里面,像p1.attack()这样,就是直接调用这个对象的这个方法。省去了很多复杂的代码,实现了优化。我们来看看运行效果:

不同对象的存储:
首先,在声明了一个p1对象时,在栈里面会开辟一块内存空间,存放p1,由于p1是引用类型,所以这个地方是用来存放地址的。当把p1new了之后,就会在堆里面申请一块内存区域,大到足够存放Plane类里面的信息。注意,只要new出来,就会占内存空间,不管有没有初始化。若未初始化就是默认值。String就是null,int就是0...这时,假设p1那里存放的地址是089,再声明一个p2对象时,方法与上面相同,栈里面p2的地址假设为090,指向堆里面另外一块内存空间,这二者是不互相干扰的。所以,以下代码:
1 package com.hw.TankWar0127;
2 class Plane{ //定义了一个Plane类
3 String name;
4 int damage;
5 int planeHp;
6
7 public void fly(){
8 System.out.println(name+"在飞");
9 }
10 }
11 public class TankDemo {
12 public static void main(String[] args){
13 Plane p1 = new Plane();
14 Plane p2 = new Plane();
15 p1.name = "歼-20";
16 p1.damage = 100;
17 p2.name = "歼-31";
18 p2.damage = 200;
19 System.out.println(p1.name+"可造成的伤害是"+p1.damage);
20 System.out.println(p2.name+"可造成的伤害是"+p2.damage);
21 p1.fly();
22 p2.fly();
23 }
24 }
的运行效果是:

示意图如下:


浙公网安备 33010602011771号