1. Java程序基础概述
Java作为一门面向对象的编程语言,自1995年诞生以来就以其"一次编写,到处运行"的特性风靡全球。我至今还记得第一次用Java写出"Hello World"时,那种看到控制台输出文字的兴奋感。对于初学者而言,掌握Java基础就像盖房子打地基,直接决定了后续能建多高的技术大厦。
Java基础主要包含三大核心模块:语法结构、面向对象特性和基础类库。语法结构就像语言的文法规则,决定了代码的书写规范;面向对象是Java的灵魂思想,理解类与对象的关系至关重要;而基础类库则是Java提供的现成工具集,能极大提升开发效率。学习过程中建议配合IntelliJ IDEA或Eclipse这类专业IDE,它们提供的代码提示和调试功能能让学习事半功倍。
提示:初学者常犯的错误是过早接触框架而忽视基础。建议至少用2-3个月扎实掌握核心语法和面向对象思想,这对后续学习Spring等框架有决定性影响。
2. 开发环境搭建与第一个程序
2.1 JDK安装配置
Java开发首先需要安装JDK(Java Development Kit),目前主流选择是JDK 17这个长期支持版本。安装时需注意:
- 从Oracle官网下载对应操作系统的安装包
- 配置JAVA_HOME环境变量指向安装目录
- 将%JAVA_HOME%\bin添加到PATH变量
验证安装成功的命令:
bash复制java -version
javac -version
2.2 编写第一个Java程序
创建一个HelloWorld.java文件,内容如下:
java复制public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
编译运行步骤:
- 使用javac编译:
javac HelloWorld.java - 运行程序:
java HelloWorld
常见问题:初学者常遇到"找不到或无法加载主类"错误,这通常是因为:
- 类名与文件名不一致
- 运行时的classpath设置有问题
- 编译生成的.class文件不在当前目录
3. Java核心语法精要
3.1 基础数据类型与变量
Java是强类型语言,所有变量必须先声明后使用。八种基本数据类型如下表:
| 类型 | 大小 | 取值范围 | 默认值 |
|---|---|---|---|
| byte | 8位 | -128~127 | 0 |
| short | 16位 | -32768~32767 | 0 |
| int | 32位 | -2^31~2^31-1 | 0 |
| long | 64位 | -2^63~2^63-1 | 0L |
| float | 32位 | IEEE 754标准 | 0.0f |
| double | 64位 | IEEE 754标准 | 0.0d |
| char | 16位 | Unicode字符 | '\u0000' |
| boolean | 未明确定义 | true/false | false |
变量声明示例:
java复制int count = 10; // 推荐使用有意义的变量名
double price = 9.99;
char grade = 'A';
boolean isDone = false;
3.2 流程控制结构
条件语句
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("周末");
}
循环结构
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 类与对象
类是对象的模板,对象是类的实例。定义一个简单的Person类:
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();
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("李四", 20, "清华大学");
p.introduce(); // 实际调用的是Student类的方法
4.3 接口与抽象类
接口定义:
java复制public interface Animal {
void eat();
void sleep();
}
抽象类:
java复制public abstract class Shape {
protected String color;
public Shape(String color) {
this.color = color;
}
public abstract double area(); // 抽象方法
}
5. 常用类库与集合框架
5.1 String与包装类
String是不可变对象,常用方法:
java复制String s = "Hello";
s.length(); // 5
s.substring(1); // "ello"
s.indexOf("l"); // 2
s.toUpperCase(); // "HELLO"
自动装箱与拆箱:
java复制Integer i = 10; // 自动装箱
int j = i; // 自动拆箱
5.2 集合框架
主要接口关系:
code复制Collection
├── List
│ ├── ArrayList
│ └── LinkedList
└── Set
├── HashSet
└── TreeSet
Map
├── HashMap
└── TreeMap
示例代码:
java复制List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.forEach(System.out::println);
Map<String, Integer> map = new HashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
map.get("Alice"); // 25
6. 异常处理机制
6.1 异常分类
code复制Throwable
├── Error (系统错误,通常不处理)
└── Exception
├── RuntimeException (非受检异常)
└── 其他Exception (受检异常)
6.2 try-catch-finally
java复制try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("除数不能为零");
e.printStackTrace();
} finally {
System.out.println("总会执行");
}
6.3 自定义异常
java复制class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
void test() throws MyException {
throw new MyException("自定义异常");
}
7. 输入输出与文件操作
7.1 控制台IO
java复制Scanner scanner = new Scanner(System.in);
System.out.print("请输入姓名:");
String name = scanner.nextLine();
System.out.println("你好," + name);
7.2 文件读写
java复制// 写入文件
try (BufferedWriter writer = new BufferedWriter(new FileWriter("test.txt"))) {
writer.write("Hello Java");
}
// 读取文件
try (BufferedReader reader = new BufferedReader(new FileReader("test.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
注意事项:使用try-with-resources语法可以自动关闭资源,避免内存泄漏
8. 多线程编程基础
8.1 线程创建方式
java复制// 继承Thread类
class MyThread extends Thread {
public void run() {
System.out.println("线程运行");
}
}
// 实现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++;
}
}
8.3 线程池
java复制ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(() -> {
System.out.println("任务执行");
});
executor.shutdown();
9. 实战经验与避坑指南
-
命名规范:
- 类名使用大驼峰:MyClass
- 方法/变量使用小驼峰:myMethod
- 常量全大写:MAX_VALUE
-
代码风格:
- 保持一致的缩进(4个空格)
- 合理使用空行分隔代码块
- 方法不超过50行
-
性能优化:
- 字符串拼接使用StringBuilder
- 集合初始化指定容量
- 避免在循环中创建对象
-
调试技巧:
- 使用IDE的断点调试
- 学会查看调用栈
- 使用日志记录关键信息
-
学习路线建议:
- 基础语法 → 面向对象 → 集合/IO → 多线程 → 网络编程
- 每阶段完成3-5个小项目巩固
- 阅读JDK源码理解实现原理
我在教学过程中发现,很多初学者容易在以下地方卡壳:
- 不理解引用类型和基本类型的区别
- 混淆==和equals的比较
- 对多态的理解不够深入
- 异常处理使用不当
建议通过编写大量小程序来熟悉语法,比如:
- 计算器程序
- 学生成绩管理系统
- 文件加密工具
- 简单的聊天程序
最后分享一个实用技巧:使用JShell(Java 9+)可以快速测试代码片段,非常适合学习时验证想法。启动方法很简单,命令行输入jshell即可进入交互式环境。
