关于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 }

的运行效果是:

 

 示意图如下:

 

posted @ 2021-01-27 14:39  EvanTheBoy  阅读(75)  评论(0)    收藏  举报