Java程序设计基础教程
前言:为什么选择Java?
Java是一门非常流行且强大的编程语言,由Sun Microsystems(现已被Oracle收购)于1995年推出,它的核心优势在于:

- 跨平台性:一次编写,到处运行(Write Once, Run Anywhere),Java代码被编译成与平台无关的字节码,然后在Java虚拟机上运行。
- 面向对象:Java是一门纯粹的面向对象编程语言,有助于构建可维护、可扩展的大型应用程序。
- 健壮性:拥有强大的异常处理机制和自动内存管理(垃圾回收),减少了程序崩溃的风险。
- 安全性:内置的安全机制使其非常适合网络应用。
- 丰富的生态系统:拥有庞大的开源库(如Spring, Hibernate)、框架和社区支持,从移动开发到企业级应用无所不包。
第一部分:Java入门与环境搭建
第1章:Java简介与开发环境
1 什么是Java? Java不仅是一门编程语言,还是一个包含运行环境(JVM)、类库(Java API)和开发工具(如JDK)的完整平台。
- JDK (Java Development Kit):Java开发工具包,包含了编译器(
javac)、运行时环境(JRE)和其它开发工具,开发者需要安装JDK。 - JRE (Java Runtime Environment):Java运行时环境,包含了JVM和Java核心类库,只需要运行Java程序的用户需要安装JRE。
- JVM (Java Virtual Machine):Java虚拟机,是Java跨平台的核心,它负责加载.class文件(字节码)并解释执行。
2 安装JDK
- 下载:访问Oracle官网或OpenJDK官网,下载适合你操作系统的最新LTS(长期支持)版本的JDK。
- 安装:双击安装包,按照提示完成安装,记住安装路径,
C:\Program Files\Java\jdk-17。 - 配置环境变量:
JAVA_HOME:新建一个系统环境变量,值为你的JDK安装根目录(C:\Program Files\Java\jdk-17)。Path:在Path变量中,新建两项,分别指向%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin,这样你就可以在命令行的任何位置使用java和javac命令了。
3 第一个Java程序:Hello World
创建一个名为 HelloWorld.java 的文件,并输入以下代码:

