Java面向对象学习笔记-2

前言

本文介绍了Java中类的定义和对象的创建的基本概念。我们通过示例代码演示了如何定义不同类型的类,包括管理员信息、顾客信息、学校信息和访客信息,并展示了如何创建这些类的对象以及如何访问它们的属性和方法。这些示例有助于理解面向对象编程的基本原理,以及如何在Java中应用这些概念。

Java面向对象学习笔记-1

类的定义和对象的创建

Admin 类 - 管理员信息

Admin 类用于表示管理员,包括管理员的名称和密码。以下是 Admin 类的代码示例:

public class Admin {
    
    
    String name;
    String password;

    public void show() {
    
    
        System.out.println("用户名:" + name + ",密码:" + password);
    }
}

Admin 类的一个典型用例是管理系统中的管理员账户。管理员可以使用用户名和密码登录系统,并具有权限执行特定任务。

Customer 类 - 顾客信息和积分

Customer 类用于表示顾客信息,包括积分和卡类型。以下是 Customer 类的代码示例:

public class Customer {
    
    
    int jifeng; // 积分
    String type; // 卡类型

    public void show() {
    
    
        System.out.println("积分:" + jifeng + ",卡类型:" + type);
    }

    public void huikui() {
    
    
        // 金卡客户积分大于1000分或普卡客户积分大于5000,获得回馈积分500分
        if (("金卡".equals(type) && jifeng > 1000) || ("普卡".equals(type) && jifeng > 5000)) {
    
    
            System.out.println("回馈积分500分!");
        } else {
    
    
            System.out.println("谢谢惠顾!");
        }
    }
}

Customer 类适用于管理顾客的积分和卡类型。根据不同的条件,系统可以计算并回馈积分给顾客。

School 类 - 学校信息

School 类用于表示学校的信息,包括名称、教室数目和机房数目。以下是 School 类的代码示例:

// 类名
public class School {
    
    
    // 属性
    String name; // 名称
    int jsNumber; // 教室数目
    int jfNumber; // 机房数目

    // 方法
    public void show() {
    
    
        System.out.printf("%x\n", this.hashCode()); // 内存地址
        System.out.println("名称:" + name + ",教室数目:" + jsNumber
                + ",机房数目:" + jfNumber);
    }
}

School 类可用于管理学校的基本信息,如名称、教室数和机房数。该类还包含了一个方法,用于显示学校的信息。

Visitor 类 - 访客信息

Visitor 类用于表示访客的信息,包括姓名和年龄。以下是 Visitor 类的代码示例:

public class Visitor {
    
    
    String name;
    int age;

    public void show() {
    
    
        if (age <= 10) System.out.println(name + "的年龄为:" + age + ",门票免费");
        else System.out.println(name + "的年龄为:" + age + ",门票价格为:20元");
    }
}

Visitor 类可以用于跟踪访问者的信息,根据年龄确定门票价格或其他相关信息。

示例和概念

示例 1:创建 School 类的对象

public class Demo01 {
    
    
    public static void main(String[] args) {
    
    
        // 将School类,理解成一种引用数据类型,只不过是自定义的引用数据类型
        // 1. 声明
        School school;
        // 2. 分配空间
        school = new School();
        // 3. 点访问属性
        school.name = "万科城小学";
        school.jsNumber = 36;
        school.jfNumber = 8;
        // 4. 点访问方法
        school.show();
    }
}

在示例中,我们演示了如何创建 School 类的对象并访问其属性和方法。

示例 2:简化创建对象

public class Demo02 {
    
    
    public static void main(String[] args) {
    
    
        // 将School类,理解成一种引用数据类型,只不过是自定义的引用数据类型
        // 声明分配空间
        School school = new School();
        // 点访问方法
        school.show();
        // 点访问属性
        school.name = "万科城小学";
        school.jsNumber = 36;
        school.jfNumber = 8;
        // 点访问方法
        school.show();
    }
}

这个示例简化了对象的创建和访问属性/方法的过程。

示例 3:输入访客信息

import java.util.Scanner;

public class Demo03 {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner = new Scanner(System.in);
        while (true) {
    
    
            System.out.print("请输入姓名:");
            String name = scanner.next();
            if (name.equals("n")) break; // 提供了一个退出通道
            System.out.print("请输入年龄:");
            int age = scanner.nextInt();
            Visitor visitor = new Visitor(); // 创建对象
            // 自动提示功能
            visitor.name = name;
            visitor.age = age;
            visitor.show();
        }

