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类的各个组成部分,包括:

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

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

猜你喜欢

转载自blog.csdn.net/qq_42531954/article/details/132747279
今日推荐