一、Java 是什么:JDK / JRE / JVM
JVM(Java Virtual Machine)
负责运行
.class字节码。屏蔽了操作系统差异,实现“一次编写,到处运行”。
JRE(Java Runtime Environment)
= JVM + 核心类库(rt.jar 等)。
只能运行 Java 程序,不能编译。
JDK(Java Development Kit)
= JRE + 开发工具(
javac、jar等)。开发必须装 JDK。
最基本的运行流程:
javac Hello.java # 编译为 Hello.class java Hello # JVM 运行字节码
最小程序结构:
public class Hello { public static void main(String[] args) { System.out.println("Hello, Java"); } }
二、基本语法:标识符、关键字、注释
标识符:类名、方法名、变量名等
只能用:字母、数字、下划线
_、美元符号$,不能数字开头。严格区分大小写。
常见关键字:
class,public,static,void,int,if,for,return…(不能拿来当变量名)注释:
// 单行注释 /* 多行注释 */ /** * 文档注释,可被 javadoc 提取 */
三、基本数据类型(8 个)
1. 整型
int a = 10;
long b = 100L;
2. 浮点型
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();
五、运算符
算术:
+ - * / % ++ --比较:
> < >= <= == !=(注意 对象比较不能用 ==,要用.equals)逻辑:
&&(短路与)、||(短路或)、!位运算:
& | ^ ~ << >> >>>赋值:
= += -= *= /= %= &= |= ^= <<= >>= >>>=三元运算符:
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;
}
要点:
Java 所有参数传递都是 值传递:
基本类型:拷贝值。
引用类型:拷贝“引用的值”(所以能改对象内部,但不能让调用方变量指向新对象)。
方法重载(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. 继承 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...");
}
}
关键字
synchronized保证多线程下的同步与可见性(基础层面先知道有它)。
十七、Java 8+ 新特性超简要(以后再深入)
Lambda 表达式:
(x) -> x * 2函数式接口:
Runnable,Callable,Consumer,Function等Stream API:方便进行集合计算、过滤、映射等。
十八、推荐的学习路径(你可以按这个自查)
语法基础:数据类型、运算符、流程控制。
面向对象:类、对象、构造器、封装、继承、多态、接口、抽象类。
常用类:
String、StringBuilder、包装类、Math。集合与泛型:
List、Set、Map、迭代器。异常机制。
I/O 基础:文件读写。
多线程基础(可放后一点)。
Java 8+:lambda + stream。
评论