别等孩子说“看不清”!这些细微变化,可能是近视的早期信号!
2026/1/17 10:15:43
新手最容易陷入 “看完所有语法再动手” 的误区,正确的做法是:
for循环,先写 “打印 1-10 的数字”,再写 “打印 1-100 的偶数”,再升级到 “计算 1-100 的和”,循序渐进。java
运行
public class ForLoopDemo { public static void main(String[] args) { // 基础:打印1-10 for (int i = 1; i <= 10; i++) { System.out.println(i); } // 进阶:打印1-100的偶数 int sum = 0; for (int i = 1; i <= 100; i++) { if (i % 2 == 0) { System.out.println("偶数:" + i); sum += i; // 顺便计算偶数和 } } System.out.println("1-100偶数总和:" + sum); } }把 JavaSE 拆成 4 个核心阶段,学完一个阶段做一个小项目巩固:
| 阶段 | 核心内容 | 小项目(落地验证) |
|---|---|---|
| 1 | 基础语法 + 面向对象 | 控制台版学生管理系统(增删改查) |
| 2 | 集合框架 + IO 流 | 本地文件版通讯录(读写联系人) |
| 3 | 多线程 + 异常处理 | 多线程下载文件(模拟)、带异常捕获的文件工具类 |
| 4 | 反射 + 注解 | 简易注解版接口日志工具 |
不用死记 “封装、继承、多态” 的定义,用生活例子理解:
Payment p = new WechatPayment())。新手不用背完所有集合的方法,先明确 “什么时候用什么集合”:
add()、获取get()、遍历),其余 API 用到时查文档即可。新手别一上来就啃 “锁、线程池”,先写简单的多线程案例感受 “并发”:
java
运行
// 模拟多线程卖票(入门级) public class TicketSeller { private static int ticketNum = 100; // 共享票源 public static void main(String[] args) { // 创建3个售票窗口(线程) Thread t1 = new Thread(() -> sellTicket(), "窗口1"); Thread t2 = new Thread(() -> sellTicket(), "窗口2"); Thread t3 = new Thread(() -> sellTicket(), "窗口3"); t1.start(); t2.start(); t3.start(); } private static void sellTicket() { while (ticketNum > 0) { // 加同步锁,避免超卖(简单解决线程安全问题) synchronized (TicketSeller.class) { if (ticketNum > 0) { System.out.println(Thread.currentThread().getName() + "卖出1张票,剩余:" + --ticketNum); } } try { Thread.sleep(100); // 模拟售票延迟 } catch (InterruptedException e) { e.printStackTrace(); } } } }NullPointerException(空指针)、ArrayIndexOutOfBoundsException(数组越界),先看报错行的代码,定位问题(比如空指针大概率是对象没初始化就调用方法),再查原因,比直接问别人印象深;java
运行
// 易错点:String的==和equals区别 public class StringCompare { public static void main(String[] args) { String s1 = "Java"; String s2 = new String("Java"); System.out.println(s1 == s2); // false(比较地址) System.out.println(s1.equals(s2)); // true(比较内容) } }HashMap),直接搜 “Java 8 HashMap API”,看官方解释比看碎片化博客更准;