有没有人能帮我解答一下,真的困扰了我好久,下面Role类中创建的attack方法 public void attack(Role role) 为什么没有static?? 另外参数里面放的不是数据类型和变量名吗? 在参数(Role role)里面 Role是数据类型吗? role是变量名吗?
public class GameTest {
public static void main(String[] args) {
//1.创建第一个角色
Role r1 = new Role("乔峰",100);
//2.创建第二个角色
Role r2 = new Role("鸠摩智",100);
//3.开始格斗 回合制游戏
while(true){
//r1开始攻击r2
r1.attack(r2);
//判断r2的剩余血量
if(r2.getBlood() == 0){
System.out.println(r1.getName() + " K.O了" + r2.getName());
break;
}
//r2开始攻击r1
r2.attack(r1);
if(r1.getBlood() == 0){
System.out.println(r2.getName() + " K.O了" + r1.getName());
break;
}
}
}
}
public class Role {
private String name;
private int blood;
public Role() {
}
public Role(String name, int blood) {
this.name = name;
this.blood = blood;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
//定义一个方法用于攻击别人
//思考:谁攻击谁?
//Role r1 = new Role();
//Role r2 = new Role();
//r1.攻击(r2);
//方法的调用者去攻击参数
public void attack(Role role) {
//计算造成的伤害 1 ~ 20
Random r = new Random();
int hurt = r.nextInt(20) + 1;
//剩余血量
int remainBoold = role.getBlood() - hurt;
//对剩余血量做一个验证,如果为负数了,就修改为0
remainBoold = remainBoold < 0 ? 0 : remainBoold;
//修改一下挨揍的人的血量
role.setBlood(remainBoold);
//this表示方法的调用者
System.out.println(this.getName() + "举起拳头,打了" + role.getName() + "一下," +
"造成了" + hurt + "点伤害," + role.getName() + "还剩下了" + remainBoold + "点血");
}
}
static表示是静态方法,静态方法直接用类名.方法名() 这样的方式调用,没有static表示是普通的方法,用对象名.方法名() 这样的方式调用,是否定义static方法,由自己的需求而定。准确的说,attack(Role role)里面的Role是参数的类型,role是参数的名称。当然,你说Role是数据类型吗,role是变量名,问题也不大,但作为方法参数来说,一般不这样叫,在方法里面或者外面定义的才叫变量,Role你可以说是类,也可以说是自定义的数据类。望采纳!!!
Role是对象数据类型
java里面有八种基本数据类型:boolean、byte、short、char、int、long、float、double
还有他们的包装类Boolean、Byte、Short、Character、Integer、Long、Float、Double
除了基本数据类型以外,其它的都是对象类型,有些是系统提供的比如String、List、Map等
自己定义的类也可以算数据类型。
从你的问题来看,你应该还没了解类和对象,先看一下类和对象相关的知识,再来看这个代码就懂了