WASNL-学习笔记 - Java基础语法
type: channel
link: https://note.wasnl.com/index.php/category/Java-Basic-Syntax/
items: 02-Java面向对象编程
items: 01-Java基础语法

02-Java面向对象编程
type: item
date: 2026-06-22T10:59:13+08:00
description: 2.1 类与对象核心概念类是对象的模板，对象是类的实例。类定义了对象的属性（成员变量）和行为（成员方法），而对象是类的具体化表现。定义语法// 定义类 [访问修饰符] class 类名 { // 成员变量（属性） 数据类型 变量名; // 成员方法（行为） 返回类型 方法名(参数列表) { // 方法体 } }实例化语法类名 对象名 = new 类名();完整示例// 定义一个学生类 public class Student { // 成员变量 String name; int age; double score; // 成员方法 public void study() { System.out.println(name + " 正在学习"); } public void introduce() { System.out.println("我叫 " + name + "，今年 " + age + " 岁，成绩是 " + score); } } // 使用类创建对象 public class Main { public static void main(String[] args) { // 实例化：创建对象 Student s1 = new Student(); Student s2 = new Student(); // 为对象赋值 s1.name = "张三"; s1.age = 18; s1.score = 92.5; s2.name = "李四"; s2.age = 19; s2.score = 88.0; // 调用对象方法 s1.study(); // 输出：张三 正在学习 s1.introduce(); // 输出：我叫 张三，今年 18 岁，成绩是 92.5 s2.introduce(); // 输出：我叫 李四，今年 19 岁，成绩是 88.0 } }内存分析栈内存：存储局部变量和对象引用（引用变量名）。堆内存：存储 new 出来的对象实体（成员变量值）。元空间：静态变量存储在堆中，类元数据（方法、字段描述等）存储在元空间Student s1 = new Student(); // s1 在栈中，new Student() 在堆中注意事项一个 Java 文件中可以有多个类，但最多只有一个 public 修饰的类，且文件名必须与 public 类名一致。对象的默认值：数值类型为 0 / 0.0，boolean 为 false，引用类型为 null。使用 new 关键字的过程：加载类 → 在堆中分配内存 → 初始化默认值 → 执行构造方法 → 返回引用地址。2.2 方法定义语法[访问修饰符] [static] [final] 返回值类型 方法名(参数类型 参数名, ...) { // 方法体 [return 返回值;] }完整示例public class Calculator { // 实例方法：需要对象调用 public int add(int a, int b) { return a + b; } // 静态方法：通过类名直接调用 public static int subtract(int a, int b) { return a - b; } // 无返回值方法 public void printResult(String operation, int result) { System.out.println(operation + " 结果：" + result); } } // 调用示例 public class Main { public static void main(String[] args) { // 静态方法：类名调用 int diff = Calculator.subtract(10, 3); // 实例方法：对象调用 Calculator calc = new Calculator(); int sum = calc.add(10, 3); calc.printResult("加法", sum); } }静态方法 vs 实例方法对比对比维度静态方法 (static)实例方法 (非static)修饰符使用 static 修饰不使用 static调用方式类名直接调用 ClassName.method()必须通过对象调用 obj.method()内存位置方法区(就是静态的代码方法而已)元空间(就是静态的代码方法而已)访问实例成员不能直接访问实例变量和实例方法可以访问所有成员（静态 + 实例）访问静态成员可以访问（推荐用类名访问）可以访问this / super不能使用可以使用应用场景工具方法（如 Math.pow()）、独立功能与对象状态相关的方法参数传递详解Java 中所有参数传递都是值…

01-Java基础语法
type: item
date: 2026-06-22T10:58:00+08:00
description: 1.1 基本数据类型Java 是一门强类型语言，共有 8 种基本数据类型（Primitive Type）分为三大类：数值型（整型，浮点型）、字符型和布尔型类型总览分类类型字节数取值范围默认值备注整型byte1-128 ~ 1270 整型short2-32768 ~ 327670 整型int4-2^31 ~ 2^31-10默认整数类型整型long8-2^63 ~ 2^63-10L字面量需加 L 后缀浮点型float4±3.4E-38 ~ ±3.4E+380.0f字面量需加 f 后缀浮点型double8±1.7E-308 ~ ±1.7E+3080.0d默认浮点类型字符型char20 ~ 65535 (Unicode)'\u0000'表示单个 Unicode 字符布尔型boolean1位true / falsefalseJVM 中通常用 int 表示代码示例public class PrimitiveTypes { public static void main(String[] args) { // 整型 byte b = 100; // 1字节 short s = 10000; // 2字节 int i = 100000; // 4字节，默认 long l = 10000000000L; // 8字节，必须加 L 后缀 // 浮点型 float f = 3.14f; // 4字节，必须加 f 后缀 double d = 3.1415926535; // 8字节，默认 // 字符型 char c1 = 'A'; // 2字节 char c2 = '\u0041'; // Unicode 编码表示 'A' char c3 = 65; // ASCII 码表示 'A' // 布尔型 boolean flag = true; } }注意事项long 和 float 的字面量后缀不可省略：不加 L 的整数字面量默认是 int，不加 f 的浮点字面量默认是 double。char 可以存中文：因为 char 是 2 字节 Unicode，一个中文字符正好是 2 字节。boolean 占用空间：JVM 规范中 boolean 被当作 int 处理（4字节），但在 boolean 数组中每个元素占用 1 字节。默认值仅对成员变量有效：局部变量必须显式初始化，否则编译不通过。public class DefaultValues { // 实例变量：自动初始化为默认值 byte b; // 0 short s; // 0 int i; // 0 long l; // 0L float f; // 0.0f double d; // 0.0d char c; // '\u0000' boolean flag; // false public void test() { int local; // 局部变量 // System.out.println(local); // 编译错误！未初始化 } }1.2 变量类型Java 中有三种变量，按声明位置和修饰符区分。对比总览变量类型声明位置生命周期默认值存储位置修饰符局部变量方法、构造方法或代码块中方法执行期间无，必须显式初始化栈内存（方法栈帧）只能用 final实例变量类中、方法外与对象共存亡有默认值堆内存（对象中）访问控制修饰符类变量（静态变量）类中、方法外，static 修饰类加载时创建，类卸载时销毁有默认值方法区/元空间static + 访问控制修饰符内存模型 JDK8+┌─────────────────────────────────────────────┐ │ JVM 内存结构 │ ├───────────────┬───────────────┬─────────────┤ │ 虚拟机栈 │ 堆内存 │ 方法区 │ │ (Stack) │ (Heap) │ Metaspace(元空间) │ ├───────────────┼───────────────┼─────────────┤ │ 方法栈帧 │ 对象实例 │ 类元信息(类结构、字段、方法字节码) │ │ 局部变量表 │ 数组 │ 运行时常量池、符号表、Vtable虚方法表 │ │ 操作数栈 │ 实例变量 │ 即时编译代码、类加载信息 │ │ 方法返回地址 │ Class对象、静态变量、字符串常量池 │ │ 动态链接 │ │ │ 线程私有 │ 线程共享 │ 线程共享 │ └───────────────┴───────────────┴─────────────┘ 运行时常量池 → 永远在元空间（方法区） 方法栈帧：每调用一个方法，就会在虚拟机栈创建一块独立内存 = 栈帧 如调用 sayHello() → 生成 sayHello() …