20260713-笔记.md 17 KB

JavaSE 基础 — Day01 笔记

日期:2026-07-13
项目javaSE-260713-FirstJava
作者:WanJL


一、Java 文件结构

一个 .java 源文件由两部分组成:

组成部分 说明
Java 代码 真正参与运行的程序指令
Java 注释 写给程序员看的说明文字,不参与编译和运行

二、Java 注释

Java 提供三种注释方式:

注释类型 语法 用途
单行注释 // 注释内容 注释单行说明
多行注释 /* 注释内容 */ 注释多行说明文字
文档注释 /** 注释内容 */ 为类、方法生成 API 文档(JDK 自带 javadoc 工具)

示例

// 这是单行注释

/*
   这是
   多行注释
*/

/**
 * 这是文档注释
 * @author WanJl
 * @version 1.0
 */

三、核心概念 — 数据

Java 程序的核心是数据,数据分为不同数据类型

1. 常量 / 字面量

直接写在代码中的具体值称为字面量(Literal)

25          // 整数字面量
"张三"      // 字符串字面量
7           // 整数字面量

2. 变量

变量是存放数据的容器,可以理解为贴了标签的盒子。

定义变量的格式

数据类型 变量名 = 变量值;

每一条 Java 语句以 分号 ; 结束。

示例

int age = 25;
// int  → 数据类型(整数类型,integer 的缩写)
// age  → 变量名
// 25   → 字面量

四、Java 数据类型

Java 中的数据类型分为两大类:

1. 基本数据类型(Primitive Type)

从 C / C++ 继承而来,共 4 类 8 种

类型 说明 位数(bit) 字节数(byte) 表示范围
byte 字节型 8 1 -2^7 ~ 2^7-1
short 短整型 16 2 -2^15 ~ 2^15-1
int 整型 32 4 -2^31 ~ 2^31-1
long 长整型 64 8 -2^63 ~ 2^63-1
float 单精度浮点型 32 4 约 ±3.4×10³⁸
double 双精度浮点型 64 8 约 ±1.8×10³⁰⁸
char 字符型 16 2 0 ~ 65535(Unicode)
boolean 布尔型 1(JVM 中占 1 字节) 1 true / false

分配内存的原则:程序运行在内存中,不同大小的数据需要分配不同的内存空间。例如「一个人的年龄」和「太阳到地球的距离(米)」显然不能分配相同大小的内存。

存储单位换算

单位 换算
1 bit(比特位) 1 位二进制数(0 或 1)
1 B(字节) 8 bit
1 KB 1024 B
1 MB 1024 KB
1 GB 1024 MB
1 TB 1024 GB

⚠️ 计算机最小的存储单元是 bit,但最小的分配单元byte(1 字节 = 8 bit)。好比烧烤店 1 串 3 元,但至少 5 串起卖。

2. 引用数据类型(Reference Type)

面向对象语言特有的类型。Java 中除了 8 种基本数据类型,其余全部属于引用数据类型。

