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 class、public static void main 与 System.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 常见错误与诊断要点
为了避免常见问题,记住几个关键点:无参构造函数、字段访问权限、以及 方法签名 的一致性,都是新手容易踩坑的点。
在遇到编译错误时,先检查 类名与文件名是否一致、包路径是否正确、以及 导入语句 是否完善。


