面向对象以对象为核心,把数据与操作数据的方法封装在一起,核心特征:封装、继承、多态。相比面向过程“先做什么再做什么”,面向对象先思考“有哪些对象、对象如何协作”。
类是对象的模板,对象是类的实例。
class Person {
String name; // 成员变量(字段)
int age;
void sayHello() { // 成员方法
System.out.println("Hi, I'm " + name);
}
}
Person p = new Person(); // 用 new 创建对象
p.name = "Tom";
p.sayHello();
new 在堆上分配内存,返回对象引用。private 隐藏字段,提供 getter/setter 控制访问。class Person {
private int age;
public int getAge() { return age; }
public void setAge(int age) {
if (age < 0) throw new IllegalArgumentException("非法年龄");
this.age = age;
}
}
new 时自动调用,用于初始化对象。Person(String name, int age) {
this.name = name;
this.age = age;
}
this 指代当前对象:区分成员变量与局部变量(this.age = age)、调用本类其他构造(this(...))。
对象不再被任何引用指向时成为垃圾,由 JVM 的 GC 自动回收,无需也不能手动 free。可建议回收(System.gc()),但时机由 JVM 决定。
对比:C 手动
malloc/free易泄漏、易悬空指针;C++ 靠析构函数与 RAII 自动管理资源;Java 用 GC 彻底解放堆内存管理,但无法精确控制回收时机(不适用实时系统)。
static 修饰的成员属于类而非实例,全类共享一份:
class Counter {
static int count = 0; // 静态变量
static int next() { return ++count; } // 静态方法
}
Counter.next(); // 类名直接调用,无需 new
定义在类内部的类:
self 需显式作为首参,Java 的 this 隐式;Python 没有真正的 private(靠约定),Java 有访问控制。