包括:

  • Java 类(class
  • Java 接口(interface
  • Java 数组([]
  • Java 枚举(enum
  • Java 注解(@interface

后续课程会详细讲解引用类型。

3. 基本数据类型注意事项(特殊规则)

// 特殊 1:long 类型赋值时,整数值末尾要加 L 或 l(推荐大写 L)
long distance = 10000000000L;

// 特殊 2:float 类型赋值时,小数值末尾要加 F 或 f
float price = 19.99F;

// 特殊 3:char 类型必须使用单引号 '' 括起来,且只能有 1 个字符
char gender = '男';

// 特殊 4:boolean 类型值只能是 true 或 false
boolean isPass = true;

4. 基本数据类型 vs 引用数据类型

Java 中除了 8 种基本数据类型,其余全部是引用数据类型。两者在底层有着本质区别:

维度 基本数据类型 引用数据类型
存什么 直接存"值" 存的是数据在内存中分配的空间地址值
默认值 0 / 0.0 / false null(空)
赋值行为 直接复制值,值与值之间互相独立 复制的是地址值,多个引用可能指向同一对象
比较方式 比较的是值(内容) 比较的是地址(== 默认比较地址)

💡 一句话总结:基本类型存的是"东西本身",引用类型存的是"东西放在哪里的门牌号"。

典型引用类型:String(字符串)

String name = "张三";

⚠️ 重要String 不是 Java 关键字(keyword),它是 Java 官方提供的类,属于引用数据类型。

所有引用数据类型的命名都遵循大驼峰命名法(PascalCase):每个单词的首字母都大写。

例如:StringBufferMyClassStudentName

课堂练习:个人简历变量定义

根据注释中的要求,为以下个人信息选择合适的数据类型并定义变量:

信息 推荐数据类型 说明
姓名 String 字符串
年龄 int 整数
学号 Stringlong 学号可能含前导零,推荐 String
性别 charString 单字符可用 char
身高(cm) doubleint 小数用 double
体重(kg) double 小数用 double
学校 String 字符串
专业 String 字符串
班级 String 字符串
爱好 String 字符串
// 示例:
String name = "张三";
System.out.println("我叫:" + name);

5. 基本数据类型转换

数值类型(除 boolean 外)之间可以相互转换,分为自动转换强制转换两种。

自动转换(隐式转换 / Widening)

把表示范围的类型的变量,直接赋值给表示范围的类型的变量,可以自动完成。

转换方向(箭头方向为自动转换方向):

byte → short → int → long → float → double

就像把一瓶 500ml 的水倒进一个 1L 的瓶子里,完全装得下。

byte  a = 120;
short b = a;   // byte → short(自动)
int   c = b;   // short → int(自动)
long  d = c;   // int → long(自动)
float f = d;   // long → float(自动)
double dd = f; // float → double(自动)

强制转换(显式转换 / Narrowing)

把表示范围的类型的值,赋值给表示范围的类型的变量,需要使用强制转换运算符

语法格式:

目标类型 变量名2 = (目标类型) 变量1;

强制转换可能丢失精度,分两种情况:

  • 能装得下:1L 瓶里有 300ml 水 → 倒进 500ml 的瓶子 ✅
  • 装不下:1L 瓶里有 600ml 水 → 倒进 500ml 的瓶子 ❌(数据溢出)
// 示例 1:double → int(小数截断,不是四舍五入)
double pi = 3.94;
int n = (int) pi;       // n 的值是 3,丢失了小数部分
System.out.println(n);

// 示例 2:int → byte(数据溢出)
int n2 = 128;
byte b2 = (byte) n2;    // byte 最大值是 127,128 会溢出
System.out.println(b2); // 输出 -128

int 128 → byte 的转换过程:

1. int 的 128(十进制)→ 32 位二进制:
   0000 0000 0000 0000 0000 0000 1000 0000

2. 转换为 byte(8 位),直接砍掉高位(左边 24 位):
   1000 0000

3. 二进制中,最左边是符号位:
   0 → 正数,1 → 负数
   所以 1000 0000 对应十进制 -128

6. 表达式提升与编码表

表达式提升

byteshortchar 参与算术运算时,会自动提升为 int 类型。

byte a = 15;
short b = 20;

// byte c1 = a + b;   // ❌ 编译错误:a + b 结果是 int
// short c2 = a + b;  // ❌ 编译错误:a + b 结果是 int
int c3 = a + b;        // ✅ 正确

整数除法截断

两个整数相除,结果直接截断小数部分,不会四舍五入

System.out.println(10 / 3);    // 输出 3(截断小数)
System.out.println(10 / 3.0);  // 输出 3.3333333333333335(浮点数除法)

char 与 int 的关系

char 本质上是数值类型,可以与 int 相互转换:

char cc = 'A';
int d1 = cc + 6;        // 'A' 的 ASCII 码是 65,65 + 6 = 71
System.out.println(d1);  // 输出 71

char c6 = 97;            // 直接为 char 赋整数值
System.out.println(c6);  // 输出 'a'(97 对应 ASCII 表的 'a')

Java 中 8 种基本数据类型除了 boolean,其余 7 种都属于数值类型,都可以转换为数字。

编码与解码

概念 方向 说明
编码 字符 → 二进制数 把人类可读的字符转换为计算机能识别的二进制
解码 二进制数 → 字符 把二进制转换回人类可读的字符

常见编码表(字符集)

编码表 说明
ASCII 美国标准信息交换码,使用 1 字节(7 位实际有效),共 128 个字符
GB-2312 / GBK 中国国家标准简体中文字符集
Unicode 通用字符编码标准,使用 2 字节,可表示 65536 个字符
UTF-8 Unicode 的一种变长编码实现,互联网最常用的字符集(中国大陆常用编码)

五、输出语句

System.out.println(输出的内容);
关键字 含义
System 系统
out 输出
print 打印
ln 换行(等价于 \n

快捷输入:在 IntelliJ IDEA 中输入 sout + Tab 可直接生成。


六、程序入口 — main 方法

public static void main(String[] args) {
    // 代码写在这里才能执行
}
  • main 方法是 Java 程序的运行入口
  • 所有可执行的代码必须放在 main 方法内部
  • 快捷输入:在 IntelliJ IDEA 中输入 psvm + Tab

七、变量命名规则

规则 说明
① 允许的字符 字母(a~z、A~Z)、数字(0~9)、美元符号 $、下划线 _
② 大小写敏感 ageAge 是两个不同的变量
③ 禁止关键字 不能使用 Java 关键字/保留字(如 publicstaticvoidclass 等)
④ 驼峰命名法 小驼峰:第一个单词首字母小写,后续单词首字母大写(如 myName

八、完整代码示例

Demo01.java — 概念总览

public class Demo01 {
    // 单行注释

    /*
        多行注释
    */

    /**
     * 文档注释
     */

    // 此处仅为概念说明,无 main 方法,不能独立运行
}

Demo02.java — 变量与输出实战

/**
 * @author WanJl
 * @version 1.0
 * @title Demo02
 * @create 2026/7/13
 */
public class Demo02 {
    public static void main(String[] args) {
        // 1. 定义变量
        int age = 24;

        // 2. 输出变量
        System.out.println(age);
    }
}

Main.java — 默认入口模板

public class Main {
    public static void main(String[] args) {
        System.out.printf("Hello and welcome!");

        for (int i = 1; i <= 5; i++) {
            System.out.println("i = " + i);
        }
    }
}

Demo03.java — 数据类型实战

/**
 * @author WanJl
 * @version 1.0
 * @title Demo03
 * @create 2026/7/13
 */
public class Demo03 {
    public static void main(String[] args) {
        // 创建各种基本数据类型的变量并输出
        int a = 15;
        System.out.println(a);

        // 特殊 1:long 类型要在整数值后面加 L 或 l
        // 特殊 2:float 类型要在小数后面加 F 或 f
        // 特殊 3:char 类型的值必须使用单引号,且只能是 1 个字符
        // 特殊 4:boolean 类型的值只能是 true 或 false
    }
}

Demo04.java — 基本类型 vs 引用类型 & String

/**
 * @author WanJl
 * @version 1.0
 * @title Demo04
 * @create 2026/7/13
 */
public class Demo04 {
    public static void main(String[] args) {
        /*
            引用数据类型

            基本数据类型                  引用数据类型
存什么       直接存"值"                    存的数据在内存中分配的空间的地址值
默认值       0/0.0/false                  null
赋值         直接复制值,值跟值之间是独立的    复制的是地址值
比较         比较的是值                     比较的是地址

            非常典型的引用数据类型
            字符串     String 类型
            注意:String类型不是关键字,String的首字母大写
            (所有的引用数据类型都采用大驼峰命名)
                StringBuffer    MyClass     StudentName
         */

        /*
            练习:定义变量,输出一份个人简历,包含:
            姓名、年龄、学号、性别、身高、体重、学校、专业、班级、爱好
            为这些变量设置符合实际情况的数据类型
         */
        String name = "张三";
        System.out.println("我叫:" + name);
    }
}

Demo05.java — 基本数据类型转换

/**
 * @author WanJl
 * @version 1.0
 * @title Demo05
 * @description 基本数据类型的转换
 * @create 2026/7/13
 */
public class Demo05 {
    public static void main(String[] args) {
        // ========== 自动转换 ==========
        // 小范围 → 大范围,自动完成
        byte a = 120;
        short b = a;    // byte → short
        int c = b;      // short → int
        long d = c;     // int → long
        float f = d;    // long → float
        double dd = f;  // float → double

        // ========== 强制转换 ==========
        // 大范围 → 小范围,需要强制转换运算符,可能丢失精度

        // 示例 1:double → int(小数截断)
        double pi = 3.94;
        int n = (int) pi;   // double → int
        System.out.println(n);  // 3(直接截断小数,不是四舍五入)

        // 示例 2:int → byte(数据溢出)
        int n2 = 128;
        byte b2 = (byte) n2;    // int → byte,byte 最大值 127
        System.out.println(b2); // -128(溢出导致)
        /*
            转换过程:
            1. int 128 → 32位二进制:
               0000 0000 0000 0000 0000 0000 1000 0000
            2. 截取低8位 → byte:
               1000 0000(最左边是符号位,1 表示负数)
            3. 1000 0000 二进制 → 十进制 -128
         */
    }
}

Demo06.java — 表达式提升与编码表

/**
 * @author WanJl
 * @version 1.0
 * @title Demo06
 * @description 表达式提升
 * @create 2026/7/13
 */
public class Demo06 {
    public static void main(String[] args) {
        // ========== 表达式提升 ==========
        // byte/short/char 参与运算时自动提升为 int
        byte a = 15;
        short b = 20;
        // byte c1 = a + b;    // ❌ 编译错误
        // short c2 = a + b;   // ❌ 编译错误
        int c3 = a + b;        // ✅ 正确

        // ========== 整数除法截断 ==========
        System.out.println(10 / 3);    // 3(截断)
        System.out.println(10 / 3.0);  // 3.3333...

        // ========== char 与 int 转换 ==========
        char cc = 'A';
        int d1 = cc + 6;   // 'A'的ASCII码65 + 6 = 71
        System.out.println(d1);  // 71

        // 直接为 char 赋整数值
        char c6 = 97;
        System.out.println(c6);  // 'a'
    }
}

九、随堂练习要点

  1. 使用 psvm 快速生成 main 方法
  2. 使用 sout 快速生成 System.out.println()
  3. 理解 // 注释的内容不会被执行
  4. 变量的定义必须遵循命名规则
  5. 每条 Java 语句以 ; 结尾
  6. 牢记 4 类 8 种基本数据类型:byteshortintlongfloatdoublecharboolean
  7. 区分基本数据类型与引用数据类型的 4 大区别(存什么、默认值、赋值、比较)
  8. 掌握基本数据类型的 4 条特殊赋值规则(LF、单引号、true/false
  9. 理解 bit(位)与 byte(字节)的关系及存储单位换算
  10. 记住 String 是引用数据类型,不是关键字,采用大驼峰命名
  11. 个人简历练习:为姓名、年龄、学号、性别、身高、体重、学校、专业、班级、爱好选择合适的数据类型并输出
  12. 掌握自动转换方向:byte → short → int → long → float → double
  13. 掌握强制转换语法:(目标类型) 变量,理解精度丢失和溢出
  14. byteshortchar 参与运算自动提升为 int
  15. 整数除法结果直接截断小数,不是四舍五入
  16. char 本质是数值类型,可查询 ASCII 码表int 相互转换
  17. 区分编码(字符→二进制)与解码(二进制→字符),了解常见字符集(ASCII、GBK、Unicode、UTF-8)

十、拓展阅读

概念 说明
关键字(Keyword) Java 预留的具有特殊含义的单词(如 publicclassstaticvoidint
保留字(Reserved Word) 暂未使用但预留的单词(如 gotoconst
标识符(Identifier) 程序员自定义的名称(类名、方法名、变量名等)