Java面向对象学习笔记-1

前言

Java是一门面向对象的编程语言,通过类和对象的概念可以对现实事物进行抽象和封装。本文将带领大家逐步理解Java面向对象编程的关键要点,并通过示例代码加深理解。学完本文,你将能够熟练使用Java类和对象表示现实世界中的概念,为后续的Java学习奠定坚实基础。

类和对象

类是对一群具有相同属性和行为的对象的抽象,对象是类的实例。我们通过四个例子来理解类和对象的概念:

Dog 类

Dog类用于表示狗,它包含名字、健康值、亲密度等属性,以及吃食物、打印信息等行为。我们可以创建多个Dog对象,每个对象都代表一只狗,并拥有独立的属性值。

package cn.qq.xiangmu.entity;

public class Dog {
    private String name;
    private int health;
    private int love;
    private String strain;

    // 个人建议,没有什么特殊要求时,提供无参和满参构造函数即可

    // 默认系统会提供一个无参的公有的没有什么内容的构造函数
    public Dog() {
        //this("匿名", 50, 50, "土狗"); // 构造函数的调用,必须在函数体的第一行。不允许递归死循环调用。实际开发很少使用!
    }

    // 如果自定义了有参构造函数,系统就不再提供无参构造函数
    public Dog(String name, int health, int love, String strain) {
        //this(); // 构造函数的调用,必须在函数体的第一行。不允许递归死循环调用。实际开发很少使用!
        this.name = name;
        this.health = health;
        this.love = love;
        this.strain = strain;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        if (health < 0) health = 0;
        if (health > 100) health = 100;
        this.health = health;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }

    public String getStrain() {
        return strain;
    }

    public void setStrain(String strain) {
        this.strain = strain;
    }

    public void print() {
        System.out.println("宠物的自白");
        System.out.println("我的名字叫"+name+",健康值是"+health+",和主人的亲密度是"+love+",我是一只"+strain);
    }
}

  • Dog 类表示一只狗,包括名称、健康值、亲密度和品种等属性。
  • 通过构造函数,可以初始化这些属性。
  • 提供了 getter 和 setter 方法,以便访问和修改这些属性。
  • print 方法用于打印狗的信息。

Penguin 类

Penguin类用于表示企鹅,属性和行为与Dog类类似,区别在于添加了表示性别的属性。多个Penguin对象可用于代表不同的企鹅。

package cn.qq.xiangmu.entity;

public class Penguin {
    // 常量的定义 可以参考 Integer.MAX_VALUE
    public static final String SEX_MALE = "Q仔";
    public static final String SEX_FEMALE = "Q妹";
    private String name;
    private int health;
    private int love;
    private String sex;

    public Penguin() {
    }

    public Penguin(String name, int health, int love, String sex) {
        this.name = name;
        this.health = health;
        this.love = love;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        if (health < 0) health = 0;
        if (health > 100) health = 100;
        this.health = health;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void print() {
        System.out.println("宠物的自白");
        System.out.println("我的名字叫"+name+",健康值是"+health+",和主人的亲密度是"+love+",性别是"+sex);
    }
}

  • Penguin 类表示一只企鹅,包括名称、健康值、亲密度和性别等属性。
  • 通过构造函数,可以初始化这些属性。
  • 提供了 getter 和 setter 方法,以便访问和修改这些属性。
  • print 方法用于打印企鹅的信息。
  • 类中定义了常量字段 SEX_MALESEX_FEMALE 用于表示企鹅的性别。

Xxx 类

package cn.qq.xiangmu.entity;

public class Xxx {
    public int a1 = 1;
    public static int a2 = 2;

    public Xxx() {
        System.out.println("Xxx()构造函数");
    }

    public Xxx(int a1) {
        System.out.println("Xxx(int)构造函数");
        this.a1 = a1;
    }

    public void f1() {
        System.out.println("f1(): " + this.a1 + Xxx.a2);
        Xxx.f2();
    }

    public static void f2() {
        System.out.println("f2(): " + Xxx.a2);
    }
}

  • Xxx 类包含了一个实例变量 a1 和一个静态变量 a2
  • 通过构造函数,可以创建 Xxx 类的实例并初始化实例变量。
  • f1 方法是实例方法,用于打印实例变量 a1 和静态变量 a2 的值。
  • f2 方法是静态方法,用于打印静态变量 a2 的值。

Yyy 类

package cn.qq.xiangmu.entity;

public class Yyy {
    int a1;
    public static int a2;

    public Yyy() {
        a1 = 10;
    }

    {
        // 代码块 构造了n次对象前,默认就会自动调用n次
        a1++;
    }

    static {
        // 静态代码块 该类有访问就唯一调用一次
        a2++;
    }

    public void f1() {
        System.out.println(a1);
    }
}

