广告

Java 中类与对象的区别与联系:一文搞懂,零基础也能快速上手

1. Java 中类与对象的区别与联系的基础概念

1.1 类的定义与作用

Java 中,是对对象属性和行为的模板,使用 class 关键字来定义。模板 让你在不同情况下创建同样结构的对象。

将现实中的事物抽象成一个 ,就像把一组共用属性和行为的特征放入同一个单元。通过这种设计,对象之间的共性与差异被清晰地表达出来,形成了后续编程的基础。

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public int getAge() { return age; }
}

1.2 对象的实例化与使用

要从 产生具体的实体,需要通过 构造方法,并借助 new 运算符来完成对象的实例化。实例化后的对象拥有自己的 状态(字段的值)和 行为(方法)。

通过引用变量来操控对象,这个过程揭示了 对象与类的关系:对象是基于类的实际存在。

// 使用前面定义的 Person 类
Person p = new Person("李四", 28);
System.out.println(p.getName()); // 李四
System.out.println(p.getAge());  // 28

1.3 类的成员:字段、方法、构造方法

一个 可以包含 字段(用于存储状态)、方法(实现行为)以及 构造方法(初始化对象)。

在访问控制方面,字段 往往设为私有,以实现封装;通过公有的 getter/setter 与自定义方法对外暴露必要能力。

public class Car {
    private String model;
    private int year;

    public Car(String model, int year) {
        this.model = model;
        this.year = year;
    }

    public String getModel() { return model; }
    public int getYear() { return year; }

    public void honk() {
        System.out.println("Honk!");
    }
}

2. Java 中对象的生命周期与访问方式

2.1 对象的状态与行为

对象的 状态字段的值决定,行为方法实现。状态可以通过 get/set 访问与修改,而行为通常通过调用 实例方法 来触发。

理解这两个概念有助于设计易维护的代码:封装可以避免直接暴露内部实现细节。

public class User {
    private String username;
    private String email;

    public User(String username, String email) {
        this.username = username;
        this.email = email;
    }

    public String getUsername() { return username; }
    public void setEmail(String email) { this.email = email; }
    public String getEmail() { return email; }
    public void printInfo() {
        System.out.println(username + " <" + email + ">");
    }
}

通过上述代码,可以看到对象的状态与行为如何被组合并对外暴露。

2.2 引用、引用生命周期与垃圾回收

Java 通过 引用 来指向对象,垃圾回收 会在对象不再被任何引用指向时自动回收。合理的对象创建与回收有助于应用的 内存管理

为了避免内存泄漏,常见做法包括:及时清理引用避免循环引用、以及在必要时使用 弱引用 或者显式地将变量设为 null

public class DemoGC {
    public static void main(String[] args) {
        User u = new User("alice", "alice@example.com");
        // 使用后释放引用
        u = null;
        // 提示 JVM 进行垃圾回收(不保证执行)
        System.gc();
    }
}

3. 面向对象三大特性:封装、继承、多态

3.1 封装:隐藏实现细节,暴露接口

通过 封装,我们将对象的内部实现细节隐藏起来,只暴露必要的公有接口。这有助于提升代码的可维护性与可扩展性。

常用实践包括定义 私有字段、提供 公有 getter/setter,以及设计清晰的 方法签名

public class Account {
    private double balance;

    public Account(double balance) {
        this.balance = balance;
    }

    public double getBalance() { return balance; }
    public void deposit(double amount) {
        if (amount > 0) balance += amount;
    }
}

3.2 继承:代码复用与扩展

通过 extends,子类能够继承父类的字段与方法,从而实现代码复用和行为扩展。子类还可以覆盖父类的方法以实现不同表现。

这是建立类层次结构的核心机制,也是实现多态的基础。

public class Animal {
    public void eat() {
        System.out.println("吃饭");
    }
}
public class Dog extends Animal {
    public void bark() {
        System.out.println("汪汪");
    }
}

3.3 多态:同一接口,不同实现

多态允许同一个引用类型在不同对象上表现出不同的行为。核心思想是覆盖(override)以及通过父类引用指向子类对象。

通过示例,可以看到运行时绑定如何在调用时决定具体实现。

public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}
public class TestPolymorphism {
    public static void main(String[] args) {
        Animal a1 = new Cat();
        Animal a2 = new Dog();
        a1.eat(); // 猫吃鱼
        a2.eat(); // 狗吃骨头
    }
}

4. 零基础快速上手的实操路径

4.1 写出你的第一段 Java 代码:HelloWorld

要开始学习,先从一个简单的 HelloWorld 程序入手,理解 main 方法、类与对象的入口。

以下示例展示了最小结构以及输出字符串的基本方式。你将看到 public classpublic static void mainSystem.out.println 的组合。

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}

4.2 从类到对象:简单的示例

接着学习如何通过 new 关键字来实例化对象,并通过方法访问对象的状态与行为。

下面的示例创建了一个简单的 Person 类的对象,并通过 Getter 读取名称。

public class Person {
    private String name;
    public Person(String name) { this.name = name; }
    public String getName() { return name; }
}
public class Test {
    public static void main(String[] args) {
        Person p = new Person("张三");
        System.out.println(p.getName()); // 张三
    }
}

4.3 常见错误与诊断要点

为了避免常见问题,记住几个关键点:无参构造函数字段访问权限、以及 方法签名 的一致性,都是新手容易踩坑的点。

在遇到编译错误时,先检查 类名与文件名是否一致包路径是否正确、以及 导入语句 是否完善。

广告

后端开发标签