// HelloWorld.java
// 1. 定义一个类,类名必须和文件名一致
public class HelloWorld {
// 2. 程序的入口点,main方法
public static void main(String[] args) {
// 3. 在控制台打印输出 "Hello, World!"
System.out.println("Hello, World!");
}
}
编译与运行:
- 打开命令行(Windows的CMD或PowerShell,macOS/Linux的Terminal)。
- 使用
cd命令切换到HelloWorld.java文件所在的目录。 - 编译:输入
javac HelloWorld.java,如果成功,会生成一个HelloWorld.class文件。 - 运行:输入
java HelloWorld,注意,这里不需要加.class后缀,如果成功,命令行会输出Hello, World!。
第二部分:Java语言核心基础
第2章:基本语法
1 关键字与标识符
- 关键字:Java中具有特殊含义的单词,如
public,class,void,static等,不能用作变量名或类名。 - 标识符:程序员自己命名的名字,如类名、变量名、方法名,规则:由字母、数字、下划线
_或美元符组成,不能以数字开头,且不能是关键字。
2 数据类型 Java是强类型语言,每个变量都必须先声明类型再使用。
-
基本数据类型:
(图片来源网络,侵删)- 整数:
byte(1字节),short(2字节),int(4字节),long(8字节),定义long类型需在数字后加L或l,如long l = 100L;。 - 浮点数:
float(4字节),double(8字节),定义float类型需在数字后加F或f,如float f = 3.14F;。double是默认的小数类型。 - 字符:
char(2字节),用单引号括起来,如char c = 'A';。 - 布尔值:
boolean,只有true和false两个值。
- 整数:
-
引用数据类型:
- 类:如
String。 - 接口:如
Runnable。 - 数组:如
int[]。
- 类:如
3 变量与常量
- 变量:存储数据的基本单元,可以改变其值。
int age = 18; // 声明并初始化 String name = "张三"; age = 19; // 修改变量的值
- 常量:使用
final关键字修饰,一旦赋值后不能再改变。final double PI = 3.14159; // PI = 3.14; // 这行代码会编译错误
4 运算符
- 算术运算符:, , , , (取余), (自增), (自减)。
- 关系运算符:, ,
>,<,>=,<=,返回boolean值。 - 逻辑运算符:
&&(与), (或), (非),用于连接多个布尔表达式。 - 赋值运算符:, , , , 。
示例:
int a = 10, b = 20; int sum = a + b; boolean isEqual = (a == b); // false boolean isGreater = (a > 5 && b < 30); // true
第3章:流程控制
1 条件语句
- if-else:
int score = 85; if (score >= 90) { System.out.println("优秀"); } else if (score >= 60) { System.out.println("及格"); } else { System.out.println("不及格"); } - switch:适用于多分支选择。
int day = 3; switch (day) { case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; default: System.out.println("其他天"); }
2 循环语句
- for循环:用于明确知道循环次数的场景。
// 打印1到5 for (int i = 1; i <= 5; i++) { System.out.println(i); } - while循环:用于在条件为真时重复执行代码块。
int count = 0; while (count < 5) { System.out.println("Count is: " + count); count++; } - do-while循环:至少执行一次循环体,然后再判断条件。
int num = 0; do { System.out.println("Num is: " + num); num++; } while (num < 5);
3 跳转语句
break:立即退出当前循环或switch语句。continue:跳过当前循环的剩余部分,直接进入下一次循环。
第4章:数组
数组是一个可以存储多个相同类型数据的容器。
1 数组的声明与初始化
// 1. 声明并初始化
int[] numbers = new int[5]; // 创建一个长度为5的int数组,默认值为0
// 2. 声明并赋值
String[] names = {"Alice", "Bob", "Charlie"};
// 3. 访问数组元素
System.out.println(names[0]); // 输出 "Alice"
// 4. 修改数组元素
names[1] = "David";
// 5. 获取数组长度
int length = names.length;
System.out.println("数组长度: " + length);
2 多维数组
// 二维数组
int[][] matrix = new int[2][3];
matrix[0][0] = 1;
matrix[0][1] = 2;
// 另一种初始化方式
int[][] matrix2 = {{1, 2, 3}, {4, 5, 6}};
第三部分:面向对象编程
OOP是Java的灵魂,它将数据和处理数据的方法封装在一起,形成“对象”。
第5章:类与对象
1 类与对象的概念
- 类:是创建对象的模板或蓝图,它定义了对象的属性(成员变量)和行为(方法)。
- 对象:是类的实例,是实实在在存在的个体。
2 定义一个类
// Student.java
public class Student {
// 1. 成员变量(属性)
String name;
int age;
// 2. 构造方法(用于创建对象)
// 如果没有显式定义,Java会提供一个无参的默认构造方法
public Student(String name, int age) {
this.name = name; // this关键字指向当前对象
this.age = age;
}
// 3. 成员方法(行为)
public void study() {
System.out.println(name + "正在学习。");
}
public void introduce() {
System.out.println("大家好,我叫" + name + ",今年" + age + "岁。");
}
}
3 创建与使用对象
// TestStudent.java
public class TestStudent {
public static void main(String[] args) {
// 使用new关键字和构造方法创建对象
Student student1 = new Student("李四", 20);
// 调用对象的方法
student1.introduce();
student1.study();
// 创建另一个对象
Student student2 = new Student("王五", 21);
student2.introduce();
}
}
第6章:面向对象三大特性
1 封装 封装是指将对象的属性(数据)和行为(方法)捆绑在一起,并对外部隐藏对象的内部细节,只暴露必要的接口。
- 实现方式:使用
private关键字将成员变量设为私有,然后提供public的getter和setter方法来访问和修改它们。
// 修改上面的Student类
public class Student {
private String name; // 私有,外部不能直接访问
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// Getter方法
public String getName() {
return name;
}
// Setter方法
public void setName(String name) {
this.name = name; // 可以在这里添加逻辑,如校验
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0) { // 添加校验逻辑
this.age = age;
}
}
// ... 其他方法
}
2 继承 继承允许一个类(子类)继承另一个类(父类)的属性和方法,实现了代码的重用和逻辑的层次化。
- 关键字:
extends - 特点:Java只支持单继承,但支持多层继承,子类拥有父类的非
private成员。
// 父类
class Animal {
public void eat() {
System.out.println("动物在吃东西。");
}
}
// 子类
class Dog extends Animal {
public void bark() {
System.out.println("汪汪汪!");
}
}
// 测试
public class TestInheritance {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.eat(); // 继承自Animal的方法
myDog.bark(); // Dog自己的方法
}
}
3 多态 多态是指同一个接口,使用不同的实例而执行不同操作的能力,同一操作,作用于不同的对象,产生不同的执行结果”。
- 实现条件:继承、方法重写。
- 核心:父类引用指向子类对象。
// 父类
class Animal {
public void makeSound() {
System.out.println("动物发出声音");
}
}
// 子类1
class Cat extends Animal {
@Override // 注解,表示重写父类方法
public void makeSound() {
System.out.println("喵喵喵");
}
}
// 子类2
class Duck extends Animal {
@Override
public void makeSound() {
System.out.println("嘎嘎嘎");
}
}
// 测试多态
public class TestPolymorphism {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myCat = new Cat(); // 父类引用指向子类对象
Animal myDuck = new Duck(); // 父类引用指向子类对象
myAnimal.makeSound(); // 输出: 动物发出声音
myCat.makeSound(); // 输出: 喵喵喵
myDuck.makeSound(); // 输出: 嘎嘎嘎
}
}
第7章:其他OOP特性
- 抽象:使用
abstract关键字定义抽象类或抽象方法,抽象类不能被实例化,抽象方法没有方法体,强制子类必须实现某些方法。 - 接口:使用
interface定义,接口是行为的抽象,只包含抽象方法和常量,一个类可以实现(implements)多个接口,弥补了Java单继承的不足。 - 包:用于组织和管理类,避免命名冲突。
java.lang.String。
第四部分:常用API与进阶基础
第8章:字符串处理
Java中处理字符串最常用的类是 String、StringBuilder 和 StringBuffer。
- String:不可变对象,每次修改都会创建一个新的String对象,频繁修改时效率低。
- StringBuilder:可变对象,线程不安全,但性能高,适用于单线程环境下的字符串拼接。
- StringBuffer:可变对象,线程安全,但性能略低于StringBuilder,适用于多线程环境。
String s1 = "Hello";
String s2 = "World";
String s3 = s1 + s2; // 每次拼接都创建新对象,效率低
// 使用StringBuilder
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
String result = sb.toString(); // "Hello World"
System.out.println(result);
第9章:常用工具类
-
Math:提供数学运算,如Math.max(),Math.random(),Math.sqrt()。 -
Scanner:用于从控制台读取用户输入。import java.util.Scanner; Scanner scanner = new Scanner(System.in); System.out.print("请输入你的名字: "); String name = scanner.nextLine(); System.out.println("你好, " + name); scanner.close(); -
ArrayList:最常用的动态数组(集合),可以灵活地存储和操作对象。import java.util.ArrayList; ArrayList<String> list = new ArrayList<>(); list.add("苹果"); list.add("香蕉"); System.out.println(list.get(0)); // 苹果 list.remove(0);
第10章:异常处理
异常是程序在运行时发生的错误,Java通过 try-catch-finally 机制来处理异常,使程序更加健壮。
try:包裹可能发生异常的代码块。catch:捕获并处理特定类型的异常。finally:无论是否发生异常,finally块中的代码都会被执行(通常用于资源清理)。throw:手动抛出一个异常。throws:在方法签名上声明该方法可能抛出的异常。
public class ExceptionExample {
public static void main(String[] args) {
try {
int[] numbers = {1, 2, 3};
System.out.println(numbers[5]); // 这行会抛出 ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("捕获到异常: 数组索引越界!");
e.printStackTrace(); // 打印异常的堆栈信息
} finally {
System.out.println("无论是否发生异常,这里都会执行。");
}
System.out.println("程序继续运行...");
}
}
第五部分:学习路径与资源推荐
第11章:后续学习方向
完成基础教程后,你可以根据兴趣选择深入学习的方向:
- Java Web开发:
- Servlet/JSP:Java Web的基础。
- 框架:学习主流框架,如 Spring Boot (现代、高效)、Spring MVC、MyBatis。
- 数据库:
- 学习 SQL 语言。
- 学习关系型数据库,如 MySQL、PostgreSQL。
- 学习JDBC技术,连接Java程序和数据库。
- 企业级应用与中间件:
- Spring Framework:全面学习IoC、AOP等核心概念。
- Spring Cloud:用于构建微服务。
- 消息队列:如RabbitMQ, Kafka。
- 其他领域:
- Android开发:使用Java或Kotlin开发移动应用。
- 大数据:Hadoop, Spark生态。
- Java并发编程:深入理解多线程、线程池、锁等。
第12章:推荐资源
- 官方文档:Oracle Java Documentation (最权威、最准确)
- 在线教程:
- 书籍:
- 《Java核心技术 卷I 基础知识》:经典入门书籍,内容详尽。
- 《Effective Java》:Java编程的最佳实践,进阶必读。
- 视频课程:
- B站:搜索“Java入门”、“黑马程序员”、“尚硅谷”等,有大量免费且优质的课程。
- Coursera / Udemy:提供系统化的付费课程。
Java是一门博大精深的语言,本教程仅为你打开了通往Java世界的大门,最重要的学习方式是 “动手实践”,多写代码,多思考,遇到问题学会使用搜索引擎和查阅官方文档,祝你学习顺利,在编程的道路上越走越远!
