Java 类和对象

Java 类与对象完整讲解

一、核心概念

1. 类(Class)

类是对象的模板、蓝图、抽象描述,定义一类事物共同的属性(成员变量)行为(成员方法)

  • 抽象:描述共性,不代表具体实体
  • 组成:成员变量、成员方法、构造方法、代码块、内部类

2. 对象(Object)

对象是类的实例,真实存在的具体事物

  • 一个类可以创建多个不同对象
  • 对象拥有类定义的属性和行为,属性值各自独立

关系总结

类 → 模板;对象 → 根据模板造出来的实物
例:Person(类)→ 张三、李四(对象)

二、类的语法结构

// 定义类
public class Person {
    // 1. 成员变量(属性)
    String name;
    int age;

    // 2. 构造方法(创建对象时调用,初始化属性)
    public Person() {
        // 无参构造
    }
    public Person(String n, int a) {
        name = n;
        age = a;
    }

    // 3. 成员方法(行为)
    public void sayHello() {
        System.out.println("我是" + name + ",今年" + age + "岁");
    }
}

三、创建对象 & 使用对象

1. 两步创建对象

  1. new Person():在堆内存开辟空间,创建实体
  2. Person p:栈内存引用变量,指向堆中的对象
// 方式1:分开写
Person p;
p = new Person("张三", 18);

// 方式2:合并(最常用)
Person p2 = new Person("李四", 20);

2. 访问属性、调用方法

// 访问成员变量
System.out.println(p.name);
System.out.println(p.age);

// 修改属性
p.age = 19;

// 调用成员方法
p.sayHello();

四、构造方法(Constructor)

特点

  1. 方法名和类名完全相同
  2. 没有返回值(连void都不能写)
  3. 创建对象new时自动执行,用于初始化成员变量
  4. 一个类可以有多个构造方法(方法重载)
  5. 不手动写构造,编译器自动提供默认无参构造;写了有参构造,默认无参构造消失

示例:

public class Student {
    String name;
    // 无参构造
    public Student() {}
    // 有参构造
    public Student(String n) {
        name = n;
    }
}

五、成员变量 vs 局部变量

对比项 成员变量(类中方法外) 局部变量(方法/代码块内)
位置 类内部,方法外面 方法、for、if 内部
内存 堆内存(随对象) 栈内存(方法执行完销毁)
默认值 有默认值(int=0,String=null) 无默认值,必须手动赋值
生命周期 对象销毁才消失 方法执行结束立即消失
public class Test {
    int a; // 成员变量,默认0
    public void test() {
        int b; // 局部变量,不赋值不能用
        // System.out.println(b); 报错
    }
}

六、this 关键字

this代表当前对象,解决成员变量和局部变量重名问题

  1. this.成员变量:访问本类成员变量
  2. this.方法():调用本类其他方法
  3. this():调用本类其他构造方法,必须放在构造第一行
public Person(String name, int age) {
    this.name = name; // this.name 对象属性,name 形参
    this.age = age;
}

七、封装(类与对象核心特性)

问题

直接对象.属性可以随意修改数据,无法限制非法值(age=-50)

封装实现步骤

  1. 成员变量用 private 私有,外部无法直接访问
  2. 提供 getter/setter 公共方法,控制读写逻辑
public class Person {
    private int age; // 私有

    // set赋值
    public void setAge(int age) {
        if (age > 0 && age < 150) { // 数据校验
            this.age = age;
        } else {
            System.out.println("年龄非法");
        }
    }
    // get取值
    public int getAge() {
        return age;
    }
}
// 使用
Person p = new Person();
p.setAge(20);
System.out.println(p.getAge());

八、内存图解简化理解

  1. :存引用变量 Person p,存地址
  2. new Person() 真实对象,存放成员变量
  3. 赋值传递:Person p2 = p 只是复制地址,两个引用指向同一个对象,修改互相影响
Person p1 = new Person("小明",10);
Person p2 = p1;
p2.name = "小红";
System.out.println(p1.name); // 小红

九、完整示例代码

// 定义类
public class Cat {
    // 属性
    private String color;
    private String name;

    // 无参构造
    public Cat() {}
    // 有参构造
    public Cat(String n, String c) {
        name = n;
        color = c;
    }

    // getter setter
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }

    // 方法
    public void meow() {
        System.out.println(name + ":喵喵喵,毛色" + color);
    }
}

// 测试类
class TestCat {
    public static void main(String[] args) {
        // 创建对象
        Cat cat1 = new Cat("橘猫", "橘黄色");
        cat1.meow();

        Cat cat2 = new Cat();
        cat2.setName("布偶");
        cat2.setColor("白色");
        cat2.meow();
    }
}

十、常见面试要点

  1. 类和对象区别:类是模板,对象是实例;类抽象,对象具体
  2. 构造方法作用:初始化对象属性,无返回值,与类同名
  3. this三种用法:访问成员变量、调用成员方法、调用本类构造
  4. 封装目的:隐藏内部细节,控制数据访问,提高安全性
  5. 成员变量默认值:数值0、布尔false、引用null
posted @ 2026-06-27 15:01  XIAOMUZO  阅读(2)  评论(0)    收藏  举报