目标:
1.掌握语法格式和用途
2.熟练使用参数的传递
类是由属性和方法组成。
方法: 1.普通方法(对象的行为)
2.构造方法(实例化对象的方法)
1.构造方法
语法格式:
public 类名(数据类型 形参名,...){ //构造方法
code·····//方法体
}
public 数据类型 方法名返回值(数据类型 形参名,...){ //普通方法
code·····//方法体
}
区别:
1.返回值的不同:普通方法返回返回值数据类型;构造方法返回对象在堆中的地址。
2.方法名的不同:普通方法名可根据需要自己命名;构造方法名必须是类名。
用途:
1.实例化对象。
实例化对象的格式:类名 对象名 = new 类名();
2.给
属性设置初始值。
实例化对象并设置初始值的格式:类名 对象名 = new 类名(初始值用‘,’间隔);
Java会给类提供一个默认的构造方法;如果类中定义了构造方法,则默认的会被覆盖
无法再继续使用默认的构造方法。
若需要不同的构造方法可以
重载构造方法。
2.方法(构造方法和普通方法)重载
实现方法重载的条件
1.方法名字必须要完全相同
2.方法所带的参数个数、参数类型、参数顺序,这三项中最少要有一个是不同的。
如何调用重载后的方法?
根据参数个数、参数类型、参数顺序,自动选择相对应的方法。
什么情况要使用到方法重载?
需要为同一类下的不同对象初始化不同的初始值,比如说一个学生类,一个高三班上的学生有应届生、复读生,需要详细了解每个学生属性,
所以实例化时复读生用带有设置上次高考成绩的构造方法(Student student2=new Student("姓名",上届高考成绩);),实例化应届
生时用另一个构造方法(Student student2=new Student("姓名");)
普通的方法是相同原理,相同的功能但需要不同的参数。
3.this
关键字
this 相当于"我的"的意思
public void setname(String name){
this.name=name;
}
stu1.setname("张三");//此时this指的是stu1,其指的是引用此方法的对象
this可调用相应的方法
public Student(String n){
name=n;
}
public Student(){
this("张三");
} //此时this指的是上个构造方法,这是this的应用之一,构造方法之间的相互调用,但只能调用一次
4.值传递
值传递适用于java的基本数据类型+String
值传递的方法
public void setname(String n){name=n;}
public void setblood(int b){blood=b;}
stu1.setname("张三");
stu1.setblood(100);
5.引用传递
引用传递适用于Java的引用类型(对象类型)[类,抽象类,
接口,数组 ]
Student stu1 = new Student("张三",男,20);//实例化一个stu1对象,设置相应属性姓名,性别,年龄
student stu2 = new Student();//重新实例化一个stu2对象
stu2=stu1;
此时stu2的相应属性为:姓名 张三,性别 男,年龄 20
6.练习
1.回合制游戏:**角色和男爵Boss进行战斗,直到一方的血量为0时结束战斗,输出谁胜利了!
**角色和小怪进行战斗,直到一方的血量为0时结束战斗,输出谁胜利了!
注:
构造方法无返回
值类型不代表无返回值 可以返回new的对象在堆中开辟空间的地址
Student stu;
stu = new Student("张三");//在堆中开辟一块
内存 存储Student对象 相关属性 方法 设地址为123
stu = new Student("张三");//在堆中另开辟一块新的内存 存储一个新的Student对象 相关属性 方法 设地址为@456
此时stu 指的是456的内存 123被覆盖 并被GC垃圾回收机制回收内存
实际上 实例化了 两个对象
Baron类
class="java">
public class Baron {
private String name;
private int blood;
private int ATK;
public Baron(){}//构造函数
public Baron(String n,int b,int a){//重载构造函数
name=n;
blood=b;
ATK=a;
}
public void setname(String n){//设置对象名字的方法
name=n;
}
public void setblood(int b){//设置对象血量的方法
blood=b;
}
public void setATK(int atk){//设置对象攻击力的方法
ATK=atk;
}
public String getname(){//返回对象名字的方法
return name;
}
public int getblood(){//返回对象血量的方法
return blood;
}
public int getatk(){//返回对象攻击力的方法
return ATK;
}
public void attack(Zed z){//设置攻击方法
z.setblood(z.getblood()-this.ATK);
System.out.println(z.getname()+"的血量为:"+z.getblood());
}
public int if_die(){
if(this.getblood()<0){
return 1;
}
else{return 0;}
}
}
Zed类
public class Zed {
private String name;
private int blood;
private int ATK;
public Zed(){}//构造函数
public Zed(String n,int b,int a){//重载构造函数
name=n;
blood=b;
ATK=a;
}
public void setname(String n){//设置对象名字的方法
name=n;
}
public void setblood(int b){//设置对象血量的方法
blood=b;
}
public void setATK(int atk){//设置对象攻击力的方法
ATK=atk;
}
public String getname(){//返回对象名字的方法
return name;
}
public int getblood(){//返回对象血量的方法
return blood;
}
public int getatk(){//返回对象攻击力的方法
return ATK;
}
public void attack(Baron b){//设置攻击方法
b.setblood(b.getblood()-this.ATK);
System.out.println(b.getname()+"的血量为:"+b.getblood());
}
public void attack(Soldier s){//设置攻击方法
s.setblood(s.getblood()-this.ATK);
System.out.println(s.getname()+"的血量为:"+s.getblood());
}
public int if_die(){
if(this.getblood()<0){
return 1;
}
else{return 0;}
}
}
Soldier类
public class Soldier {
private String name;
private int blood;
private int ATK;
public Soldier(){}//构造函数
public Soldier(String n,int b,int a){//重载构造函数
name=n;
blood=b;
ATK=a;
}
public void setname(String n){//设置对象名字的方法
name=n;
}
public void setblood(int b){//设置对象血量的方法
blood=b;
}
public void setATK(int atk){//设置对象攻击力的方法
ATK=atk;
}
public String getname(){//返回对象名字的方法
return name;
}
public int getblood(){//返回对象血量的方法
return blood;
}
public int getatk(){//返回对象攻击力的方法
return ATK;
}
public void attack(Zed z){//设置攻击方法
z.setblood(z.getblood()-this.ATK);
System.out.println(z.getname()+"的血量为:"+z.getblood());
}
public int if_die(){
if(this.getblood()<0){
return 1;
}
else{return 0;}
}
}
主函数类Fighting
public class Fighting {
/**
* @param args
*/
public static void main(String[] args) {
Baron baron = new Baron("男爵",1000,47);
Soldier soldier = new Soldier("小兵",100,10);
Zed zed = new Zed("劫",800,60);
/********************开始战斗************************/
while(baron.getblood()>0&&zed.getblood()>0){
zed.attack(baron);
if(baron.getblood()<0){
System.out.println(baron.getname()+"战死");
break;
}
else{
baron.attack(zed);
if(zed.getblood()<0){
System.out.println(zed.getname()+"战死");
break;
}
}
}
/**********************第二场*************************/
if(baron.getblood()>0){
System.out.println(zed.getname()+"输了");
}
else{
while(zed.getblood()>0&&soldier.getblood()>0){
zed.attack(soldier);
if(soldier.getblood()<0){
System.out.println(zed.getname()+"胜利");
}
else{
soldier.attack(zed);
if(zed.getblood()<0){
System.out.println(zed.getname()+"战死");
break;
}
}
}
}
}
}