快速看懂java代码day08:面向对象和类

本文介绍了Java中的类和对象概念,包括设计类、使用对象,重点讲解了Javabean类、成员变量、构造方法、封装和private关键字的应用。通过格斗游戏实例演示如何创建和交互对象,以及如何优化代码结构。
摘要由CSDN通过智能技术生成

从这里开始,我的目标改变了,不再是学会java,而是看懂后端的代码,想要学习编写java的小伙伴可以不用往下看了,都是理论性的东西。

1.类和对象

前置知识:

类(设计图): 是对象共同特征的描述(就像洗衣服用洗衣机,类就是洗衣机的设计图)

对象: 是真实存在的具体东西(实例)真正可以帮我们做事的(对象就是洗衣机,要洗衣服的时候,调用洗衣机)。

在Java中,必须先设计类,才能获得对象

1.1设计对象并使用

1.定义类                                                                                       2.获得类的对象并赋值,使用

1.2类的补充注意事项

1.2.1类的种类

  • Javabean类:用来描述一类事物的类,在Javabean类中,是不写main方法的。
  • 测试类:在以前,编写main方法的类,我们可以在测试类中创建javabean类的对象并进行赋值调用

1.2.2 注意点

1. 定义类的建议

  • 类名首字母建议大写,需要见名知意,驼峰模式,
  • 一个java文件,建议只写一个class类(一个java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名)

2.成员变量的格式和特点

  • 成员变量的完整定义格式是:修饰符 数据类型 变量名称=初始化值;
    一般无需指定初始化值,存在默认值,如下图。

一个Javabean类就是一个类别,像老师 里面存老师的属性和行为(属性:老师的姓名,教学的科目。行为:修改,编辑,删除等)

2.封装

面向对象的3大特征: 封装,继承,多态

封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为

例:人关门

门的状态数据在门的方法里,所以,修改这个状态的行为,也要放在门的方法中

封装的好处:

让编程变得很简单,有事--找对象,调方法就行。

降低学习成本,不用记对象有哪些方法,有需要时去找就行。

2.2 private关键字

是一个权限修饰符: 可以修饰成员(成员变量和成员方法)

被private修饰的成员只能在本类中才能访问

私有化后,即使赋值正确也无法赋值。

想要校验赋值是否合法,我们需要在GirlFriend中对每一个私有化的变量进行校验(get和set方法),校验通过,才赋值,不通过不赋值

注意:此时赋值,需要调用方法   gf2.setAge(18);  不再是gf2.age = 18;

              获取,System.out.println(gf2.getAge());

private关键字总结:

1.private关键字是一个权限修饰符
2.可以修饰成员(成员变量和成员方法)
3.被private修饰的成员只能在本类中才能访问
4.针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作

5.提供“setXxx(参数)”方法,用于给成员变量赋值,方法用public修饰

6.提供“getXxx()”方法,用于获取成员变量的值,方法用public修饰

2.3 成员变量和局部变量 

定义在类里面是成员变量,定义在方法里是局部变量

当成员变量和局部变量重名时,age打印出来是10,还是null呢?

答:就近原则,用离得近的

如果在方法里想用成员变量,需要用到,this指向

2.4 this

this的作用:区别局部变量和成员变量,使用this时,用的就是成员变量

3.构造方法

是什么? 构造方法也叫作构造器、构造函数。

作用: 在创建对象的时候给成员变量进行赋值(初始化)的

我们之前  student s1=new student();  的小括号中,什么都不写。表示调用空参的构造方法

 带参构造后,自动赋值,不需要在调用时手动挨个赋值

总结:

1.构造方法作用
        创造对象的时候,由虚拟机自动调用,给成员变量进行初始化的。
2.构造方法的种类,各自的作用
        无参数构造方法:初始化的对象时,成员变量的数据均采用默认值

        有参数构造方法:在初始化对象的时候,同时可以为对象进行赋值

3.构造方法注意事项
        任何类定义出来,默认就自带了无参数构造器,写不写都有

        一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写无参数构造器了

        建议在任何时候都手动写上空参和带全部参数的构造方法

4.标准的javabean 

1.类名需要见名知意
2.成员变量使用private修饰
3.提供至少两个构造方法
        无参构造方法
        带全部参数的构造方法

4.成员方法
        提供每一个成员变量对应的setXxx()/getXxx()

        如果还有其他行为,也需要写上

5.综合练习

练习1:格斗游戏

格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来。

package com.itheima.test1;

import java.util.Random;

public class Role { //1.定义role类,提供该类的属性(姓名,血量)
    private String name;
    private int blood;

    //2.提供有参,无惨构造方法
    public Role () {};
    public Role (String name,int blood) {
        this.name = name;
        this.blood = blood;
    };

    //3.提供get和set方法
    //使用了private,就必须提供get和set方法
    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;
    }

    //4.定义攻击别人的方法
    // 问题:谁攻击谁,方法写在哪里?
    // 创建角色对象1,Role r1 = new Role();
    // 创建角色对象2,Role r2 = new Role();
    // 如果是r1 攻击 r2 r1.攻击(r2)也就是方法的调用者攻击传进来的参数
    public void attack(Role role) { //接收的参数是挨揍的人
        //随机一个伤害的点数
        Random r = new Random();
        int hurt = r.nextInt(20) + 1;

        //修改挨揍的人的血量
        int remainBlood = role.getBlood() - hurt;
        remainBlood = remainBlood < 0 ? 0 :remainBlood;// 当挨揍人血量<0时,不能再扣了
        role.setBlood(remainBlood);
        // 输出伤害语句
        System.out.println(this.getName()+ "举起拳头,打了"+role.getName()+"一下,造成了"+ hurt +"点伤害,"+ role.getName() +"还剩下了"+ remainBlood +"点血");
    }
}
package com.itheima.test1;

public class GameTest {
    public static void main(String[] args) {
        //1.创建角色
        Role r1 = new Role("白骨精",100); //第一个角色
        Role r2 = new Role("二郎神",100); //第二个角色

        //2.开始格斗,回合制
        while (true) {
            r1.attack(r2);  //首先r1攻击r2,如果r2的血量=0了,退出循环
            if(r2.getBlood() == 0) {
                System.out.println(r1.getName()+"KO了"+r2.getName());
                break;
            }
            r2.attack(r1);
            if(r1.getBlood() == 0) {
                System.out.println(r2.getName()+"KO了"+r1.getName());
                break;
            }
        }

    }
}

游戏优化,内容如下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值