java中pk类的用作_类和对象

### 类(class)

java中只提供了基本数据类型,字符串,及一些数组,无法表示很多类型数据,比如学生:那么如何在java程序中表示一个Student?我们可以创建一个新的类型是就是Student,这就是类的功能。

**类是一种数据类型**

***

### 构造器

从类当中实例化出来的个体,我们称之为对象,创建对象的语法为:**类名 对象(实例)名称 = new 构造器();**

构造器的作用:

1.创建对象

2.为对象属性进行初始化

#### **注意:一个类如果没有写任何构造器,这个类会默认提供一个空的无参构造器,一旦一个类有了任意一个构造器,默认的构造器将不再提供,创建对象时只能调用已经存在的构造器**

通过构造器的重载,可以在实例化对象的时候大大便利我们的开发

Person.java

~~~

public class Person {

String name;// 名字

String sex;// 性别

int age;// 年龄

// 构造器:1.创建对象,如果一个类没有写任何构造器,系统会默认提供一个空的无参构造器

// 一旦写了有参构造器,默认构造器不再提供

// 2.直接给对象属性赋值

public Person() {

}

public Person(String n,String s) {

name = n;

sex = s;

}

public Person(String n,String s,int a) {

name = n;

sex = s;

age = a;

}

public void updateName(String n) {

name = n;

}

public void updateAge(int a) {

if(a > 0) {

age = a;

}else {

System.out.println("error");

}

}

public void study(String subject) {

int num = 20;

System.out.println(name+"嗷嗷学"+subject);

}

}

~~~

Test.java

~~~

public class Test {

public static void main(String[] args) {

// 创建对象:类名 对象(实例)名称 = new 构造器();

// Person p1 = new Person(); 无参构造器实例化

Person p1 = new Person("张三","男",16);// 有参构造器实例化

// 可以用对象调用到对象属性和方法

p1.updateName("hello");

System.out.println(p1.name);

}

}

~~~

### 内存模型

![](https://box.kancloud.cn/f1d5d006946d362c76cb96d01b350b5f_854x517.png)

**只有两个引用指向堆区同一块区域,才是同一个对象(上图中p1,p2虽然属性值完全一样,但是因为指向区域不同,所以不是一个对象)**

***

### 对象作为参数及属性

#### 小练习

**战士PK**

Fighter.java 战士类

~~~

/**

* 战士类

* @author Administrator

*/

public class Fighter {

String name;// 角色名

int hp = 100;// 血量

int defend = 8;// 防御力

int level = 1;// 等级

int dps = 10;// 攻击力

Weapon w = new Weapon("乌木剑", 4);// 武器

public Fighter(String n) {

name = n;

}

public Fighter(String n,Weapon w1) {

name = n;

w = w1;

}

/**

* 攻击方法

* @param fighter 另一个战士对象

*/

public void attack(Fighter f) {

// 判断当前战士是否有血

if(hp <= 0) {

System.out.println("您已经死亡,无法攻击目标");

}else {

// 判断对方是否有血

if(f.hp > 0) {

// 计算伤害

int damage = 0;

if(level + 10 <= f.level || dps + w.dps <= f.defend) {

// 对方等级超出自己10级,强制伤害为1点

damage = 1;

}else {

damage = (int)((dps + w.dps - f.defend)*((1-(f.level - level)*0.1)));

}

// 暴击

double random = Math.random();

if(random < 0.4) {

damage *= 1.5;

System.out.print(name+"发动强力一击,");

}

System.out.println(name+"手持"+w.name+"对"+f.name+"造成了"+damage+"点伤害");

f.hp = f.hp - damage;

if(f.hp < 0) {

f.hp = 0;

System.out.println(f.name+"阵亡了");

return;

}

System.out.println(f.name+"还有"+f.hp+"点血");

}else{

System.out.println("目标已经死亡,严禁鞭尸");

}

}

}

/**

* 升级

* @param money 充的金币

*/

public void Uplevel(int money) {

if(money <= 0) {

System.out.println("不充钱玩声明游戏");

}else {

int num = money/100;

level = level + num;

dps = dps + num * 8;

defend = defend + num * 3;

hp = hp + num * 30;

System.out.println(name+"升了"+num+"级,能力获得很大提升!!!!!!!");

}

}

/**

* 回复

*/

public void drink() {

if(hp < 0) {

System.out.println("去死,喝不了");

return;

}

hp = 100 + (level - 1) * 30;

System.out.println(name+"满血了,很牛b!");

}

}

~~~

Weapon.java武器类

~~~

/**

* 武器

* @author Administrator

*

*/

public class Weapon {

String name;

int dps;

public Weapon(String n,int d) {

name = n;

dps = d;

}

}

~~~

FighterTest.java 测试类

~~~

public class FighterTest {

public static void main(String[] args) {

Weapon w1 = new Weapon("擀面杖", 12);

Weapon w2 = new Weapon("凳子", 11);

Fighter f1 = new Fighter("三季稻",w1);

Fighter f2 = new Fighter("李大花");

while(true) {

double num = Math.random();

// num小于0.5,f1攻击f2

if(num < 0.5) {

double num1 = Math.random();

if(num1 < 0.1) {

f1.Uplevel(500);

}

if(num1 >= 0.1 && num1<= 0.2) {

f1.drink();

}

f1.attack(f2);

}else {

double num1 = Math.random();

if(num1 < 0.2) {

f2.Uplevel(500);

}

if(num1 >= 0.2 && num1<= 0.4) {

f2.drink();

}

f2.attack(f1);

}

if(f1.hp <= 0 || f2.hp <= 0) {

break;

}

}

}

}

~~~

***

### 匿名对象

~~~

// 匿名对象--只生效一次

new Person().age = 12;

~~~

***

### 垃圾回收机制(GC)

**没有引用指向的对象JVM会视其为垃圾**,JVM会调用这个对象的finalize()释放内存空间

~~~

// 如下代码,堆区当中始终都只保留一个对象,之前生成的都被回收了

for(int i = 0;i <10000;i++) {

Person p = new Person();

}

~~~

***

### 栈(stack)内存模型--后进先出

先调用的方法,后执行完毕

![](https://box.kancloud.cn/71a95f46e1e035a9f721afb68b8017c6_447x279.png)

***

### JavaBean(实体类)

1.有无参构造器(必要条件)--与框架相关

2.所有属性私有--保护数据

3.公有的get和set方法--获取修改数据

~~~

public class JavaBean {

private int num;

private String name;

public int getNum() {

return num;

}

public void setNum(int num) {

this.num = num;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

~~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值