Java初学者学习笔记 📅 2026/6/17 20:27:05 # Java零基础入门学习笔记---## 一、Java概述### 1.1 什么是Java- **Java** 是一种面向对象的、跨平台的编程语言。- 由Sun公司现Oracle于1995年发布。- 核心优势**“Write Once, Run Anywhere”**一次编写到处运行依靠JVMJava虚拟机实现。### 1.2 Java体系- **Java SE**标准版基础核心桌面应用。- **Java EE**企业版Web应用、企业级开发。- **Java ME**微型版嵌入式设备已较少用。---## 二、开发环境搭建### 2.1 安装JDK1. 下载Oracle JDK或OpenJDK推荐JDK 8 / 11 / 17 LTS版本。2. 配置环境变量- JAVA_HOME JDK安装路径- Path 中添加 %JAVA_HOME%\bin3. 验证命令行输入 java -version 和 javac -version。### 2.2 第一个Java程序javapublic class HelloWorld {public static void main(String[] args) {System.out.println(Hello, World!);}}编译运行bashjavac HelloWorld.javajava HelloWorld---## 三、基础语法### 3.1 标识符与关键字- 标识符类名、方法名、变量名由字母、数字、_、$组成不能以数字开头。- 关键字public、class、static、void、int 等不能用作标识符。### 3.2 数据类型| 类型 | 说明 | 大小 ||------|------|------|| byte | 字节型 | 1字节 || short | 短整型 | 2字节 || int | 整型默认 | 4字节 || long | 长整型 | 8字节加L || float | 单精度浮点 | 4字节加F || double | 双精度浮点默认 | 8字节 || char | 字符 | 2字节Unicode || boolean | 布尔 | 仅true/false |### 3.3 变量与常量javaint age 18; // 变量final double PI 3.14; // 常量不可变### 3.4 类型转换- 自动转换小范围→大范围int → long → float → double- 强制转换大→小可能丢失精度(int) 3.14### 3.5 运算符- 算术 - * / %- 赋值 - * /- 比较 ! - 逻辑 || !- 三元条件 ? 值1 : 值2### 3.6 流程控制#### if-elsejavaif (score 60) {System.out.println(及格);} else {System.out.println(不及格);}#### switchjavaswitch (day) {case 1: System.out.println(周一); break;case 2: System.out.println(周二); break;default: System.out.println(其他);}#### for / while / do-whilejavafor (int i 0; i 5; i) {System.out.println(i);}int j 0;while (j 5) {System.out.println(j);}---## 四、数组### 4.1 声明与初始化javaint[] arr new int[5]; // 默认0int[] arr2 {1, 2, 3, 4, 5}; // 静态初始化### 4.2 遍历javafor (int i 0; i arr2.length; i) {System.out.println(arr2[i]);}// 增强forfor (int num : arr2) {System.out.println(num);}---## 五、面向对象OOP——核心### 5.1 类与对象- **类**模板蓝图**对象**具体实例。javaclass Student {String name;int age;void study() {System.out.println(name 正在学习);}}// 使用Student s new Student();s.name 张三;s.age 20;s.study();### 5.2 构造方法- 与类同名无返回值用于初始化对象。- 若未定义系统提供默认无参构造。javaclass Student {String name;// 构造方法public Student(String name) {this.name name;}}### 5.3 封装- 使用 private 修饰属性提供 public 的getter/setter。javaclass Person {private int age;public int getAge() { return age; }public void setAge(int age) { this.age age; }}### 5.4 继承extends- 子类继承父类获得父类非私有属性和方法。- Java单继承一个类只能有一个直接父类。javaclass Animal {void eat() { System.out.println(吃东西); }}class Dog extends Animal {void bark() { System.out.println(汪汪); }}### 5.5 super关键字- 调用父类构造方法super() 必须在子类构造第一行。- 调用父类属性/方法super.xxx### 5.6 方法重写Override- 子类重写父类方法方法名、参数列表相同返回类型兼容访问权限不能更严格。### 5.7 多态- 父类引用指向子类对象调用方法时执行子类重写后的版本。javaAnimal a new Dog();a.eat(); // 若Dog重写了eat则调用Dog的### 5.8 抽象类abstract- 不能实例化可以包含抽象方法只有声明无实现。- 子类必须实现所有抽象方法除非子类也是抽象类。### 5.9 接口interface- 完全抽象的“规范”属性默认 public static final方法默认 public abstract。- 类实现接口implements支持多实现。javainterface Flyable {void fly();}class Bird implements Flyable {public void fly() { System.out.println(飞); }}### 5.10 访问修饰符| 修饰符 | 同类 | 同包 | 子类 | 任意 ||--------|------|------|------|------|| private | ✅ | ❌ | ❌ | ❌ || default | ✅ | ✅ | ❌ | ❌ || protected | ✅ | ✅ | ✅ | ❌ || public | ✅ | ✅ | ✅ | ✅ |---## 六、常用类### 6.1 String- 不可变字符序列常用方法javaString s hello;s.length(); // 长度s.charAt(0); // 字符s.substring(1, 3); // 截取 [1,3)s.indexOf(e); // 索引s.equals(hello); // 比较内容s.toUpperCase(); // 大写### 6.2 StringBuilder / StringBuffer- 可变字符串StringBuffer线程安全慢StringBuilder非线程安全快。javaStringBuilder sb new StringBuilder(hello);sb.append( world);sb.insert(5, ,);sb.toString();### 6.3 包装类- 基本类型对应的引用类型Integer, Double, Boolean 等。- 自动装箱/拆箱javaInteger i 100; // 自动装箱int j i; // 自动拆箱### 6.4 MathjavaMath.max(3, 5); // 5Math.min(3, 5); // 3Math.random(); // [0,1)随机数---## 七、异常处理### 7.1 异常体系- Throwable → Error严重错误和 Exception程序可处理- Exception → RuntimeException非受检 和 其他受检异常如IOException### 7.2 try-catch-finallyjavatry {int[] arr {1,2};System.out.println(arr[5]);} catch (ArrayIndexOutOfBoundsException e) {System.out.println(数组越界);} finally {System.out.println(总会执行如释放资源);}### 7.3 throws / throw- throws 声明方法可能抛出异常。- throw 手动抛出异常对象。javavoid checkAge(int age) throws Exception {if (age 0) throw new Exception(年龄不能为负);}---## 八、集合框架Collection### 8.1 List有序可重复- **ArrayList**数组实现查询快增删慢非线程安全。- **LinkedList**链表实现增删快查询慢。javaListString list new ArrayList();list.add(Java);list.add(Python);list.get(0);list.remove(1);for (String s : list) { System.out.println(s); }### 8.2 Set无序不可重复- **HashSet**基于哈希表元素不重复需重写 hashCode 和 equals。- **TreeSet**基于红黑树自动排序。javaSetInteger set new HashSet();set.add(10);set.add(20);set.add(10); // 不会重复### 8.3 Map键值对- **HashMap**基于哈希表key不重复重写hashCode/equals。- **TreeMap**基于红黑树key可排序。javaMapString, Integer map new HashMap();map.put(张三, 90);map.put(李四, 85);int score map.get(张三);for (String key : map.keySet()) {System.out.println(key map.get(key));}### 8.4 迭代器 IteratorjavaIteratorString it list.iterator();while (it.hasNext()) {System.out.println(it.next());}---## 九、IO流输入输出### 9.1 字节流- InputStream / OutputStream用于二进制文件图片、视频等。javatry (FileInputStream fis new FileInputStream(a.txt);FileOutputStream fos new FileOutputStream(b.txt)) {int b;while ((b fis.read()) ! -1) {fos.write(b);}} catch (IOException e) {e.printStackTrace();}### 9.2 字符流- Reader / Writer用于文本文件处理字符编码。javatry (BufferedReader br new BufferedReader(new FileReader(a.txt));BufferedWriter bw new BufferedWriter(new FileWriter(b.txt))) {String line;while ((line br.readLine()) ! null) {bw.write(line);bw.newLine();}} catch (IOException e) {e.printStackTrace();}### 9.3 序列化- 对象实现 Serializable 接口可写入文件或网络传输。javaclass User implements Serializable {private static final long serialVersionUID 1L;String name;int age;}---## 十、多线程### 10.1 创建线程的两种方式1. 继承 Thread 类重写 run()。2. 实现 Runnable 接口实现 run()更常用因单继承限制。java// 方式1class MyThread extends Thread {public void run() { System.out.println(线程运行); }}new MyThread().start();// 方式2class MyRunnable implements Runnable {public void run() { System.out.println(Runnable); }}new Thread(new MyRunnable()).start();// Lambda写法Java8new Thread(() - System.out.println(Lambda线程)).start();### 10.2 线程生命周期新建 → 就绪 → 运行 → 阻塞 → 终止。### 10.3 常用方法- start() 启动线程sleep(ms) 休眠join() 等待线程结束yield() 让出CPU。### 10.4 线程安全问题与同步- 使用 synchronized 关键字同步方法或代码块。javasynchronized (lock) {// 临界区}### 10.5 线程池ExecutorServicejavaExecutorService pool Executors.newFixedThreadPool(5);pool.submit(() - System.out.println(任务执行));pool.shutdown();---