  • Yyy 类包含了一个实例变量 a1 和一个静态变量 a2
  • 构造函数初始化实例变量 a1
  • 类中包括实例初始化块,这些块在创建对象之前自动执行。
  • 类还包括静态初始化块,这些块在类加载时执行,仅执行一次。
  • f1 方法用于打印实例变量 a1 的值。

测试类

Demo01 类

package cn.qq.xiangmu.test;

import cn.qq.xiangmu.entity.*;

public class Demo01 {
    public static void main(String[] args) {
        Dog dog = new Dog("欧欧", 100, 0, "德国牧羊犬");
        System.out.println(Penguin.SEX_FEMALE);
        Penguin penguin = new Penguin("美美", 90, 10, Penguin.SEX_FEMALE);
        dog.print();
        penguin.print();
    }
}

在这里插入图片描述

  • 包含一个 main 方法,演示了如何使用 DogPenguin 类创建实例并打印它们的信息。

Demo02 类

package cn.qq.xiangmu.test;

import cn.qq.xiangmu.entity.Xxx;

public class Demo02 {
    public static void main(String[] args) {
        Xxx xxx1 = new Xxx(1111);
        Xxx xxx2 = new Xxx(11111);
        System.out.println(xxx1.a1);
        System.out.println(xxx2.a1);
        xxx1.f1();
        xxx2.f1();
        Xxx.a2 = 22;
        Xxx.f2();
    }
}

  • 包含一个 main 方法,演示了如何使用 Xxx 类创建实例、调用方法以及修改静态变量。
    在这里插入图片描述

Demo03 类

package cn.qq.xiangmu.test;

import cn.qq.xiangmu.entity.Yyy;

public class Demo03 {
    public static void main(String[] args) {
        System.out.println(Yyy.a2);
        System.out.println(Yyy.a2);
    }
}

  • 包含一个 main 方法,演示了如何使用 Yyy 类访问其静态变量 a2

当涉及到Java面向对象编程的拓展知识时,以下是一些相关主题和概念,你可以进一步了解:
在这里插入图片描述f

继承

继承是面向对象编程中的重要概念之一,它允许一个类从另一个类继承属性和方法。子类继承父类的属性和方法,并且可以扩展或修改它们。继承有助于代码重用和组织。

多态

多态是指对象能够以多种形态存在的特性。它允许使用基类类型的引用来引用派生类的对象,并根据实际对象的类型执行相应的操作。多态提供了灵活性和可扩展性,使得代码更具可读性和可维护性。

接口

接口是定义了一组方法和常量的抽象类型,它只包含方法签名而没有实现。类可以实现一个或多个接口,并且必须实现接口中定义的所有方法。接口提供了一种规范,用于描述对象的行为,使得不同的类可以按照相同的接口进行交互。

抽象类

抽象类是不能被实例化的类,它用于作为其他类的基类。抽象类可以包含抽象方法、普通方法和实例变量。子类继承抽象类后,必须实现抽象方法。抽象类提供了一种模板和规范,用于定义通用的行为和属性。

封装

封装是一种将数据和对数据操作的方法组合在一起的编程概念。通过封装,对象的内部细节被隐藏并且不可直接访问,只能通过公开的方法来访问和修改对象的状态。封装提供了数据安全性、代码重用和简化调用的好处。

包是一种用于组织和管理Java类的机制。它提供了命名空间的概念,可以防止类名冲突。通过将相关的类放入同一个包中,可以更好地组织代码,并且有助于代码的可读性和可维护性。

这些主题都是Java面向对象编程中的重要概念,深入理解它们将有助于你在实际开发中设计和构建高质量的Java应用程序。

总结

通过这份学习笔记,我们全面了解了Java类的各个组成部分,包括:

  • 实例变量和静态变量的区别
  • 构造函数的作用
  • 实例方法和静态方法的区别
  • 实例初始化块和静态初始化块的执行时机

并通过测试类验证了这些概念在实际编程中的用法。这为我们后续学习Java的面向对象特征如继承、多态等奠定了坚实的基础。

在这篇文章中,我们学习了Java中面向对象编程的关键要点,包括类和对象的概念、属性和行为的抽象以及如何使用示例代码加深理解。通过对四个例子(Dog、Penguin、Xxx、Yyy)的介绍和代码演示,我们对类和对象有了更深入的理解。

  • Dog 类用于表示狗的属性和行为,包括名字、健康值、亲密度和品种等。我们可以创建多个 Dog 对象来代表不同的狗。
  • Penguin 类用于表示企鹅的属性和行为,与 Dog 类类似,但添加了性别属性。也可以创建多个 Penguin 对象来代表不同的企鹅。
  • Xxx 类包含实例变量和静态变量,通过构造函数初始化实例变量,并提供了实例方法和静态方法来访问这些变量。
  • Yyy 类也包含实例变量和静态变量,但同时还包括了实例初始化块和静态初始化块。实例初始化块在创建对象之前自动执行,而静态初始化块在类加载时执行,仅执行一次。

我们还介绍了测试类 Demo01Demo02Demo03 的使用方法,展示了如何创建实例、调用方法以及修改静态变量。

通过学习这些内容,我们深入理解了类的各个组成部分,包括实例变量、静态变量、构造函数、实例方法、静态方法以及初始化块的执行时机。这为后续学习Java中的面向对象特性如继承、多态等打下了坚实的基础。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

friklogff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值