Day 1 Java类与对象概念

通过视频+笔记 , 深入理解面向对象核心概念,掌握类的设计与对象的创建

第一部分:类与对象概念

理解面向对象编程的核心思想,区分类与对象的关系

学习目标

理解类是对象的模板,对象是类的实例,掌握二者的区别与联系

什么是类?

类是描述一类事物的模板蓝图,它定义了这类事物的属性和行为。

生活中的例子:

  • 汽车设计图纸 → 类
  • 饼干模具 → 类
  • 房屋户型图 → 类

什么是对象?

对象是类的具体实例,是根据类创建出来的实际存在的事物。

生活中的例子:

  • 根据图纸生产的具体汽车 → 对象
  • 用模具制作的每块饼干 → 对象
  • 按照户型图建造的具体房屋 → 对象

关键理解

类是抽象的概念,对象是具体的实体。一个类可以创建多个对象,每个对象都有独立的属性值。

第二部分:类的基本结构

学习如何定义一个Java类,包括属性、方法和构造器

学习目标

掌握类的基本组成部分,能够独立定义一个简单的类

1

类的基本语法

Java类的完整结构包含:

public class 类名 { // 1. 属性(成员变量) private 数据类型 属性名; // 2. 构造方法 public 类名() { // 初始化代码 } // 3. 普通方法 public 返回类型 方法名(参数列表) { // 方法体 return 返回值; } }
2

创建学生类示例

让我们创建一个实际的Student类:

public class Student { // 属性(成员变量) private String name; // 姓名 private int age; // 年龄 private String studentId; // 学号 private double gpa; // 绩点 // 构造方法(无参构造) public Student() { // 默认构造器 } // 构造方法(带参数构造) public Student(String name, int age, String studentId) { this.name = name; this.age = age; this.studentId = studentId; this.gpa = 0.0; } // getter和setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { if (age > 0 && age < 100) { this.age = age; } } // 自定义方法 public void study() { System.out.println(name + "正在学习"); } public void introduce() { System.out.println("大家好,我是" + name + ",学号是" + studentId + ",今年" + age + "岁"); } }

注意事项

  • 类名必须与文件名完全一致(区分大小写)
  • 一个.java文件中可以有多个类,但只能有一个public类
  • 属性通常使用private修饰,实现封装
  • 方法名使用小驼峰命名法(如getName)

第三部分:对象的创建与使用

学习如何根据类创建对象,并调用对象的方法

学习目标

掌握对象创建的语法,能够正确使用对象的方法和属性

1

对象的创建语法

创建对象的基本语法:

// 语法格式 类名 对象名 = new 类名(参数); // 实际示例 Student student1 = new Student(); Student student2 = new Student("张三", 20, "2024001");
2

对象的使用示例

创建一个完整的使用示例:

public class StudentTest { public static void main(String[] args) { // 创建学生对象 Student stu1 = new Student("张三", 20, "2024001"); Student stu2 = new Student(); // 设置属性值 stu2.setName("李四"); stu2.setAge(19); // stu2.studentId = "2024002"; // 错误!不能直接访问私有属性 // 调用对象方法 stu1.introduce(); stu1.study(); stu2.introduce(); stu2.study(); // 访问属性值 System.out.println("张三的年龄是:" + stu1.getAge()); } }
大家好,我是张三,学号是2024001,今年20岁 张三正在学习 大家好,我是李四,学号是null,今年19岁 李四正在学习 张三的年龄是:20

第四部分:内存模型分析

深入理解对象在内存中的存储方式

学习目标

理解栈内存、堆内存和方法区的区别,明白对象引用的本质

栈内存 (Stack)

student1 (引用地址)
student2 (引用地址)
main方法栈帧

堆内存 (Heap)

Student对象1
name="张三"
age=20
studentId="2024001"
Student对象2
name="李四"
age=19
studentId=null

方法区 (Method Area)

Student.class
方法代码
常量池

内存分配说明

  • 栈内存:存储局部变量和对象引用,线程私有
  • 堆内存:存储对象实例,所有线程共享
  • 方法区:存储类信息、常量、静态变量等

第五部分:常见错误与解决方案

总结初学者在使用类与对象时最容易犯的错误

错误1:空指针异常

错误代码:

Student stu; System.out.println(stu.getName()); // NullPointerException

正确写法:

Student stu = new Student(); System.out.println(stu.getName());

错误2:直接访问私有属性

错误代码:

Student stu = new Student(); stu.name = "张三"; // 编译错误:name是私有的

正确写法:

Student stu = new Student(); stu.setName("张三");

错误3:忘记实例化对象

错误代码:

Student[] students = new Student[3]; students[0].setName("张三"); // NullPointerException

正确写法:

Student[] students = new Student[3]; students[0] = new Student(); students[0].setName("张三");

错误4:混淆对象和引用

错误理解:

认为"stu1 = stu2"会复制对象

实际情况:

Student stu1 = new Student("张三"); Student stu2 = stu1; // stu2和stu1指向同一个对象 stu2.setName("李四"); // stu1的名字也变成了"李四"

第六部分:实战练习

通过实际项目巩固类与对象的概念

学习目标

独立完成一个完整的类设计,并创建多个对象进行操作

练习任务:图书管理系统

要求:

  • 创建Book类,包含属性:书名、作者、价格、库存数量
  • 包含方法:显示图书信息、借书、还书
  • 创建Library类管理多本图书
  • 在main方法中测试功能

步骤1:创建Book类

public class Book { private String title; private String author; private double price; private int stock; public Book(String title, String author, double price, int stock) { this.title = title; this.author = author; this.price = price; this.stock = stock; } public void displayInfo() { System.out.println("《" + title + "》 - " + author + " - ¥" + price + " - 库存:" + stock); } public boolean borrowBook() { if (stock > 0) { stock--; System.out.println("借阅成功!"); return true; } else { System.out.println("库存不足!"); return false; } } public void returnBook() { stock++; System.out.println("还书成功!当前库存:" + stock); } }

步骤2:测试类

public class LibraryTest { public static void main(String[] args) { // 创建图书对象 Book book1 = new Book("Java编程思想", "Bruce Eckel", 108.0, 5); Book book2 = new Book("算法导论", "Thomas Cormen", 128.0, 3); // 显示图书信息 book1.displayInfo(); book2.displayInfo(); // 借阅操作 book1.borrowBook(); book1.borrowBook(); // 还书操作 book1.returnBook(); } }
《Java编程思想》 - Bruce Eckel - ¥108.0 - 库存:5 《算法导论》 - Thomas Cormen - ¥128.0 - 库存:3 借阅成功! 借阅成功! 还书成功!当前库存:4

学习总结

  • 类是模板,对象是实例
  • 使用new关键字创建对象
  • 对象引用存储在栈中,对象数据存储在堆中
  • 封装通过private实现,提供public的getter/setter方法
  • 构造方法用于对象初始化
  • 注意避免空指针异常