一、构造(器)方法
?
????????????? 方法分为两类,普通方法和构造器方法。
?
????????????? 构造方法的格式:
????????????? public?? 类名(数据类型? 参数,.....){
????????????????????????????? //代码
????????????? }
????????????? 实例化对象的格式:
???????????? ?类名?? 对象名 = new? ?类名();
????????????? 类名?? 对象名 = new?? 类名(参数值,.......);
??????
????????????? 构造方法的用途:
???????????? ?用来实例化对象、用来初始化对象某些属性值。
?
????????????? 每一个类默认的有一个无参的构造器,自己给类重新定义一个构造器,这叫做构造器方法的重载。如果在类中定义了构造方法,则只能使用你自己定义的构造方法,默认的无参构造方法不能再使用。
????????????? 构造方法没有任何返回值的定义,调用时会返回首地址。
?
二、方法重载(overLoad)
?
????????????? 在一个类中可以定义多个同名,但参数类型和数量不同的方法,叫做方法的重载。
????????????
??????????????条件:
??????????????1.方法名相同;
??????????????2.方法所带的参数个数、参数类型或参数顺序必须有一个不同。
?
?????????????? 调用:根据参数调用重载的方法。
?
?
三、this关键字
????????????
??????????????this表示当前调用方法的对象。
????????????? this可以避免对象的某个属性由于就近原则被当成方法里的参数。可以利用this在构造器中调用构造器。???????this.name = name;//区分属性和参数?????? this("无名");//调用带一个字符串参数的构造方法
?
?
四、值传递与引用传递
?
????????????? 值传递适用于Java中的八大基本数据类型和String类型。
????????????? 传递方法是传值。
?
????????????? 引用传递适用于Java中的引用数据类型(对象类型,类类型)。
????????????? 引用数据类型包含:类、数组、接口、抽象类。?????????????? 传递方法是传址。
?
? ???????????????????????????? 传递方法 值传递 传值。将数据保存在栈里,调用方法时只改 变方法中参数的值,不会影响到原来定义给变量的值。并且方法中的参数所占空间在调用完毕后会被立即销毁释放内存。 引用传递 传址。实例化对象时,new是在堆中开辟地址保存属性、方法。构造方法将首地址返回给对象,重新赋值时地址改变,指向新的地址,而原先空间被销毁。?
?
五、代码
?
回合制游戏:奥特曼和小怪兽要战斗,奥特曼还可以和Boss进行战斗,直到一方的血量为0的时候结束战斗,输出谁胜利了!
?
?
思路:在上一节的代码基础上进行改进。
?????????????? 1.由于与奥特曼战斗的人物多了一个,所以需多定义一个Boss类。
???????????????2.对奥特曼的战斗方法进行重载。
?????????????? 3.用构造方法简化代码。
???????????????4.实例化Boss对象。
?
class="java">public class VS { public static void main(String[] args){ //实例化 Outman ot = new Outman("奥特曼",3000,600); Monster mt = new Monster("小怪兽",5000,360); Boss mt2 = new Boss("Boss",8000,200); //显示初始血量 System.out.println(ot.getName()+" hp "+ot.getHp()); System.out.println(mt.getName()+" hp "+mt.getHp()); System.out.println(mt.getName()+" 率先发动攻击:"); do{ ot.setHp(mt.doHurt(ot)); ot.getHp(); //显示剩余血量 if(ot.getHp()>0){ System.out.println(ot.getName()+" 血量还剩 "+ot.getHp()+" 点。"); mt.setHp(ot.doHurt(mt)); if(mt.getHp()>0){ System.out.println(mt.getName()+" 血量还剩 "+mt.getHp()+" 点。"); } } }while(ot.getHp()>0&&mt.getHp()>0); //输出结果 mt.setHp(ot.result(mt)); mt.getHp(); mt.result(); System.out.println(); //显示初始血量 ot.setHp(3000); System.out.println(ot.getName()+" hp "+ot.getHp()); System.out.println(mt2.getName()+" hp "+mt2.getHp()); System.out.println(ot.getName()+" 率先发动攻击:"); do{ ot.setHp(mt2.doHurt(ot)); ot.getHp(); //显示剩余血量 if(ot.getHp()>0){ System.out.println(ot.getName()+" 血量还剩 "+ot.getHp()+" 点。"); mt2.setHp(ot.doHurt(mt2)); if(mt2.getHp()>0){ System.out.println(mt2.getName()+" 血量还剩 "+mt2.getHp()+" 点。"); } } }while(ot.getHp()>0&&mt2.getHp()>0); //输出结果 mt2.setHp(ot.result(mt2)); mt2.getHp(); mt2.result(); }
?
?
public class Outman{ private String name; private int hp; private int hurt; public Outman(String name,int hp,int hurt){ this.name = name; this.hp = hp; this.hurt = hurt; } //设置名字属性的方法 public void setName(String n){ name = n; } //获取名字属性的方法 public String getName(){ return name; } //设置血量属性的方法 public void setHp(int h){ hp = h; } //获取血量的方法 public int getHp(){ return hp; } //设置攻击力属性的方法 public void setHurt(int t){ hurt = t; } //获取攻击力的方法 public int getHurt(){ return hurt; } //对怪兽造成伤害的方法 public int doHurt(Monster m){ m.setHp(m.getHp()-hurt); m.getHp(); System.out.print(name+" 对 "+m.getHp()+" 造成 "+hurt+" 点伤害。"); return m.getHp(); } //输出对怪兽结果的方法 public int result(Monster m){ System.out.println(); if(hp>0) System.out.println(name+" 取得胜利。"); else{ //主角光环,正义必胜。。。。。 System.out.println(name+" 使用动感光波秒杀了对手。"); m.setHp(0); m.getHp(); } return m.getHp(); } //对Boss造成伤害的方法 public int doHurt(Boss m){ m.setHp(m.getHp()-hurt); m.getHp(); System.out.print(name+" 对 "+m.getName()+" 造成 "+hurt+" 点伤害。"); return m.getHp(); } //输出对Boss结果的方法 public int result(Boss m){ System.out.println(); if(hp>0) System.out.println(name+" 取得胜利。"); else{ //主角光环,正义必胜。。。。。 System.out.println(name+" 使用动感光波秒杀了对手。"); m.setHp(0); m.getHp(); } return m.getHp(); }
?
?
public class Monster{ private String name; private int hp; private int hurt; public Monster(String name,int hp,int hurt){ this.name = name; this.hp = hp; this.hurt = hurt; } //设置名字属性的方法 public void setName(String n){ name = n; } //获取名字属性的方法 public String getName(){ return name; } //设置血量属性的方法 public void setHp(int h){ hp = h; } //获取血量的方法 public int getHp(){ return hp; } //设置攻击力属性的方法 public void setHurt(int t){ hurt = t; } //获取攻击力的方法 public int getHurt(){ return hurt; } //对对手造成伤害的方法 public int doHurt(Outman o){ o.setHp(o.getHp()-hurt); o.getHp(); if(o.getHp()>0) System.out.print(name+" 对 "+o.getName()+" 造成 "+hurt+" 点伤害。"); return o.getHp(); } //输出结果的方法 public void result(){ if(hp>0) System.out.println(name+" 取得胜利。"); else System.out.println(name+" 血量为0。 "+name+" 被击败了。"); }
?
?
?
?