一、Java 是什么:JDK / JRE / JVM

  1. JVM(Java Virtual Machine)

    • 负责运行 .class 字节码。

    • 屏蔽了操作系统差异,实现“一次编写,到处运行”。

  2. JRE(Java Runtime Environment)

    • = JVM + 核心类库(rt.jar 等)。

    • 只能运行 Java 程序,不能编译。

  3. JDK(Java Development Kit)

    • = JRE + 开发工具(javacjar 等)。

    • 开发必须装 JDK。

  4. 最基本的运行流程:

    javac Hello.java   # 编译为 Hello.class
    java Hello         # JVM 运行字节码
    
  1. 最小程序结构:

    public class Hello {
        public static void main(String[] args) {
            System.out.println("Hello, Java");
        }
    }
    

二、基本语法:标识符、关键字、注释

  1. 标识符:类名、方法名、变量名等

    • 只能用:字母、数字、下划线 _、美元符号 $,不能数字开头。

    • 严格区分大小写。

  2. 常见关键字class, public, static, void, int, if, for, return…(不能拿来当变量名)

  3. 注释

    // 单行注释
    /* 多行注释 */
    /**
     * 文档注释,可被 javadoc 提取
     */
    

三、基本数据类型(8 个)

1. 整型

类型

字节数

范围(大致)

byte

1

-128 ~ 127

short

2

-32768 ~ 32767

int

4

约 ±21 亿

long

8

很大,用 L 结尾

int a = 10;
long b = 100L;

2. 浮点型

类型

字节数

说明

float

4

单精度,f/F

double

8

双精度,默认

float f = 1.23f;
double d = 3.1415926;

金融类精确计算:用 BigDecimal,不要用 float/double。

3. 字符型 char

  • 2 字节,Unicode 编码。

  • 字符常量用单引号:'A''中'

char c = 'A';
char c2 = '中';

4. 布尔型 boolean

  • 只有 true / false,不能和 0/1 互转。

boolean ok = true;

四、引用类型:类、接口、数组、String

  • 除了 8 种基本类型,其他都是“引用类型”。

  • 变量内部存的是“引用”(类似指针),真实数据在堆上。

String s = "Hello";
int[] arr = new int[10];
Object obj = new Object();

