java语言学习笔记

📋 知识地图

说明:✅ = 已有覆盖(可继续深化) ⬜ = 待扩充

一、Java 语言概述

  • ✅ Java 历史与三大体系(SE / EE / ME)
  • ✅ JVM / JRE / JDK 的关系
  • ✅ Java 核心特性:面向对象、跨平台、内存管理
  • ⬜ Java 版本演进(8 → 11 → 17 → 21 LTS)
  • ⬜ OpenJDK vs Oracle JDK

二、开发环境

  • ⬜ JDK 安装与 JAVA_HOME 配置
  • ⬜ IDE 选择(IntelliJ IDEA / Eclipse / VS Code)
  • ⬜ Maven / Gradle 构建工具入门
  • ⬜ 项目结构规范(src/main/java / resources)

三、程序结构与语法基础

  • ✅ Hello World 与类结构
  • ✅ 基本数据类型(int / String / char / boolean / float / double)
  • ✅ 变量(成员变量 / 静态变量 / 局部变量)
  • ✅ 类型转换(自动 / 强制 / String↔int)
  • ⬜ 包装类与自动装箱拆箱
  • ⬜ 值传递 vs 引用传递的本质

四、运算与表达式

  • ✅ 算术 / 关系 / 逻辑 / 位运算
  • ⬜ instanceof 类型检查
  • ⬜ Java 运算符优先级

五、流程控制

  • ✅ if / else if / else
  • ✅ switch(支持 String 和枚举)
  • ✅ for / while / do-while
  • ✅ for-each 增强循环
  • ✅ break / continue

六、面向对象核心

  • ✅ 类与对象的定义
  • ✅ 封装(private / 访问控制 / getter-setter)
  • ✅ 继承(extends / super)
  • ⬜ 多态(方法重写 / 向上转型 / 动态绑定)
  • ⬜ 抽象类(abstract)vs 接口(interface)
  • ⬜ final 关键字(类 / 方法 / 变量)
  • ⬜ static 关键字深入(静态代码块 / 静态内部类)
  • ⬜ Object 类(toString / equals / hashCode / clone)
  • ⬜ 构造方法链与初始化顺序

七、字符串与内部类

  • ⬜ String 不可变性原理与字符串常量池
  • ⬜ StringBuilder / StringBuffer
  • ⬜ 内部类(成员内部类 / 局部内部类 / 匿名内部类)
  • ⬜ Lambda 表达式(Java 8+)

八、集合框架(Java 的容器体系)

  • ⬜ Collection 接口体系总览
  • ⬜ List:ArrayList vs LinkedList
  • ⬜ Set:HashSet / TreeSet / LinkedHashSet
  • ⬜ Map:HashMap / TreeMap / LinkedHashMap
  • ⬜ HashMap 底层原理(数组+链表+红黑树)
  • ⬜ Collections 工具类
  • ⬜ 泛型在集合中的使用

九、异常处理

  • ⬜ 异常体系(Throwable → Error / Exception)
  • ⬜ 受检异常(checked)vs 非受检异常(runtime)
  • ⬜ try-catch-finally / try-with-resources
  • ⬜ throw vs throws
  • ⬜ 自定义异常

十、I/O 流与文件操作

  • ⬜ 流的概念(字节流 vs 字符流)
  • ⬜ FileInputStream / FileOutputStream / FileReader / FileWriter
  • ⬜ 缓冲流(BufferedInputStream / BufferedReader)
  • ⬜ 序列化(Serializable 接口)
  • ⬜ NIO 基础(Path / Files / Channel / Buffer)

十一、多线程与并发

  • ⬜ 线程创建(Thread / Runnable / Callable)
  • ⬜ 线程生命周期与状态
  • ⬜ synchronized 关键字(方法 / 代码块)
  • ⬜ volatile 关键字
  • ⬜ 线程池(ExecutorService / ThreadPoolExecutor)
  • ⬜ Lock / ReentrantLock
  • ⬜ 并发集合(ConcurrentHashMap / CopyOnWriteArrayList)

十二、泛型与注解

  • ⬜ 泛型类 / 泛型方法 / 泛型接口
  • ⬜ 类型擦除
  • ⬜ 通配符(? extends / ? super)
  • ⬜ 内置注解(@Override / @Deprecated / @SuppressWarnings)
  • ⬜ 自定义注解与元注解

十三、JDBC 与数据库

  • ⬜ JDBC 连接流程(DriverManager / Connection / Statement)
  • ⬜ PreparedStatement 防 SQL 注入
  • ⬜ ResultSet 结果集处理
  • ⬜ 事务管理(commit / rollback)
  • ⬜ 连接池简介(HikariCP / Druid)

十四、JVM 基础

  • ⬜ JVM 内存模型(堆 / 栈 / 方法区 / 程序计数器)
  • ⬜ 垃圾回收(GC)基本概念
  • ⬜ 类加载机制(双亲委派模型)

十五、设计模式入门

  • ⬜ 单例模式(饿汉 / 懒汉 / 双重检查锁)
  • ⬜ 工厂模式
  • ⬜ 代理模式
  • ⬜ 观察者模式

十六、实战项目参考

  • ✅ 坦克大战(源码引用)
  • ⬜ 简易图书管理系统
  • ⬜ REST API 开发(Spring Boot 入门)

java语言基础知识

一般常识

java运行在JVM(java虚拟机)上,以此达到跨平台。JDK是java程序开发工具,而jre是java运行的环境。总的说JDK>JRE>JVM。java主要分为java SE(开发和部署桌面、服务端等的应用程序,是EE的基础)、javaEE(服务端)、javaME(移动微端)三个体系。java是纯粹面向对象的语言,相对于C++抛弃了指针和多继承,增加了内存管理。

