Java语言程序设计基础篇 - 全面复习指南
第一部分:Java入门与环境搭建
-
Java是什么?
(图片来源网络,侵删)- 定义:一种高级、面向对象、跨平台的编程语言。
- 特点:
- 简单性:去除了C++中指针、多重继承等复杂特性。
- 面向对象:封装、继承、多态。
- 平台无关性:“一次编写,到处运行”(Write Once, Run Anywhere),核心是 Java虚拟机。
- 健壮性:强类型、异常处理、自动内存管理(垃圾回收)。
- 安全性:防止恶意代码攻击。
- 多线程:内置对多线程的支持。
-
JDK, JRE, JVM 的关系
- JVM (Java Virtual Machine):Java虚拟机,负责执行Java字节码(
.class文件),它是实现跨平台的核心。 - JRE (Java Runtime Environment):Java运行时环境,包含了JVM和Java程序运行所需的核心类库(
.jar文件)。运行Java程序只需要JRE。 - JDK (Java Development Kit):Java开发工具包,包含了JRE、编译器(
javac)、调试器、文档生成工具(javadoc)等开发工具。开发Java程序需要JDK。 - 关系图:
JDK包含JRE,JRE包含JVM。
- JVM (Java Virtual Machine):Java虚拟机,负责执行Java字节码(
-
环境变量配置
JAVA_HOME:指向JDK的安装根目录。PATH:在系统路径中添加%JAVA_HOME%\bin,使得在任何目录下都可以使用javac和java命令。CLASSPATH:(旧版概念,现代Java中基本不用) 指定Java虚拟机在何处寻找.class文件和.jar文件,默认是当前目录 。
第二部分:Java基础语法
-
程序结构
- 一个Java源文件(
.java)可以包含多个类,但只能有一个public类,且文件名必须与public类名相同。 - 程序的入口是
main方法:public static void main(String[] args) {}
- 一个Java源文件(
-
变量与数据类型
(图片来源网络,侵删)- 基本数据类型:
- 整数:
byte,short,int,long(后缀L)。 - 浮点数:
float(后缀F),double(默认)。 - 字符:
char(单引号,如'A')。 - 布尔:
boolean(true,false)。
- 整数:
- 引用数据类型:
- 类:如
String,Scanner。 - 接口:如
Runnable。 - 数组:如
int[]。
- 类:如
- 类型转换:
- 自动类型转换(隐式):从小范围到大范围,如
int->double。 - 强制类型转换(显式):从大范围到小范围,需要加上括号,如
(int) 3.14,可能会丢失精度。
- 自动类型转换(隐式):从小范围到大范围,如
- 基本数据类型:
-
运算符
- 算术运算符:, , , , (取模), , 。
- 关系运算符:
>,<,>=,<=, , ,返回boolean值。 - 逻辑运算符:
&&(与), (或), (非),用于连接boolean表达式。 - 位运算符:
&, ,^, ,<<,>>,>>>,了解即可。 - 赋值运算符:, , , , 。
- 三元运算符:
(条件表达式) ? 表达式1 : 表达式2。
-
流程控制
- 顺序结构:默认执行顺序。
- 选择结构:
if-elseif-else if-elseswitch(注意:Java 7后,switch可以支持String类型)
- 循环结构:
for循环:明确循环次数。while循环:不确定循环次数,先判断后执行。do-while循环:至少执行一次,后判断。
break和continue:break:跳出当前循环或switch语句。continue:跳过本次循环,进入下一次循环。
第三部分:面向对象编程
这是Java的核心,务必重点复习。
-
类与对象
(图片来源网络,侵删)- 类:是对象的模板或蓝图,定义了对象的属性(成员变量)和行为(成员方法)。
- 对象:是类的实例,是具体的实体。
- 创建对象:
类名 对象名 = new 类名();
-
三大特性
- 封装
- 目的:隐藏对象的内部状态,只对外暴露有限的接口,提高安全性和可维护性。
- 实现:将成员变量设为
private,通过public的getter和setter方法来访问和修改它们。
- 继承
- 目的:实现代码复用,建立类之间的层次关系。
- 语法:
class 子类 extends 父类 {} - 特点:
- Java是单继承的,一个类只能有一个直接父类。
- 支持多层继承。
- 子类会继承父类的所有非
private成员(属性和方法)。
super关键字:在子类中,通过super来访问父类的成员变量、方法和构造方法。
- 多态
- 目的:允许不同类的对象对同一消息做出响应,提高了代码的灵活性和扩展性。
- 前提:必须有继承关系;子类必须重写父类的方法;父类引用指向子类对象(
父类 对象 = new 子类();)。 - 体现:
- 方法重写:子类提供一个与父类同名、同参数列表、同返回值类型(或其子类)的方法。
- 重载:在同一个类中,定义多个同名但参数列表不同的方法,注意:重载与多态无关。
instanceof运算符:用于判断一个对象是否属于某个类或其子类的实例。
- 封装
-
其他关键字
this:代表当前对象的引用,用于区分成员变量和局部变量,调用当前类的其他构造方法。static:静态的。- 静态变量:被所有对象共享,不属于任何一个具体对象,存储在静态区,通过
类名.变量名访问。 - 静态方法:不属于任何一个对象,没有
this引用,只能访问静态成员,通过类名.方法名()调用。 - 静态代码块:在类加载时执行一次,通常用于初始化静态资源。
- 静态变量:被所有对象共享,不属于任何一个具体对象,存储在静态区,通过
final:final类:不能被继承。final方法:不能被重写。final变量:成为常量,一旦赋值不能被修改。
abstract:abstract类:不能被实例化,可以包含抽象方法(没有方法体的方法)。abstract方法:只有声明,没有实现,子类必须重写所有抽象方法。
第四部分:常用API
-
字符串
String:不可变的字符序列,每次修改操作(如concat,replace)都会创建一个新的String对象。StringBuilder/StringBuffer:可变的字符序列。StringBuilder:非线程安全,性能更高。单线程环境下首选。StringBuffer:线程安全,方法有synchronized关键字修饰。
- 常用方法:
length(),charAt(),substring(),indexOf(),toLowerCase(),toUpperCase(),equals(),equalsIgnoreCase()。
-
包装类
- 将基本数据类型包装成对象,以便在泛型集合等场景中使用。
int->Integer,double->Double等。- 自动装箱:
Integer i = 10;(JDK 5+) - 自动拆箱:
int j = i;(JDK 5+) - 重要常量:
Integer.MAX_VALUE,Integer.MIN_VALUE。
-
Math类- 提供了各种数学运算的静态方法,如
abs(),pow(),sqrt(),random()。
- 提供了各种数学运算的静态方法,如
-
Date和SimpleDateFormatjava.util.Date:表示一个特定的时间点。java.text.SimpleDateFormat:用于格式化和解析日期字符串。format(Date date): 将日期格式化为字符串。parse(String source): 将字符串解析为日期。
-
Scanner类- 用于获取用户的键盘输入。
Scanner scanner = new Scanner(System.in);nextInt(),nextDouble(),next(),nextLine()。
第五部分:异常处理
-
什么是异常?
程序在运行时出现的非正常情况,它会中断程序的正常流程。
-
异常体系结构
Throwable:所有错误和异常的超类。Error:JVM错误,如OutOfMemoryError,通常无法恢复,不应被捕获。Exception:程序本身可以处理的异常。- 受检异常:编译器会检查,必须用
try-catch处理或用throws声明抛出,如IOException。 - 非受检异常:编译器不检查,通常是程序逻辑错误,如
NullPointerException,ArrayIndexOutOfBoundsException。
- 受检异常:编译器会检查,必须用
-
异常处理机制
try-catch-finally:try:监控可能发生异常的代码块。catch:捕获并处理特定类型的异常。finally:无论是否发生异常,都会执行的代码块,通常用于资源释放(如关闭文件、数据库连接)。
throws:在方法签名上声明,该方法可能抛出的异常,将处理责任交给调用者。
第六部分:常用类与工具
-
集合框架
Collection接口:单列集合的根接口。List接口:有序、可重复,元素有索引。ArrayList:基于动态数组实现,查询快,增删慢(非尾部)。最常用。LinkedList:基于双向链表实现,增删快(任意位置),查询慢。
Set接口:无序、不可重复。HashSet:基于哈希表实现,存取速度快,不保证元素顺序。TreeSet:基于红黑树实现,可以对元素进行排序(自然排序或自定义排序)。
Map接口:双列集合,存储键值对,键唯一,值可以重复。HashMap:基于哈希表实现,存取速度快。最常用。TreeMap:基于红黑树实现,键可以排序。Hashtable:线程安全的旧类,不推荐使用。
- 遍历方式:
- 迭代器:
Iterator - 增强for循环:
for-each List特有:get(int index)+ 循环
- 迭代器:
-
I/O流
- 按操作数据单位:字节流(
InputStream/OutputStream)、字符流(Reader/Writer)。 - 按流向:输入流、输出流。
- 按功能:节点流(直接连接数据源)、处理流(包装节点流,提供额外功能)。
- 常用流:
FileInputStream/FileOutputStream:文件字节流。FileReader/FileWriter:文件字符流。BufferedReader/BufferedWriter:缓冲字符流,提高读写效率。ObjectInputStream/ObjectOutputStream:对象流,用于序列化和反序列化。
- 按操作数据单位:字节流(
-
多线程
- 创建线程的两种方式:
- 继承
Thread类:重写run()方法。 - 实现
Runnable接口:实现run()方法,然后将Runnable实例作为参数传给Thread对象。更推荐,因为避免了单继承的限制。
- 继承
- 线程的生命周期:新建 -> 就绪 -> 运行 -> 阻塞 -> 死亡。
- 线程同步:
- 目的:解决多线程并发访问共享资源时导致的数据不一致问题。
- 方式:
synchronized关键字:可以修饰方法或代码块。Lock接口(如ReentrantLock):更灵活,提供了更高级的锁操作。
- 创建线程的两种方式:
复习建议
- 动手实践:不要只看不练,每个知识点都亲手写代码验证,比如写一个继承和多态的例子,自己实现一个简单的
ArrayList。 - 画图理解:对于面向对象、集合框架、多线程等复杂概念,画图是最好的方式,画出类图、集合结构图、线程状态图等。
- 总结对比:将容易混淆的概念放在一起对比,
StringvsStringBuilder,ListvsSet,ErrorvsException, vsequals()。 - 做项目:尝试做一个综合性的小项目,比如一个简单的图书管理系统、学生管理系统,这能将零散的知识点串联起来,形成体系。
- 回顾错题:如果你做过练习题或考试,一定要回顾错题,分析错误原因,避免再犯。
祝你复习顺利,考试成功!