五、运算符

  1. 算术+ - * / % ++ --

  2. 比较> < >= <= == !=(注意 对象比较不能用 ==,要用 .equals

  3. 逻辑&&(短路与)、||(短路或)、!

  4. 位运算& | ^ ~ << >> >>>

  5. 赋值= += -= *= /= %= &= |= ^= <<= >>= >>>=

  6. 三元运算符

    int max = a > b ? a : b;
    

六、控制语句:if / switch / for / while

1. if / else

if (x > 0) {
    // ...
} else if (x == 0) {
    // ...
} else {
    // ...
}

2. switch

switch (day) {
    case 1:
        System.out.println("Monday");
        break;
    case 2:
        // ...
        break;
    default:
        System.out.println("Unknown");
}

Java 7 以后:switch 支持 String
Java 14+ 有 switch 表达式(这里先略)。

3. 循环

for (int i = 0; i < 10; i++) {}

int i = 0;
while (i < 10) { i++; }

do {
    i++;
} while (i < 10);

break 跳出循环;continue 跳到下一轮。


七、数组 & String

1. 数组

int[] arr = new int[5];
int[] arr2 = {1, 2, 3};

for (int x : arr2) {
    System.out.println(x);
}
  • 数组一旦创建长度固定,length 属性。

2. 字符串 String(不可变)

String s1 = "hello";
String s2 = new String("hello");
String s3 = s1 + " world";

int len = s1.length();
char ch = s1.charAt(0);
boolean eq = s1.equals("hello");
  • 多次拼接建议用 StringBuilder

    StringBuilder sb = new StringBuilder();
    sb.append("a").append("b");
    String res = sb.toString();
    

八、方法(函数)

public static int add(int a, int b) {
    return a + b;
}

要点:

  1. Java 所有参数传递都是 值传递

    • 基本类型:拷贝值。

    • 引用类型:拷贝“引用的值”(所以能改对象内部,但不能让调用方变量指向新对象)。

  2. 方法重载(Overload)

    • 同一个类里,方法名相同,参数列表不同(参数个数或类型不同)。


九、面向对象:类、对象、封装

1. 类与对象

public class Person {
    // 属性(字段)
    private String name;
    private int age;

    // 构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 方法
    public void sayHello() {
        System.out.println("Hi, I'm " + name);
    }
}

Person p = new Person("Tom", 20);
p.sayHello();

2. 封装 & 访问修饰符

  • public:所有地方可见

  • protected:同包 + 子类

  • (默认)包访问:同包

  • private:仅类内部

常见封装写法:私有字段 + public getter/setter。


十、继承、重写、多态

1. 继承 extends

public class Animal {
    public void speak() {
        System.out.println("Animal");
    }
}

public class Dog extends Animal {
    @Override
    public void speak() {
        System.out.println("Woof");
    }
}

2. 方法重写(Override)

  • 子类方法签名与父类相同。

  • 访问权限不能缩小。

  • 可用 @Override 标注防错误。

3. 多态

Animal a = new Dog(); // 向上转型
a.speak();            // 运行时根据实际类型 Dog 调用

编译看左边类型,运行看右边实际类型,这就是动态绑定。


十一、抽象类 & 接口

1. 抽象类 abstract

public abstract class Shape {
    public abstract double area();
}
  • 不能直接实例化。

  • 可以有普通方法和字段。

2. 接口 interface

public interface Flyable {
    void fly();
}
  • JDK 8 以后:接口里可以有 default 方法、有静态方法。

  • 类可以实现多个接口:class Bird implements Flyable, Serializable {}


十二、包(package)与导入(import)

package com.example.demo;

import java.util.List;
  • 包名推荐:域名反写(com.xxx.project)。

  • 同一包下的类可直接互相访问包可见内容。


十三、异常处理:try / catch / finally / throws

1. 异常类型

  • 受检异常(Checked):必须处理或声明,例如 IOException, SQLException

  • 非受检异常(Unchecked)RuntimeException 及其子类,如 NullPointerException

2. 处理方式

try {
    // 可能抛异常的代码
} catch (IOException e) {
    e.printStackTrace();
} finally {
    // 一定会执行(除非 System.exit)
}

或在方法上声明:

public void readFile() throws IOException {
    // ...
}

十四、常用集合框架(java.util)

1. List / Set / Map

  • List:有序可重复

  • Set:不重复

  • Map:键值对

List<String> list = new ArrayList<>();
list.add("A");
list.get(0);

Set<String> set = new HashSet<>();
set.add("A");

Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
int v = map.get("a");

2. 泛型(Generics)

List<String> list = new ArrayList<>();
// 编译期类型检查,运行时类型擦除

十五、Java 内存 & GC 简单理解

  • 栈(Stack):保存局部变量、方法调用信息。

  • 堆(Heap):new 出来的对象。

  • 方法区 / 元空间:类、常量等元数据。

垃圾回收器(GC)自动回收不再被引用的对象,一般不需要手动管理内存。


十六、简单多线程入门(只讲概念)

  1. 创建线程的两种常见方式:

// 1. 继承 Thread
class MyThread extends Thread {
    public void run() {
        System.out.println("Running...");
    }
}

// 2. 实现 Runnable 接口
class MyTask implements Runnable {
    public void run() {
        System.out.println("Running...");
    }
}
  1. 关键字 synchronized 保证多线程下的同步与可见性(基础层面先知道有它)。


十七、Java 8+ 新特性超简要(以后再深入)

  • Lambda 表达式:(x) -> x * 2

  • 函数式接口:Runnable, Callable, Consumer, Function

  • Stream API:方便进行集合计算、过滤、映射等。


十八、推荐的学习路径(你可以按这个自查)

  1. 语法基础:数据类型、运算符、流程控制。

  2. 面向对象:类、对象、构造器、封装、继承、多态、接口、抽象类。

  3. 常用类StringStringBuilder、包装类、Math

  4. 集合与泛型ListSetMap、迭代器。

  5. 异常机制

  6. I/O 基础:文件读写。

  7. 多线程基础(可放后一点)。

  8. Java 8+:lambda + stream