编译相关

javac即把.java源文件编译为.class二进制规范文件,在通过java命令在JVM解释执行。

java学习必知

对象具有属性和行为,具有变化的状态,是某个类别的实例,具有唯一性。

java语言程序结构

hello world!

1
2
3
4
5
6
7
8
/*第一个java程序*/
public class HelloJava {
// 这里是程序入口,public class指出其是个公共类,即如头文件一般可被其他类使用
public static void main(String[] args) {
// 输出字符串,static指出其为静态方法,void即无返回值,main是所以程序的入口,即c中的主函数。
System.out.println("你好 Java");
}
}

数据类型

基本数据类型

  • 整型 int
  • 字符串 String
  • 字符型 char
  • 布尔型 boolean
  • 实型(单精、双精) float/double

构造数据类型

  • 枚举类型
  • 数组类型 // int[] score;int score[10]; 先申明,再赋值
  • 结构体类型
  • 共用体类型

变量

全局变量无static修饰,通过 对象名.变量名 访问,只要对象被引用,变量就存在;静态变量用static修饰,通过 类名.变量名或对象名.变量名 访问,生命周期取决于类的周期;局部变量仅在定义的方法中有效。

1
2
3
4
5
6
7
8
9
10
11
12
public class DataClass {
String name; // 成员变量、实例变量
static final String website = "C语言中文网"; // 成员变量、静态变量(类变量)
}
public class Test {
public static void main(String[] args) {
DataClass dc = new DataClass(); // 创建类的对象
System.out.println(dc.name); // 对象名.变量名调用实例变量(全局变量)
System.out.println(dc.website); // 对象名.变量名调用静态变量(类变量)
System.out.println(DataClass.website);
}
}

数据类型转换

自动类型转化

自动向高级数据类型转换。整型→实型

强制类型装换

(数据类型) (表达式)

(int)(x/2+y)

String转换为int

Integer.parseInt(str)

类似c语言调用外部头文件中的函数。

integer是一个类,int基本数据类型的封装类。

运算

常见表达式

java运算 说明
++a 先自加,再取值
a– 取值后自减
b=-a 取反,如12变-12
a+=5 a = a+5,即先加再赋值

位运算

运算符 说明 详细
& 按位与 9&5在内存中解为二进制,仅1与1为1
| 按位或 如上,有1则1
^ 按位异或 如上。不同为1,相同为0
~ 取反 取反
<< 左移 二进制左移,丢高位,低位补0
>> 右移 丢地位,高位按高位内容补

程序结构

判断体

if判断结构

1
2
3
4
5
6
7
8
9
10
if(表达式1) {
语句块1;
} else if(表达式2) {
语句块2;
...
} else if(表达式n) {
语句块n;
} else {
语句块n+1;
}

switch语句(与c存在细微差别)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String[] args) {
System.out.println("请输入座位号码:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
switch (num) {
case 8:
System.out.println("恭喜你,获得了三等奖!");
break;
case 88:
System.out.println("恭喜你,获得了二等奖!");
break;
case 888:
System.out.println("恭喜你,获得了一等奖!");
break;
default:
System.out.println("谢谢参与!");
break;
}
}

循环体

for循环

1
2
3
for(执行1;判断1;每次循环句){
执行代码块;
}

java特色for-each遍历数组

1
2
3
4
5
6

int[] numbers = { 43, 32, 53, 54, 75, 7, 10 }; // 声明并初始化int数组
System.out.println("----for each----");
for (int item : numbers) { // for-each语句 。for(类型 变量名:集合)
System.out.println("Count is:" + item);
}

while循环

1
2
3
while(为“真”即循环){
执行代码块;
}

do-while循环

1
2
3
do{
执行代码块;
}while(表达式); //至少执行一次。

break和continue循环中断

break跳出当前一层循环;
continue结束本次循环开始下次。

各种类(一些默认包含的头文件)

Java为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes)。基本数据类型转换为包装类的过程称为装箱,包装类变为基本数据类型的过程称为拆箱,即一个将同类型变量包装为一个类用于调用。 Java 所有的类都是Object类的子类,即java所有类默认包含Object这个头文件内容,即所有java类可调用object类的方法。

类的定义详细

1
2
3
4
5
6
7
8
9
public class Person {
public String name; // 姓名,初始化null
private int age; // 年龄,初始化为0
final int sex = 0; //修饰默认,即无法更改。若未赋值,则需要编写修改其值的方法。
public void tell() {
// 定义说话的方法
System.out.println(name+"今年"+age+"岁!");
}
}

类的封装

即把对象的细节隐藏,仅把通用的东西按规定的方式对外(只能通过设置的方法进行访问),如一台计算机内部复杂的内容,最后被封装为对外的几个接口。

类的继承

1
2
3
4
5
6
7
8
9
10
11
12
public class Student extends People {  //student类继承people的属性和方法
private String stuNo; // 学号
private String department; // 所学专业
public Student(String name, int age, String sex, String sn, String stuno, String department) {
super(name, age, sex, sn); // super是用于调用父类中的构造方法
this.stuNo = stuno;
this.department = department;
}
public String toString() {
return "姓名:" + name + "\n年龄:" + age + "\n性别:" + sex + "\n身份证号:" + sn + "\n学号:" + stuNo + "\n所学专业:" + department;
}
}

经典java语言程序

java坦克大战(来自网络)

-------------本文结束感谢您的阅读-------------