一、Java 语言概述
Java 诞生于 1995 年,由 Sun Microsystems(后被 Oracle 收购)开发。最初被命名为 Oak(橡树),后因商标问题更名为 Java,寓意像咖啡一样风靡全球。其核心设计理念是 “一次编写,到处运行”(Write Once, Run Anywhere),通过 JVM(Java Virtual Machine)实现跨平台特性。
1.1 Java 发展历程
- 1995 年:Java 1.0 发布,包含基础类库、AWT 图形界面
- 2004 年:Java 5.0(JDK 1.5)引入泛型、自动装箱、枚举等特性
- 2014 年:Java 8 发布,带来 Lambda 表达式、Stream API 等革命性特性
- 2021 年:Java 17 成为长期支持版本(LTS),引入密封类、模式匹配等
- 2023 年:Java 21 发布,虚拟线程(Virtual Threads)大幅提升并发性能
1.2 为什么选择 Java?
- 企业级应用首选:Spring/Spring Boot 框架占据后端开发主流
- 安卓开发基石:Android SDK 基于 Java 语言(现 Kotlin 为主)
- 大数据生态:Hadoop、Spark 等框架主要用 Java 开发
- 高安全性:沙箱机制、自动垃圾回收减少内存泄漏风险
二、Java 开发环境搭建
2.1 JDK、JRE、JVM 的区别
- JVM(Java Virtual Machine):Java 虚拟机,执行字节码的核心组件
- JRE(Java Runtime Environment):Java 运行环境,包含 JVM + 基础类库
- JDK(Java Development Kit):Java 开发工具包,包含 JRE + 编译器(javac)等
2.2 JDK 安装步骤(以 Windows 为例)
- 官网下载 JDK 17 LTS 版本:Java Archive Downloads - Java SE 17.0.12 and earlier
- 运行安装程序,选择安装路径(避免中文路径)
- 配置环境变量:
JAVA_HOME:指向 JDK 安装目录(如C:\Program Files\Java\jdk-17)Path:添加%JAVA_HOME%\bin
- 验证安装:
bash
java -version # 输出Java版本信息 javac -version # 输出编译器版本信息
2.3 开发工具选择
- 文本编辑器:适合初学者,如 Notepad++、VS Code
- 集成开发环境(IDE):
- IntelliJ IDEA:功能强大,智能提示优秀(企业首选)
- Eclipse:开源免费,插件生态丰富
- NetBeans:Oracle 官方推荐,适合教学
三、Java 基础语法
3.1 第一个 Java 程序
java
// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
编译运行步骤:
bash
javac HelloWorld.java # 生成HelloWorld.class字节码文件
java HelloWorld # 执行程序,输出Hello, Java!
3.2 数据类型与变量
基本数据类型(8 种):
| 类型 | 位数 | 范围 | 默认值 |
|---|---|---|---|
byte | 8 位 | -128 ~ 127 | 0 |
short | 16 位 | -32768 ~ 32767 | 0 |
int | 32 位 | -2147483648 ~ 2147483647 | 0 |
long | 64 位 | -2^63 ~ 2^63-1 | 0L |
float | 32 位 | 单精度浮点数 | 0.0f |
double | 64 位 | 双精度浮点数 | 0.0d |
char | 16 位 | 单个 Unicode 字符 | '\u0000' |
boolean | 1 位 | true/false | false |
引用数据类型:
String(字符串)、数组、类、接口等,默认值为null
变量声明与初始化:
java
int age = 20; // 声明并初始化
String name; // 先声明
name = "张三"; // 后赋值
final double PI = 3.14; // 常量(不可修改)
3.3 运算符
- 算术运算符:
+、-、*、/、%、++、-- - 赋值运算符:
=、+=、-=、*=、/= - 比较运算符:
==、!=、>、<、>=、<= - 逻辑运算符:
&&(与)、||(或)、!(非) - 位运算符:
&(按位与)、|(按位或)、^(异或)、~(取反)
示例:
java
int a = 10, b = 3;
System.out.println(a / b); // 输出3(整数除法)
System.out.println(a % b); // 输出1(取余)
System.out.println(a > b && a != 0); // 输出true
3.4 流程控制语句
条件语句:
java
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
// switch语句(JDK 14+新语法)
int day = 3;
String result = switch (day) {
case 1 -> "周一";
case 2 -> "周二";
default -> "其他";
};
循环语句:
java
// for循环
for (int i = 0; i < 10; i++) {
System.out.print(i + " ");
}
// while循环
int sum = 0;
int i = 1;
while (i <= 100) {
sum += i;
i++;
}
// do-while循环(至少执行一次)
do {
System.out.println("执行一次");
} while (false);
四、面向对象编程(OOP)
4.1 面向对象基本概念
- 类(Class):对象的抽象模板,定义属性和方法
- 对象(Object):类的实例,通过
new关键字创建 - 封装(Encapsulation):将数据和方法捆绑,通过访问控制符保护
- 继承(Inheritance):子类继承父类的属性和方法,实现代码复用
- 多态(Polymorphism):同一方法可表现出不同行为
4.2 类与对象
java
// 定义Person类
class Person {
// 私有属性
private String name;
private int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 公有方法
public void sayHello() {
System.out.println("你好,我是" + name + ",今年" + age + "岁");
}
// Getter/Setter方法
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
// 创建对象并使用
Person p = new Person("张三", 20);
p.sayHello(); // 输出:你好,我是张三,今年20岁
4.3 继承与多态
java
// 父类:动物
class Animal {
public void sound() {
System.out.println("动物发出声音");
}
}
// 子类:猫
class Cat extends Animal {
@Override
public void sound() {
System.out.println("喵喵喵");
}
}
// 子类:狗
class Dog extends Animal {
@Override
public void sound() {
System.out.println("汪汪汪");
}
}
// 多态演示
Animal cat = new Cat();
Animal dog = new Dog();
cat.sound(); // 输出:喵喵喵
dog.sound(); // 输出:汪汪汪
4.4 接口与抽象类
java
// 接口定义
interface Flyable {
void fly(); // 默认是public abstract
}
// 抽象类定义
abstract class Bird {
protected String name;
public abstract void sing(); // 抽象方法
public void eat() { System.out.println("鸟吃东西"); } // 具体方法
}
// 实现类
class Sparrow extends Bird implements Flyable {
@Override
public void sing() { System.out.println("叽叽喳喳"); }
@Override
public void fly() { System.out.println("麻雀飞翔"); }
}
五、数组与集合
5.1 数组
java
// 声明与初始化
int[] arr1 = new int[5]; // 动态初始化
int[] arr2 = {1, 3, 5, 7, 9}; // 静态初始化
// 访问与修改
arr1[0] = 100;
System.out.println(arr2[2]); // 输出5
// 多维数组
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
5.2 集合框架
Java 集合框架主要包含:
- List:有序可重复,如
ArrayList、LinkedList - Set:无序不可重复,如
HashSet、TreeSet - Map:键值对存储,如
HashMap、TreeMap
示例:
java
// List示例
List<String> list = new ArrayList<>();
list.add("苹果");
list.add("香蕉");
list.add("苹果"); // 允许重复
System.out.println(list.get(1)); // 输出:香蕉
// Set示例
Set<String> set = new HashSet<>();
set.add("北京");
set.add("上海");
set.add("北京"); // 重复元素会被忽略
System.out.println(set.size()); // 输出:2
// Map示例
Map<String, Integer> map = new HashMap<>();
map.put("张三", 20);
map.put("李四", 25);
System.out.println(map.get("张三")); // 输出:20
六、异常处理
6.1 异常分类
- Error:系统级错误,如
OutOfMemoryError - Exception:可处理的异常
- 受检查异常(Checked Exception):必须显式处理,如
IOException - 运行时异常(RuntimeException):可不显式处理,如
NullPointerException
- 受检查异常(Checked Exception):必须显式处理,如
6.2 异常处理机制
java
try {
int[] arr = {1, 2, 3};
System.out.println(arr[10]); // 数组越界,抛出ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界:" + e.getMessage());
} catch (Exception e) {
System.out.println("其他异常:" + e);
} finally {
System.out.println("无论是否异常,finally块都会执行");
}
// 抛出异常
public void divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("除数不能为0");
}
System.out.println(a / b);
}
6.3 自定义异常
java
// 自定义异常类
class AgeException extends Exception {
public AgeException(String message) {
super(message);
}
}
// 使用自定义异常
public void setAge(int age) throws AgeException {
if (age < 0 || age > 150) {
throw new AgeException("年龄不合法:" + age);
}
this.age = age;
}
七、输入输出(IO)
7.1 文件操作
java
import java.io.File;
// 文件创建与信息获取
File file = new File("test.txt");
if (!file.exists()) {
file.createNewFile(); // 创建新文件
}
System.out.println("文件名:" + file.getName());
System.out.println("文件大小:" + file.length() + "字节");
// 目录操作
File dir = new File("data");
if (!dir.exists()) {
dir.mkdir(); // 创建目录
}
String[] files = dir.list(); // 获取目录下所有文件
7.2 流操作
字符流(处理文本):
java
// 文件写入
try (FileWriter fw = new FileWriter("output.txt")) {
fw.write("Hello, Java IO!");
} catch (IOException e) {
e.printStackTrace();
}
// 文件读取
try (FileReader fr = new FileReader("input.txt")) {
int data;
while ((data = fr.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
字节流(处理二进制):
java
// 文件复制
try (FileInputStream fis = new FileInputStream("source.jpg");
FileOutputStream fos = new FileOutputStream("target.jpg")) {
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
fos.write(buffer, 0, length);
}
} catch (IOException e) {
e.printStackTrace();
}
八、多线程编程
8.1 线程创建方式
java
// 方式1:继承Thread类
class MyThread extends Thread {
@Override
public void run() {
System.out.println("线程执行:" + Thread.currentThread().getName());
}
}
// 方式2:实现Runnable接口
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Runnable执行:" + Thread.currentThread().getName());
}
}
// 方式3:使用Callable和Future(可获取返回值)
class MyCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
return 100;
}
}
// 使用示例
public static void main(String[] args) throws Exception {
// 方式1
new MyThread().start();
// 方式2
new Thread(new MyRunnable()).start();
// 方式3
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(new MyCallable());
System.out.println("Callable返回值:" + future.get());
executor.shutdown();
}
8.2 线程同步
java
// 同步方法
public synchronized void add(int value) {
this.count += value;
}
// 同步代码块
public void subtract(int value) {
synchronized (this) {
this.count -= value;
}
}
// Lock锁(JDK 5+)
private Lock lock = new ReentrantLock();
public void multiply(int value) {
lock.lock();
try {
this.count *= value;
} finally {
lock.unlock();
}
}
九、Java 高级特性
9.1 Lambda 表达式(JDK 8+)
java
// 传统方式
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("传统方式");
}
};
// Lambda方式
Runnable r2 = () -> System.out.println("Lambda方式");
// 带参数的Lambda
Comparator<Integer> comparator = (a, b) -> a - b;
9.2 Stream API(JDK 8+)
java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 计算偶数和
int sum = numbers.stream()
.filter(n -> n % 2 == 0)
.mapToInt(Integer::intValue)
.sum();
System.out.println("偶数和:" + sum);
// 收集元素
List<Integer> doubled = numbers.stream()
.map(n -> n * 2)
.collect(Collectors.toList());
9.3 反射机制
java
// 获取Class对象
Class<?> clazz = Person.class;
// 创建实例
Person person = (Person) clazz.getDeclaredConstructor().newInstance();
// 调用方法
Method method = clazz.getMethod("sayHello");
method.invoke(person);
// 访问私有字段
Field field = clazz.getDeclaredField("name");
field.setAccessible(true);
field.set(person, "李四");
十、Java 项目实战
10.1 学生管理系统
java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// 学生类
class Student {
private String id;
private String name;
private int age;
public Student(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
// Getter和Setter方法
// toString方法
}
// 管理系统类
class StudentManager {
private List<Student> students = new ArrayList<>();
// 添加学生
public void addStudent(Student student) {
students.add(student);
}
// 删除学生
public void removeStudent(String id) {
students.removeIf(s -> s.getId().equals(id));
}
// 显示所有学生
public void displayAll() {
students.forEach(System.out::println);
}
}
// 主程序
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
StudentManager manager = new StudentManager();
while (true) {
System.out.println("\n1. 添加学生");
System.out.println("2. 删除学生");
System.out.println("3. 显示所有学生");
System.out.println("4. 退出");
System.out.print("请选择:");
int choice = scanner.nextInt();
scanner.nextLine(); // 消耗换行符
switch (choice) {
case 1:
// 添加逻辑
break;
case 2:
// 删除逻辑
break;
case 3:
manager.displayAll();
break;
case 4:
System.out.println("退出系统");
scanner.close();
return;
default:
System.out.println("无效选择");
}
}
}
}
十一、学习资源与进阶方向
11.1 推荐学习资源
- 官方文档:Oracle Java Documentation
- 经典书籍:《Effective Java》《Java 核心技术》《深入理解 Java 虚拟机》
- 在线课程:Coursera Java Specialization、Udemy Java Masterclass
- 社区论坛:Stack Overflow、GitHub
11.2 技术栈扩展
- Web 开发:Spring/Spring Boot、MyBatis、Thymeleaf
- 数据库:MySQL、Oracle、Redis
- 前端:HTML/CSS/JavaScript、Vue.js、React
- 微服务:Spring Cloud、Docker、Kubernetes
十二、常见面试问题
-
Java 和 C++ 的区别?
- Java 不支持指针,有自动垃圾回收,C++ 需要手动管理内存。
-
String、StringBuilder、StringBuffer 的区别?
- String 不可变,StringBuilder 非线程安全,StringBuffer 线程安全。
-
HashMap 和 HashTable 的区别?
- HashMap 允许 null 键值,非线程安全;HashTable 不允许 null,线程安全。
-
什么是 GC?如何优化 GC?
- GC 即垃圾回收,通过调整堆大小、选择合适的垃圾回收器等方式优化。
-
如何实现线程安全的单例模式?
- 使用双重检查锁或静态内部类方式。
总结
Java 作为一门功能强大、生态丰富的编程语言,适合各类应用开发。本文从基础语法到高级特性,再到实战项目,全面介绍了 Java 编程的核心知识。希望通过系统学习,你能掌握 Java 编程技能,开启精彩的编程之旅!
下一步建议:
- 动手实现学生管理系统的完整功能
- 学习 Spring Boot 框架,开发 Web 应用
- 参与开源项目,积累实战经验
Java 语言核心特性与基础语法详解
5万+

被折叠的 条评论
为什么被折叠?



