1. Java速通基础课:从零到入门的实战指南
第一次接触Java的新手们往往会被各种概念和术语搞得晕头转向。作为一个从2008年就开始使用Java的老程序员,我深知学习一门新语言的痛苦。今天我就用最直白的语言,带大家快速掌握Java的核心基础,避开那些年我踩过的坑。
Java作为一门面向对象的编程语言,最大的特点就是"一次编写,到处运行"。这意味着你写的Java代码可以在Windows、Linux、Mac等各种操作系统上运行,只要安装了对应的Java运行环境(JRE)。目前Java在企业级开发、Android应用开发、大数据处理等领域都有广泛应用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Java开发环境搭建
2.1 JDK安装与配置
Java开发的第一步就是安装JDK(Java Development Kit)。我推荐直接从Oracle官网下载最新的LTS版本(目前是JDK 17),避免使用过时的版本。
安装完成后,需要配置环境变量:
- JAVA_HOME:指向JDK的安装目录
- Path:添加%JAVA_HOME%\bin
- CLASSPATH:设置类路径(初学者可以暂时不配置)
注意:Windows系统配置环境变量后需要重启命令行窗口才能生效
验证安装是否成功:
bash复制java -version
javac -version
2.2 开发工具选择
对于初学者,我建议从简单的文本编辑器开始,比如:
- VS Code + Java扩展包
- IntelliJ IDEA Community版(免费)
- Eclipse
我个人更推荐IntelliJ IDEA,它的代码提示和错误检查功能对新手特别友好。
3. Java基础语法精讲
3.1 基本数据类型
Java有8种基本数据类型:
- 整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)
- 浮点型:float(4字节)、double(8字节)
- 字符型:char(2字节)
- 布尔型:boolean(1位)
java复制int age = 25; // 声明并初始化一个整型变量
double price = 99.99; // 双精度浮点数
char grade = 'A'; // 字符要用单引号
boolean isJavaFun = true; // 布尔值
3.2 流程控制语句
3.2.1 条件语句
java复制// if-else语句
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
// switch语句(Java 12+支持箭头语法)
switch (day) {
case 1 -> System.out.println("星期一");
case 2 -> System.out.println("星期二");
// ...
default -> System.out.println("无效输入");
}
3.2.2 循环语句
java复制// for循环
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
// while循环
int i = 0;
while (i < 10) {
System.out.println(i);
i++;
}
// do-while循环
int j = 0;
do {
System.out.println(j);
j++;
} while (j < 10);
3.3 数组使用
java复制// 声明并初始化数组
int[] numbers = {1, 2, 3, 4, 5};
// 访问数组元素
System.out.println(numbers[0]); // 输出1
// 遍历数组
for (int num : numbers) {
System.out.println(num);
}
// 数组长度
System.out.println(numbers.length); // 输出5
注意:Java数组下标从0开始,访问越界会抛出ArrayIndexOutOfBoundsException
4. 面向对象编程核心
4.1 类与对象
java复制// 定义一个Person类
public class Person {
// 字段(属性)
String name;
int age;
// 方法
void sayHello() {
System.out.println("你好,我是" + name);
}
}
// 创建对象并使用
Person p = new Person();
p.name = "张三";
p.age = 20;
p.sayHello();
4.2 构造方法
java复制public class Person {
String name;
int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
// 使用构造方法创建对象
Person p = new Person("李四", 25);
4.3 继承与多态
java复制// 父类
class Animal {
void eat() {
System.out.println("动物在吃东西");
}
}
// 子类继承父类
class Dog extends Animal {
@Override
void eat() {
System.out.println("狗在吃骨头");
}
void bark() {
System.out.println("汪汪汪");
}
}
// 多态示例
Animal myDog = new Dog();
myDog.eat(); // 输出"狗在吃骨头"
// myDog.bark(); // 错误,Animal类没有bark方法
5. 异常处理机制
5.1 基本异常处理
java复制try {
// 可能抛出异常的代码
int result = 10 / 0;
} catch (ArithmeticException e) {
// 捕获特定异常
System.out.println("除数不能为零");
} catch (Exception e) {
// 捕获所有异常
System.out.println("发生错误:" + e.getMessage());
} finally {
// 无论是否发生异常都会执行
System.out.println("执行完毕");
}
5.2 自定义异常
java复制// 自定义异常类
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
// 使用自定义异常
void checkAge(int age) throws MyException {
if (age < 18) {
throw new MyException("年龄太小");
}
}
try {
checkAge(15);
} catch (MyException e) {
System.out.println(e.getMessage());
}
6. Java常用类库
6.1 String类
java复制String str = "Hello, Java!";
// 常用方法
System.out.println(str.length()); // 字符串长度
System.out.println(str.charAt(1)); // 获取指定位置字符
System.out.println(str.substring(7)); // 子字符串
System.out.println(str.indexOf("Java")); // 查找子串位置
System.out.println(str.toUpperCase()); // 转大写
System.out.println(str.replace("Java", "World")); // 替换
6.2 集合框架
java复制// List接口(有序可重复)
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
// Set接口(无序不重复)
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(1); // 重复元素不会被添加
// Map接口(键值对)
Map<String, Integer> map = new HashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
System.out.println(map.get("Alice")); // 输出25
7. 文件I/O操作
7.1 文件读写
java复制// 写入文件
try (BufferedWriter writer = new BufferedWriter(new FileWriter("test.txt"))) {
writer.write("Hello, Java!");
} catch (IOException e) {
e.printStackTrace();
}
// 读取文件
try (BufferedReader reader = new BufferedReader(new FileReader("test.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
7.2 序列化与反序列化
java复制// 实现Serializable接口
class Student implements Serializable {
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
// 序列化对象到文件
Student stu = new Student("张三", 20);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.dat"))) {
oos.writeObject(stu);
} catch (IOException e) {
e.printStackTrace();
}
// 从文件反序列化对象
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.dat"))) {
Student stu2 = (Student) ois.readObject();
System.out.println(stu2.name + ", " + stu2.age);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
8. 多线程编程基础
8.1 线程创建
java复制// 方式1:继承Thread类
class MyThread extends Thread {
public void run() {
System.out.println("线程运行中");
}
}
// 方式2:实现Runnable接口
class MyRunnable implements Runnable {
public void run() {
System.out.println("Runnable线程运行中");
}
}
// 启动线程
new MyThread().start();
new Thread(new MyRunnable()).start();
8.2 线程同步
java复制class Counter {
private int count = 0;
// 同步方法
public synchronized void increment() {
count++;
}
public int getCount() {
return count;
}
}
// 使用
Counter counter = new Counter();
Runnable task = () -> {
for (int i = 0; i < 1000; i++) {
counter.increment();
}
};
Thread t1 = new Thread(task);
Thread t2 = new Thread(task);
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(counter.getCount()); // 输出2000
9. Java新特性速览
9.1 Java 8特性
java复制// Lambda表达式
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));
// Stream API
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.filter(n -> n % 2 == 0)
.mapToInt(n -> n * 2)
.sum();
System.out.println(sum); // 输出12
9.2 Java 10+特性
java复制// 局部变量类型推断(var)
var list = new ArrayList<String>();
list.add("Java");
System.out.println(list);
// 文本块(Java 15+)
String html = """
<html>
<body>
<p>Hello, Java!</p>
</body>
</html>
""";
System.out.println(html);
10. 常见问题与解决方案
10.1 内存不足错误
java复制// java.lang.OutOfMemoryError: Java heap space
// 解决方案:增加JVM堆内存
// 启动时添加参数:-Xms512m -Xmx1024m
10.2 环境配置问题
java复制// 错误: 找不到或无法加载主类
// 原因:类路径配置不正确
// 解决方案:
// 1. 确保编译生成了.class文件
// 2. 运行时要指定完整类名(包括包名)
// 3. 使用-cp参数指定类路径
10.3 编码问题
java复制// 控制台输出乱码
// 解决方案:
// 1. 确保源代码文件编码与编译器一致(建议UTF-8)
// 2. 运行程序时添加参数:-Dfile.encoding=UTF-8
// 3. 在IDE中设置正确的编码
11. 学习路线建议
- 基础阶段:语法、面向对象、集合、IO
- 进阶阶段:多线程、网络编程、JDBC
- 框架学习:Spring、Spring Boot、MyBatis
- 项目实战:开发一个小型管理系统或Web应用
- 深入理解:JVM原理、设计模式、算法与数据结构
提示:学习编程最重要的是多写代码,建议每个知识点都动手实践,不要只看不练
12. 推荐资源
- 官方文档:Oracle Java Tutorials
- 在线学习:Codecademy、LeetCode
- 书籍:《Java核心技术》《Effective Java》
- 社区:Stack Overflow、GitHub
- 视频教程:B站、慕课网上的优质课程
学习Java是一个循序渐进的过程,不要期望一夜之间成为专家。我见过太多人因为前期进展缓慢而放弃,但坚持下来的都收获了丰厚的回报。记住,每个Java高手都是从"Hello World"开始的。
