1. Java基础入门:从零开始的环境搭建与第一个程序
作为一名从2008年就开始使用Java的老程序员,我至今记得第一次成功运行"Hello World"时的兴奋。Java作为一门历经25年发展的语言,其稳定性、跨平台特性和丰富的生态让它始终保持着旺盛的生命力。根据2023年JetBrains开发者调查报告,Java在全球编程语言使用率中仍稳居前五,特别是在企业级应用、安卓开发和大数据领域占据主导地位。
提示:对于完全零基础的学习者,建议先理解Java的几个核心特性:Write Once Run Anywhere(一次编写到处运行)的跨平台能力、面向对象的编程范式、自动内存管理(垃圾回收机制)以及强大的标准库支持。
1.1 JDK安装与环境变量配置
当前最新的LTS(长期支持)版本是Java 17(2021年发布),但企业环境中Java 8和Java 11仍占很大比例。以下是Windows系统下的安装步骤:
- 访问Oracle官网下载JDK(建议选择Azul Zulu或Amazon Corretto等开源发行版以避免商业授权问题)
- 运行安装程序,记住安装路径(如
C:\Program Files\Java\jdk-17.0.2) - 配置环境变量:
- 新建
JAVA_HOME变量,值为JDK安装路径 - 在Path中添加
%JAVA_HOME%\bin
- 新建
- 验证安装:命令行执行
java -version应显示版本信息
常见问题排查:
- "不是内部或外部命令":检查Path是否配置正确
- "错误: 不支持发行版本5":项目编译版本与JDK版本不匹配
- Lombok警告:需要在IDE中安装Lombok插件
1.2 开发工具选择
对于初学者,我推荐以下工具组合:
- 代码编辑器:VS Code + Java扩展包(轻量级,适合学习)
- 全功能IDE:IntelliJ IDEA Community版(智能提示更强大)
- 构建工具:先使用默认的Javac,后期再学Maven/Gradle
注意:当遇到"源发行版17需要目标发行版17"这类错误时,需要在IDE的Project Structure中确保SDK和Language Level设置一致。
2. Java语法基础核心要点
2.1 基本数据类型与运算符
Java是强类型语言,共有8种基本数据类型:
| 类型 | 大小 | 取值范围 | 默认值 |
|---|---|---|---|
| byte | 8位 | -128 ~ 127 | 0 |
| short | 16位 | -32768 ~ 32767 | 0 |
| int | 32位 | -2³¹ ~ 2³¹-1 | 0 |
| long | 64位 | -2⁶³ ~ 2⁶³-1 | 0L |
| float | 32位 | IEEE 754标准 | 0.0f |
| double | 64位 | IEEE 754标准 | 0.0d |
| char | 16位 | Unicode字符 | '\u0000' |
| boolean | - | true/false | false |
运算符特别注意:
- 整数相除会截断小数:
5/2=2 ==比较基本类型值,比较对象时检查内存地址- 三元运算符:
条件 ? 表达式1 : 表达式2
2.2 流程控制结构
java复制// if-else示例
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
// switch增强(Java 12+)
String day = "MON";
switch (day) {
case "MON", "TUE" -> System.out.println("工作日开始");
case "WED" -> System.out.println("周中");
case "SAT", "SUN" -> {
System.out.println("周末");
System.out.println("休息日");
}
default -> System.out.println("无效输入");
}
3. 面向对象编程基础
3.1 类与对象
Java是纯粹的面向对象语言(除了那8个基本类型)。定义一个简单的类:
java复制public class Person {
// 字段(成员变量)
private String name;
private int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 方法
public void introduce() {
System.out.println("我叫" + name + ",今年" + age + "岁");
}
// Getter/Setter
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
使用这个类:
java复制Person p = new Person("张三", 25);
p.introduce();
3.2 三大特性实践
封装:通过private限制直接访问,提供public方法控制访问
继承:使用extends关键字,Java是单继承
java复制public class Student extends Person {
private String studentId;
public Student(String name, int age, String id) {
super(name, age); // 调用父类构造
this.studentId = id;
}
@Override
public void introduce() {
super.introduce();
System.out.println("我的学号是:" + studentId);
}
}
多态:父类引用指向子类对象,运行时确定实际调用的方法
4. 异常处理与数组操作
4.1 异常处理机制
Java的异常分为检查型异常(必须处理)和非检查型异常(RuntimeException):
java复制try {
int[] arr = new int[5];
System.out.println(arr[10]); // 抛出ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界了:" + e.getMessage());
e.printStackTrace(); // 打印堆栈跟踪
} finally {
System.out.println("这段代码总会执行");
}
自定义异常:
java复制class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
4.2 数组与集合初探
一维数组:
java复制int[] numbers = new int[3]; // 声明并初始化
numbers[0] = 1; // 赋值
int[] nums = {1, 2, 3}; // 简写形式
// 遍历数组
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
// 增强for循环
for (int num : nums) {
System.out.println(num);
}
ArrayList动态数组(更常用):
java复制import java.util.ArrayList;
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.remove(0); // 删除第一个元素
5. 实用技巧与学习路线建议
5.1 解决常见错误
-
OutOfMemoryError:
- 增加JVM堆内存:
-Xmx1024m - 检查内存泄漏(如静态集合持续增长)
- 增加JVM堆内存:
-
编码问题:
- 统一使用UTF-8编码
- 在编译和运行时指定编码:
javac -encoding UTF-8
-
版本兼容问题:
- 确保IDE、编译器、运行环境的Java版本一致
- 在pom.xml或build.gradle中明确指定版本
5.2 推荐学习路线
-
基础阶段(1-2个月):
- 语法基础
- 面向对象思想
- 常用API(String、集合、IO等)
-
进阶阶段(2-3个月):
- 多线程编程
- 网络编程
- JVM基础
- 设计模式
-
实战阶段:
- Spring框架
- 数据库操作
- 项目实战(建议从控制台程序开始)
个人经验:不要一开始就陷入"Java八股文"的死记硬背,先动手写代码,遇到问题再查资料。我在教学过程中发现,能坚持每天写50行代码的学生,三个月后都能达到可参与简单项目的水平。