        System.out.println("退出程序");
    }
}

这个示例演示了如何使用 Scanner 接收用户输入,并创建 Visitor 对象来显示访客信息。

示例 4:修改 Admin 密码

import java.util.Scanner;

public class Demo04 {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner = new Scanner(System.in);

        Admin admin = new Admin(); // 准备一张卡
        admin.name = "admin1";
        admin.password = "111111";

        // 试图修改该卡的密码
        System.out.print("请输入用户名:");
        String name = scanner.next();
        System.out.print("请输入密码:");
        String password = scanner.next();
        // 核对
        if (name.equals(admin.name) && password.equals(admin.password)) {
    
    
            System.out.print("请输入新密码:");
            admin.password = scanner.next(); // 一定要更新到对象的属性上,才叫修改
            System.out.println("密码修改成功,你的新密码是:" + admin.password);
        } else {
    
    
            System.out.println("用户名或密码不正确!你没有修改权限。");
        }
    }
}

这个示例演示了用户身份验证以及如何修改管理员密码。

示例 5:顾客信息和回馈积分

public class Demo05 {
    
    
    public static void main(String[] args) {
    
    
        Customer customer = new Customer();
        customer.jifeng = 3050;
        customer.type = "普卡";
        customer.show();
        customer.huikui();
    }
}

在此示例中,我们创建了一个 Customer 对象,展示了顾客信息并计算回馈积分。

示例 6:多个 School 对象

public class Demo06 {
    
    
    public static void main(String[] args) {
    
    
        // 将School类,理解成一种引用数据类型,只不过是自定义的引用数据类型
        // 声明分配空间
        School school1 = new School();
        School school2 = new School();
        System.out.printf("%x\n", school1.hashCode()); // 内存地址
        System.out.printf("%x\n", school2.hashCode()); // 内存地址
        // 点访问属性
        school1.name = "万科城小学";
        school1.jsNumber = 36;
        school1.jfNumber = 8;
        school2.name = "艾溪湖小学";
        school2.jsNumber = 24;
        school2.jfNumber = 6;
        // 点访问方法
        school1.show();
        school2.show();
    }
}

这个示例演示了如何创建多个 School 对象,并显示它们的属性。

示例 7:局部变量作用域

public class Demo07 {
    
    
    public static void main(String[] args) {
    
    
        {
    
    
            int age = 18;
            System.out.println(age);
        }
        {
    
    
            int age = 20;
            System.out.println(age);
        }
    }
}

在示例 7 中,我们演示了局部变量作用域。在不同的代码块中,可以使用相同名称的局部变量,它们不会相互影响。

示例 8:对象引用和垃圾回收

public class Demo08 {
    
    
    public static void main(String[] args) {
    
    
        {
    
    
            School school1 = new School(); // new一律分配在堆
            School school2 = school1;
            School school3 = school1;
            // GC的垃圾回收机制,记录这块堆空间,引用数1+1+1
            school1.name = "艾溪湖小学";
            school1.show();
        }
        // school1被回收了,GC的垃圾回收机制感应到栈变量school1回收了,引用数0
        // GC的垃圾回收机制,就会考虑回收
        System.gc();
    }
}

在示例 8 中,我们演示了对象引用和垃圾回收的概念。当对象不再被引用时,垃圾回收机制可能会将其回收。

示例 9:数字格式化

public class Demo09 {
    
    
    public static void main(String[] args) {
    
    
        // Object 生命类型
        System.out.printf("八进制:%o,十进制:%d,十六进制:%x", 20, 20, 20); // ctrl+p (parameter)
    }
}

最后,在示例 9 中,我们展示了如何使用 printf 方法以不同的进制格式化和显示数字。

总结

本文介绍了Java中类的定义和对象的创建的核心概念,以及如何在实际编程中应用这些概念。通过示例,我们展示了如何创建不同类型的类,如何访问对象的属性和方法,以及如何在程序中使用这些对象来实现各种功能。这些基本概念是面向对象编程的基石,在Java编程中非常重要。读者可以通过本文的示例和概念更好地理解如何设计和使用类与对象,从而更有效地开发Java应用程序。

猜你喜欢

转载自blog.csdn.net/qq_42531954/article/details/132766348