第三次课时总结
方法可以分为普通方法和构造方法两种,普通方法是用来描述对象的行为,而构造方法是用来实例化对象的。下面主要介绍一下构造方法。
构造方法格式如下:
public 类名(数据类型 参数名){
}
构造方法和普通方法的区别如下:
(1) 构造方法和普通方法的返回值不同,构造方法是不能定义返回值类型的,要注意的是不能定义返回值类型不代表构造函数没有返回值。
(2)构造函数的名字必须为类名。
此外,每一个类默认的都有一个构造方法,即通过 new 类名();的调用来创建一个对象。可以说构造方法主要由以下两个作用:
(1)用来实例化对象,例如:
Student stu = new Student();
当然我们也可以为类重新定义构造方法,此时系统默认的构造方法江北覆盖,不能再被调用。
(2) 给属性赋初值。
看如下代码:
Student stu = new Student(name);
在这里要注意的是new操作之后在堆内存中开辟了一块空间,在其中存储了属性,相关方法,即开始时付给的初值。但在栈内存中存储的是堆内存中构造函数所返回的地址。
下面在介绍一下方法重载,普通方法和构造方法都可以进行方法重载。要进行方法重载必须要满足一定的条件:
首先方法名字要完全相同。然后一下三个条件满足其中一个才可进行方法重载
(1)参数个数不同
(2)参数个数想通但参数类型不同
(3)参数和数类型均相同但出现的顺序不同
重载后的方法调用会根据参数的不同来自动调用。
this关键字表示的是当前的对象,当参数名和属性名相同时,要在属性名前加this.
练习:
编制一个简单回合制游戏。
源代码如下:
package second0706; //定义一个一个角色类 public class Role { private String name;//名字属性 private int hp;//生命属性 private int speed;//速度属性 private int atk;//攻击力属性 //设置名字的方法 public void setName(String n) { name = n; } //获取名字的方法 public String getName(){ return name; } //设置生命的方法 public void setHp(int n){ hp = n; } //获取生命的方法 public int getHp(){ return hp; } //设置速度的方法 public void setSpeed(int n){ speed = n; } //获取速度的方法 public int getSpeed(){ return speed; } //设置初始攻击力的方法 public void setAtk(int n){ atk = n; } //设置获取攻击力的方法 public int getAtk(){ return atk; } public void attack(Role r){ r.setHp(r.getHp()-this.getAtk()); System.out.println(r.getName()+"的气血石"+r.getHp()); } } package second0706; import java.util.Random; //定义一个战斗类 public class fight { //函数的入口 public static void main(String [] args){ //设置两个角色 Role r1 = new Role(); r1.setName("熊哥"); r1.setHp(100); r1.setSpeed((int)(Math.random()*14+1)); int j = (int)(Math.random()*29+1); r1.setAtk(j); Role r2 = new Role(); r2.setName("我"); r2.setHp(120); r2.setSpeed((int)(Math.random()*8+5)); int x =(int)(Math.random()*20+5); r2.setAtk(x); System.out.println("决斗开始"); for(int i =0;i<100;i++){ if(r1.getSpeed()>r2.getSpeed()){ r1.attack(r2); r2.attack(r1); if(r1.getHp()<=0||r2.getHp()<=0){ System.out.println("游戏结束"); if(r1.getHp()<=0){ System.out.println(r1.getName()+"被"+r2.getName()+"杀死了"); }else if(r2.getHp()<=0){ System.out.println(r2.getName()+"被"+r1.getName()+"杀死了"); } break; } }else if(r1.getSpeed()<r2.getSpeed()){ r2.attack(r1); r1.attack(r2); if(r1.getHp()<=0||r2.getHp()<=0){ System.out.println("游戏结束"); if(r1.getHp()<=0){ System.out.println(r1.getName()+"被"+r2.getName()+"杀死了"); }else if(r2.getHp()<=0){ System.out.println(r2.getName()+"被"+r1.getName()+"杀死了"); } break; } } } } }