java 引用传递 关键字,对构造方法、方法的重载、this关键字及值传递引用传递的理解...

目标:

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;

}

}

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值