1. Java面向对象编程基础概念
面向对象编程(OOP)是Java语言的核心思想,也是现代软件开发的主流范式。与面向过程编程相比,OOP更贴近现实世界的思维方式。在Java中,一切皆对象,而类则是创建对象的蓝图。
提示:Java SE(Standard Edition)是Java平台的标准版,包含了开发桌面和简单服务器应用所需的核心API和JVM。
面向对象的三大基本特性:
- 封装:隐藏对象内部细节,通过公共方法访问数据
- 继承:子类可以继承父类的属性和方法
- 多态:同一操作作用于不同对象会产生不同行为
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 类的定义与基本语法
2.1 类的基本结构
一个最简单的Java类定义如下:
java复制[访问修饰符] class 类名 {
// 成员变量(属性)
[访问修饰符] 数据类型 变量名;
// 构造方法
[访问修饰符] 类名(参数列表) {
// 初始化代码
}
// 成员方法
[访问修饰符] 返回值类型 方法名(参数列表) {
// 方法体
}
}
2.2 类的主要组成部分详解
2.2.1 访问修饰符
Java提供了四种访问级别:
- public:对所有类可见
- protected:对同一包内的类和所有子类可见
- 默认(不写修饰符):仅对同一包内的类可见
- private:仅对本类可见
注意:一个Java源文件中只能有一个public类,且文件名必须与public类名相同。
2.2.2 成员变量
成员变量也称为属性或字段,用于描述对象的特征。定义时应考虑:
- 数据类型:基本类型或引用类型
- 命名规范:小驼峰命名法(如studentName)
- 初始化:可以在声明时初始化,也可以在构造方法中初始化
2.2.3 构造方法
构造方法特点:
- 方法名与类名相同
- 没有返回类型(连void都没有)
- 可以重载(多个不同参数的构造方法)
- 如果没有显式定义,编译器会自动提供默认无参构造方法
2.2.4 成员方法
成员方法定义对象的操作行为,包含:
- 方法签名:方法名+参数列表
- 方法体:具体的实现代码
- 返回值:使用return语句返回,void表示无返回值
3. 类的使用与对象创建
3.1 创建对象的基本步骤
java复制// 1. 声明对象引用
ClassName objectName;
// 2. 实例化对象
objectName = new ClassName();
// 也可以合并为一步
ClassName objectName = new ClassName();
3.2 对象的内存模型
Java对象在内存中的存储分为三部分:
- 对象头:存储对象的元数据(如哈希码、GC信息等)
- 实例数据:存储对象的属性值
- 对齐填充:确保对象大小是8字节的整数倍
提示:使用new关键字创建对象时,JVM会在堆内存中分配空间,对象引用变量存储在栈内存中。
3.3 对象初始化的完整过程
- 加载类:如果类尚未加载,JVM会加载.class文件
- 分配内存:在堆中为新对象分配内存空间
- 默认初始化:为成员变量赋默认值(数值为0,布尔为false,引用为null)
- 显式初始化:执行成员变量的显式初始化(如果有)
- 构造代码块:执行类中的构造代码块
- 构造方法:执行对应的构造方法
4. 类的进阶特性
4.1 static关键字
static修饰的成员属于类而非对象:
- 静态变量:所有对象共享同一份数据
- 静态方法:只能访问静态成员,不能使用this
- 静态代码块:类加载时执行,用于初始化静态资源
java复制class MyClass {
static int count = 0; // 静态变量
static {
// 静态代码块
System.out.println("类被加载了");
}
static void printCount() { // 静态方法
System.out.println("Count: " + count);
}
}
4.2 final关键字
final可以修饰:
- 类:表示不可被继承
- 方法:表示不可被重写
- 变量:表示常量,只能赋值一次
java复制final class FinalClass { // 不可继承的类
final int MAX_VALUE = 100; // 常量
final void finalMethod() { // 不可重写的方法
// 方法实现
}
}
4.3 this关键字
this表示当前对象的引用,主要用途:
- 区分成员变量和局部变量
- 在构造方法中调用其他构造方法(必须放在第一行)
- 作为参数传递当前对象
java复制class Person {
String name;
Person(String name) {
