public class Main { public static void main(String[] args) {} }),通过
javac编译成.class文件
Java运行环境搭建
1 JDK安装与配置
核心步骤:
| 操作系统 | 下载链接 | 关键操作 |
|—————-|——————————|————————————————————————–|
| Windows | Oracle官网/OpenJDK | ① 下载安装包 → ② 设置JAVA_HOME环境变量 → ③ 将%JAVA_HOME%bin加入Path |
| macOS/Linux | Homebrew (brew install java)| 自动完成路径配置 |
| Ubuntu/Debian | sudo apt install openjdk-17| 命令行直接安装 |
️ 验证安装:终端输入java -version应显示版本号,javac命令可执行编译。
2 集成开发环境(IDE)选择
| 工具 | 特点 | 适用场景 |
|---|---|---|
| IntelliJ IDEA | 智能提示强,插件生态丰富 | 企业级项目开发 |
| Eclipse | 开源免费,支持多种语言 | 教学场景/轻量级项目 |
| VS Code + Java插件 | 轻量化,启动速度快 | 快速脚本编写/学习过渡期 |
Java基础语法详解
1 数据类型与变量定义
| 类别 | 示例 | 默认值 | 内存占用 |
|---|---|---|---|
| 基本类型 | int age = 25; |
int→0, float→NaN | int:4字节 |
| 引用类型 | String name = "John"; |
null | 堆区地址指针 |
| 包装类 | Integer count = 10; |
自动装箱拆箱 | 对象头+实际数据 |
注意:char占2字节(Unicode编码),boolean不参与数值运算。
2 流程控制语句
// 三种循环对比
for (int i = 0; i < 5; i++) { ... } // 明确次数时首选
while (condition) { ... } // 条件满足即执行
do { ... } while (condition); // 至少执行一次
跳转语句:break终止当前循环/switch,continue跳过本次剩余代码进入下一轮。
3 数组与集合操作
| 操作 | 传统数组 | ArrayList优势 |
|---|---|---|
| 动态扩容 | 固定长度 | 自动增长(底层ArrayCopy) |
| 元素类型限制 | 单一类型 | 允许null和混合类型 |
| 常用方法 | length属性 | add(), get(), remove()等 |
示例代码:
// 创建并初始化数组
int[] scores = new int[]{90, 85, 78};
System.out.println("最高分: " + Arrays.stream(scores).max().getAsInt());
// 使用List集合
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.forEach(System.out::println); // Lambda表达式遍历
面向对象编程核心
1 类与对象的生命周期
| 阶段 | 触发时机 | 典型行为 |
|---|---|---|
| 加载 | 首次使用时 | JVM加载.class文件到内存 |
| 实例化 | new关键字调用构造器 | 分配堆区内存,初始化字段 |
| 销毁 | GC回收无引用对象 | finalize()方法可选执行 |
构造器重载示例:
public class Person {
private String name;
private int age;
// 无参构造器
public Person() {}
// 全参构造器
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
2 继承与多态实现
// 父类声明为abstract强制子类实现抽象方法
abstract class Animal {
abstract void makeSound();
}
class Dog extends Animal {
@Override
void makeSound() { System.out.println("汪汪"); }
}
// 多态应用
Animal pet = new Dog();
pet.makeSound(); // 输出"汪汪"
3 接口与抽象类区别
| 特性 | 接口 | 抽象类 |
|---|---|---|
| 成员变量 | public static final | 普通成员变量 |
| 方法实现 | 只能声明不能实现 | 可提供默认实现 |
| 多继承能力 | 支持多个接口 | Java单继承限制 |
| 设计目的 | 定义行为规范 | 复用公共代码模板 |
高级特性与最佳实践
1 异常处理机制
try {
FileReader fr = new FileReader("data.txt");
} catch (FileNotFoundException e) {
System.err.println("文件不存在: " + e.getMessage());
} finally {
// 资源释放逻辑(推荐使用try-with-resources)
}
自定义异常示例:
class InvalidAgeException extends Exception {
public InvalidAgeException(String msg) { super(msg); }
}
void checkAdult(int age) throws InvalidAgeException {
if (age < 18) throw new InvalidAgeException("未成年禁止访问");
}
2 泛型编程规范
️ 类型擦除警告:运行时无法获取具体类型参数,需通过instanceof判断。
正确用法:
// 带通配符的上限限定 List<? extends Number> numbers = new ArrayList<Integer>(); numbers.add(null); // 唯一允许添加的元素
3 注解与反射应用
| 内置注解 | 作用场景 | 示例 |
|---|---|---|
| @Override | 标识重写父类方法 | @Override public String toString() |
| @Deprecated | 标记过时API | @Deprecated public void oldMethod() |
| @SuppressWarnings | 抑制特定警告信息 | @SuppressWarnings("unchecked") |
反射获取类信息:
Class<Person> clazz = Person.class;
Constructor<Person> ctor = clazz.getConstructor(String.class, int.class);
Person p = ctor.newInstance("Tom", 25);
标准库常用组件
1 集合框架体系
| 接口/类 | 特点 | 适用场景 |
|---|---|---|
| List | 有序可重复,允许null | 按索引访问元素 |
| Set | 无序不可重复,null最多一个 | 去重/交集/差集运算 |
| Map | 键值对存储,键不可重复 | 快速查找关联关系 |
| Deque | 双端队列,两头都可进出 | 栈/队列混合使用场景 |
性能对比:
HashMap查询O(1),但无序;TreeMap按键排序,红黑树实现。ArrayList随机访问快,LinkedList频繁增删效率高。
2 I/O流操作
| 流类型 | 特点 | 典型用途 |
|---|---|---|
| FileInputStream | 字节流读取文件 | 图片/视频等二进制数据处理 |
| BufferedReader | 缓冲字符流,提高读写效率 | 逐行读取文本文件 |
| ObjectOutputStream | 序列化对象到文件 | 持久化复杂对象状态 |
NIO非阻塞I/O:
Path path = Paths.get("example.txt");
Files.lines(path).forEach(System.out::println); // Java 8新特性
完整开发流程示例
1 简单控制台程序
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第一个数字: ");
int num1 = scanner.nextInt();
System.out.print("请输入第二个数字: ");
int num2 = scanner.nextInt();
System.out.printf("%d + %d = %dn", num1, num2, num1 + num2);
}
}
2 Maven项目管理
pom.xml依赖配置示例:
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
相关问答FAQs
Q1: 为什么会出现ClassNotFoundException?
A: 此异常表示JVM在类路径中找不到指定的类文件,常见原因包括:① 未将包含该类的目录/JAR包添加到类路径;② 类名拼写错误(区分大小写);③ 使用了错误的包声明,解决方案:检查CLASSPATH环境变量,确认编译后的.class文件位置,或在IDE中重新配置构建路径。
Q2: 如何处理数组越界异常ArrayIndexOutOfBoundsException?
A: 该异常发生在访问数组索引超出0~length-1范围时,预防措施:① 访问前使用array.length判断边界;② 改用List集合替代数组;③ 在循环中使用增强for循环(for(type element : array))。
int[] arr = {1,2,3};
for(int i=0; i<arr.length; i++){ // 安全写法
System.out.println(arr[
