1. Java基础语法入门:从零开始的编程之旅
Java作为一门经久不衰的编程语言,其基础语法是每个开发者必须掌握的基石。记得我第一次接触Java时,被它的"public static void main(String[] args)"弄得一头雾水,但后来发现这套看似复杂的语法体系背后有着严谨的设计逻辑。本文将带你系统梳理Java基础语法的核心要点,避开我当年踩过的那些坑。
2. Java开发环境搭建与第一个程序
2.1 JDK安装与环境配置
Java开发的第一步是安装JDK(Java Development Kit)。目前Oracle JDK和OpenJDK是最常用的两个版本,对于初学者建议选择OpenJDK 11这个LTS(长期支持)版本。安装完成后需要配置三个关键环境变量:
- JAVA_HOME:指向JDK安装目录(如C:\Program Files\Java\jdk-11.0.15)
- Path:添加%JAVA_HOME%\bin
- CLASSPATH:设置.;%JAVA_HOME%\lib(注意开头的点号表示当前目录)
验证安装是否成功:
bash复制java -version
javac -version
常见问题:如果遇到"java不是内部或外部命令",通常是Path配置有误;而Lombok报错"you aren't using a compiler supported by lombok"则需要确保IDE中启用了注解处理。
2.2 第一个Java程序解析
经典的HelloWorld程序:
java复制public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
编译运行流程:
- 保存为HelloWorld.java(文件名必须与public类名一致)
- 编译:javac HelloWorld.java → 生成HelloWorld.class
- 运行:java HelloWorld(注意不要加.class后缀)
3. Java基础语法核心要素
3.1 数据类型与变量
Java是强类型语言,所有变量必须先声明后使用。基本数据类型分为四类八种:
| 类型 | 关键字 | 大小 | 默认值 | 取值范围 |
|---|---|---|---|---|
| 整型 | byte | 1字节 | 0 | -128 ~ 127 |
| short | 2字节 | 0 | -32768 ~ 32767 | |
| int | 4字节 | 0 | -2^31 ~ 2^31-1 | |
| long | 8字节 | 0L | -2^63 ~ 2^63-1 | |
| 浮点型 | float | 4字节 | 0.0f | IEEE 754 |
| double | 8字节 | 0.0d | IEEE 754 | |
| 字符型 | char | 2字节 | '\u0000' | Unicode字符 |
| 布尔型 | boolean | 未定义 | false | true/false |
变量声明示例:
java复制int count = 10; // 推荐使用有意义的变量名
double price = 9.99;
char grade = 'A';
boolean isDone = false;
3.2 运算符与表达式
Java运算符可分为以下几类:
-
算术运算符:+ - * / % ++ --
java复制int a = 10 / 3; // 结果为3(整数除法) double b = 10.0 / 3; // 结果为3.333... -
关系运算符:> < >= <= == !=
java复制boolean result = (5 == 5.0); // true(自动类型转换) -
逻辑运算符:&& || ! ^
java复制if(age > 18 && hasLicense) {...} -
位运算符:& | ^ ~ << >> >>>
java复制int flags = 0b1010 & 0b1100; // 位运算示例 -
三元运算符:? :
java复制String status = (score >= 60) ? "及格" : "不及格";
特别注意:==比较的是值(基本类型)或引用(对象类型),字符串比较应该用equals()
3.3 流程控制结构
条件语句
java复制// if-else
if(condition1) {
// 代码块1
} else if(condition2) {
// 代码块2
} else {
// 默认代码块
}
// switch (Java 12+支持表达式形式)
int day = 3;
String dayName = switch(day) {
case 1 -> "Monday";
case 2 -> "Tuesday";
// ...
default -> "Unknown";
};
循环结构
java复制// for循环
for(int i=0; i<10; i++) {
System.out.println(i);
}
// 增强for循环
int[] numbers = {1,2,3};
for(int num : numbers) {
System.out.println(num);
}
// while循环
while(condition) {
// 循环体
}
// do-while
do {
// 至少执行一次
} while(condition);
4. 面向对象编程基础
4.1 类与对象
类是对象的模板,对象是类的实例。定义一个简单的类:
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("张三", 20);
p.introduce();
4.2 三大特性:封装、继承、多态
封装
通过private修饰字段,提供public的getter/setter方法控制访问。
继承
java复制public class Student extends Person {
private String school;
public Student(String name, int age, String school) {
super(name, age); // 调用父类构造
this.school = school;
}
@Override
public void introduce() {
super.introduce();
System.out.println("我在"+school+"上学");
}
}
多态
java复制Person p = new Student("李四", 18, "清华大学");
p.introduce(); // 实际调用的是Student的introduce()
4.3 接口与抽象类
java复制// 接口
interface Animal {
void eat();
void sleep();
}
// 抽象类
abstract class Pet implements Animal {
protected String name;
public Pet(String name) {
this.name = name;
}
public abstract void play();
}
// 具体实现
class Dog extends Pet {
public Dog(String name) { super(name); }
@Override
public void eat() { System.out.println(name+"在吃狗粮"); }
@Override
public void sleep() { System.out.println(name+"在睡觉"); }
@Override
public void play() { System.out.println(name+"在玩飞盘"); }
}
5. 数组与集合框架
5.1 数组
java复制// 声明与初始化
int[] arr1 = new int[3]; // 默认值0
int[] arr2 = {1,2,3};
// 二维数组
int[][] matrix = {
{1,2,3},
{4,5,6}
};
// 遍历
for(int i=0; i<arr2.length; i++) {
System.out.println(arr2[i]);
}
for(int num : arr2) {
System.out.println(num);
}
5.2 集合框架
Java集合框架主要接口:
-
Collection
- List:有序可重复
- ArrayList:基于动态数组
- LinkedList:基于链表
- Set:无序不重复
- HashSet:基于哈希表
- TreeSet:基于红黑树
- List:有序可重复
-
Map:键值对
- HashMap
- TreeMap
示例:
java复制// List
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.get(0); // Alice
// Set
Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(1); // 重复元素不会被添加
// Map
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 90);
scores.get("Alice"); // 90
6. 异常处理机制
6.1 异常分类
- Error:系统级错误(如OutOfMemoryError)
- Exception:可处理的异常
- RuntimeException:运行时异常(如NullPointerException)
- 检查型异常(如IOException)
6.2 try-catch-finally
java复制try {
// 可能抛出异常的代码
FileInputStream fis = new FileInputStream("test.txt");
} catch(FileNotFoundException e) {
// 处理特定异常
System.err.println("文件未找到: "+e.getMessage());
} catch(Exception e) {
// 兜底处理
e.printStackTrace();
} finally {
// 无论是否异常都会执行(常用于资源释放)
if(fis != null) {
fis.close();
}
}
6.3 自定义异常
java复制class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
// 使用
void validate(int age) throws MyException {
if(age < 0) {
throw new MyException("年龄不能为负数");
}
}
7. Java 8+新特性
7.1 Lambda表达式
java复制// 替代匿名内部类
Runnable r = () -> System.out.println("Hello Lambda");
new Thread(r).start();
// 集合操作
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));
7.2 Stream API
java复制List<Integer> numbers = Arrays.asList(1,2,3,4,5);
int sum = numbers.stream()
.filter(n -> n%2 == 0)
.mapToInt(n -> n*2)
.sum();
7.3 Optional
java复制Optional<String> opt = Optional.ofNullable(getName());
String name = opt.orElse("default");
8. 常见问题与调试技巧
8.1 内存问题排查
当遇到OutOfMemoryError时:
- 使用-XX:+HeapDumpOnOutOfMemoryError参数生成堆转储文件
- 用MAT或VisualVM分析内存泄漏
8.2 空指针异常预防
- 使用Objects.requireNonNull()进行参数校验
- 采用Optional避免null检查嵌套
- 启用IDE的@NonNull注解支持
8.3 调试技巧
- 使用条件断点
- 表达式求值(Evaluate Expression)
- 远程调试:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
9. 学习路线建议
-
基础阶段(1-2个月):
- 掌握本文所有基础语法
- 完成100个左右编程练习
- 理解OOP思想
-
进阶阶段(2-3个月):
- 集合框架源码阅读
- 多线程编程
- JVM基础
-
项目实战(持续):
- 从控制台程序到Web应用
- 参与开源项目
- 学习Spring等主流框架
学习资源推荐:
- 官方文档:docs.oracle.com/javase/
- 书籍:《Java核心技术》《Effective Java》
- 在线练习:LeetCode、牛客网Java专题
