日期:2026-07-13
项目:javaSE-260713-FirstJava
作者:WanJL
一个 .java 源文件由两部分组成:
| 组成部分 | 说明 |
|---|---|
| Java 代码 | 真正参与运行的程序指令 |
| Java 注释 | 写给程序员看的说明文字,不参与编译和运行 |
Java 提供三种注释方式:
| 注释类型 | 语法 | 用途 |
|---|---|---|
| 单行注释 | // 注释内容 |
注释单行说明 |
| 多行注释 | /* 注释内容 */ |
注释多行说明文字 |
| 文档注释 | /** 注释内容 */ |
为类、方法生成 API 文档(JDK 自带 javadoc 工具) |
// 这是单行注释
/*
这是
多行注释
*/
/**
* 这是文档注释
* @author WanJl
* @version 1.0
*/
Java 程序的核心是数据,数据分为不同数据类型。
直接写在代码中的具体值称为字面量(Literal)。
25 // 整数字面量
"张三" // 字符串字面量
7 // 整数字面量
变量是存放数据的容器,可以理解为贴了标签的盒子。
数据类型 变量名 = 变量值;
每一条 Java 语句以 分号
;结束。
int age = 25;
// int → 数据类型(整数类型,integer 的缩写)
// age → 变量名
// 25 → 字面量
Java 中的数据类型分为两大类:
从 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 串起卖。
面向对象语言特有的类型。Java 中除了 8 种基本数据类型,其余全部属于引用数据类型。
包括:
class)interface)[])enum)@interface)后续课程会详细讲解引用类型。
// 特殊 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;
Java 中除了 8 种基本数据类型,其余全部是引用数据类型。两者在底层有着本质区别:
| 维度 | 基本数据类型 | 引用数据类型 |
|---|---|---|
| 存什么 | 直接存"值" | 存的是数据在内存中分配的空间地址值 |
| 默认值 | 0 / 0.0 / false |
null(空) |
| 赋值行为 | 直接复制值,值与值之间互相独立 | 复制的是地址值,多个引用可能指向同一对象 |
| 比较方式 | 比较的是值(内容) | 比较的是地址(== 默认比较地址) |
💡 一句话总结:基本类型存的是"东西本身",引用类型存的是"东西放在哪里的门牌号"。
String name = "张三";
⚠️ 重要:
String不是 Java 关键字(keyword),它是 Java 官方提供的类,属于引用数据类型。所有引用数据类型的命名都遵循大驼峰命名法(PascalCase):每个单词的首字母都大写。
例如:
StringBuffer、MyClass、StudentName
根据注释中的要求,为以下个人信息选择合适的数据类型并定义变量:
| 信息 | 推荐数据类型 | 说明 |
|---|---|---|
| 姓名 | String |
字符串 |
| 年龄 | int |
整数 |
| 学号 | String 或 long |
学号可能含前导零,推荐 String |
| 性别 | char 或 String |
单字符可用 char |
| 身高(cm) | double 或 int |
小数用 double |
| 体重(kg) | double |
小数用 double |
| 学校 | String |
字符串 |
| 专业 | String |
字符串 |
| 班级 | String |
字符串 |
| 爱好 | String |
字符串 |
// 示例:
String name = "张三";
System.out.println("我叫:" + name);
数值类型(除
boolean外)之间可以相互转换,分为自动转换和强制转换两种。
把表示范围小的类型的变量,直接赋值给表示范围大的类型的变量,可以自动完成。
转换方向(箭头方向为自动转换方向):
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(自动)
把表示范围大的类型的值,赋值给表示范围小的类型的变量,需要使用强制转换运算符。
语法格式:
目标类型 变量名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
byte、short、char 参与算术运算时,会自动提升为 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 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可直接生成。
public static void main(String[] args) {
// 代码写在这里才能执行
}
main 方法是 Java 程序的运行入口main 方法内部psvm + Tab| 规则 | 说明 |
|---|---|
| ① 允许的字符 | 字母(a~z、A~Z)、数字(0~9)、美元符号 $、下划线 _ |
| ② 大小写敏感 | age 和 Age 是两个不同的变量 |
| ③ 禁止关键字 | 不能使用 Java 关键字/保留字(如 public、static、void、class 等) |
| ④ 驼峰命名法 | 小驼峰:第一个单词首字母小写,后续单词首字母大写(如 myName) |
public class Demo01 {
// 单行注释
/*
多行注释
*/
/**
* 文档注释
*/
// 此处仅为概念说明,无 main 方法,不能独立运行
}
/**
* @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);
}
}
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);
}
}
}
/**
* @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
}
}
/**
* @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);
}
}
/**
* @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
*/
}
}
/**
* @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'
}
}
psvm 快速生成 main 方法sout 快速生成 System.out.println()// 注释的内容不会被执行; 结尾byte、short、int、long、float、double、char、booleanL、F、单引号、true/false)String 是引用数据类型,不是关键字,采用大驼峰命名byte → short → int → long → float → double(目标类型) 变量,理解精度丢失和溢出byte、short、char 参与运算自动提升为 intchar 本质是数值类型,可查询 ASCII 码表 与 int 相互转换| 概念 | 说明 |
|---|---|
| 关键字(Keyword) | Java 预留的具有特殊含义的单词(如 public、class、static、void、int) |
| 保留字(Reserved Word) | 暂未使用但预留的单词(如 goto、const) |
| 标识符(Identifier) | 程序员自定义的名称(类名、方法名、变量名等) |