Java核心语法:从变量到流程控制
系统讲解了Java核心语法,涵盖变量定义与数据类型(基本类型与引用类型)、类型转换规则(自动与强制转换)、各类运算符(算术、关系、逻辑、赋值、条件)以及流程控制结构(顺序、分支、循环及控制语句)。通过实例演示和常见问题分析,帮助读者掌握Java语法基础,为后续面向对象编程打下坚实基础。

系统讲解了Java核心语法,涵盖变量定义与数据类型(基本类型与引用类型)、类型转换规则(自动与强制转换)、各类运算符(算术、关系、逻辑、赋值、条件)以及流程控制结构(顺序、分支、循环及控制语句)。通过实例演示和常见问题分析,帮助读者掌握Java语法基础,为后续面向对象编程打下坚实基础。

学习目标:掌握Java的基本语法结构、变量类型、数据类型转换以及运算符的使用。 重点:基本数据类型与引用数据类型的区别、自动类型转换与强制类型转换的规则。
Java是一种强类型语言,具有严格的语法规则:
HelloWorld和helloworld是两个不同的名称。;)结束,否则会导致编译错误。{})包围的代码称为代码块,用于表示一个代码单元(如类、方法、循环体等)。Java关键字是具有特殊含义的保留字,不能作为标识符使用。常用的Java关键字包括:
int、long、float、double、char、boolean、byte、shortif、else、switch、case、default、for、while、do、break、continue、returnpublic、protected、privateclass、interface、extends、implements、new、this、superstatic、final、void、package、import变量是用于存储数据的容器。在Java中,定义变量需要指定变量的类型和名称。
变量的定义格式:
数据类型 变量名;
变量的初始化:
数据类型 变量名 = 初始值;
示例:
int age; // 定义一个int类型的变量age
age = 18; // 给变量age赋值为18
int height = 175; // 定义并初始化一个int类型的变量height
⚠️ 注意:在使用变量之前,必须先声明并初始化,否则会导致编译错误。
Java的数据类型分为两大类:基本数据类型和引用数据类型。
基本数据类型:直接存储数据的值,包括8种类型:
byte(1字节)、short(2字节)、int(4字节)、long(8字节)float(4字节)、double(8字节)char(2字节,用于存储Unicode字符)boolean(1位,用于存储true或false)示例:
byte b = 10;
short s = 200;
int i = 1000;
long l = 1000000L; // 注意:long类型的字面量后面要加L或l
float f = 3.14F; // 注意:float类型的字面量后面要加F或f
double d = 3.1415926;
char c = 'A';
boolean flag = true;
引用数据类型:存储的是数据的引用(即内存地址),包括类、接口、数组等。
示例:
String name = "张三"; // String是一个类,name是引用变量
int[] nums = {1, 2, 3}; // nums是数组引用变量
💡 基本数据类型与引用数据类型的区别:
| 对比项 | 基本数据类型 | 引用数据类型 |
|---|---|---|
| 存储内容 | 直接存储数据的值 | 存储数据的引用(内存地址) |
| 内存区域 | 栈内存 | 堆内存(引用变量在栈内存) |
| 默认值 | 有默认值(如int默认值为0) | 默认值为null |
| 比较方式 | 使用==比较值 | 使用==比较引用,使用equals()方法比较内容 |
在Java中,当将一种数据类型转换为另一种数据类型时,需要遵循一定的规则。数据类型转换分为自动类型转换和强制类型转换。
自动类型转换:当将一个小范围的数据类型转换为大范围的数据类型时,会自动进行转换,无需显式指定。
byte → short → int → long → float → doublechar → int示例:
byte b = 10;
short s = b; // 自动将byte转换为short
int i = s; // 自动将short转换为int
long l = i; // 自动将int转换为long
float f = l; // 自动将long转换为float
double d = f; // 自动将float转换为double
强制类型转换:当将一个大范围的数据类型转换为小范围的数据类型时,需要显式指定,否则会导致编译错误。
目标数据类型 变量名 = (目标数据类型)源数据;示例:
int i = 1000;
byte b = (byte)i; // 强制将int转换为byte
⚠️ 注意:强制类型转换可能会导致数据溢出或精度丢失,应谨慎使用。例如:
int i = 128;
byte b = (byte)i; // byte的范围是-128到127,转换后b的值为-128(溢出)
运算符是用于对数据进行运算的符号。Java支持多种运算符:
用于进行算术运算,包括:+(加)、-(减)、*(乘)、/(除)、%(取模)、++(自增)、--(自减)。
示例:
int a = 10;
int b = 3;
System.out.println(a + b); // 输出13
System.out.println(a - b); // 输出7
System.out.println(a * b); // 输出30
System.out.println(a / b); // 输出3(整数除法,结果取整)
System.out.println(a % b); // 输出1(取模运算,即余数)
a++; // 相当于a = a + 1
System.out.println(a); // 输出11
--b; // 相当于b = b - 1
System.out.println(b); // 输出2
⚠️ 注意:++和--运算符可以放在变量的前面或后面,放在前面表示先自增/自减,再使用变量的值;放在后面表示先使用变量的值,再自增/自减。例如:
int a = 10;
int b = ++a; // a先自增为11,然后b赋值为11
System.out.println(b); // 输出11
int c = 10;
int d = c++; // c先赋值给d(d为10),然后c自增为11
System.out.println(d); // 输出10
用于比较两个表达式的值,返回boolean类型的结果,包括:==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。
示例:
int a = 10;
int b = 20;
System.out.println(a == b); // 输出false
System.out.println(a != b); // 输出true
System.out.println(a > b); // 输出false
System.out.println(a < b); // 输出true
System.out.println(a >= b); // 输出false
System.out.println(a <= b); // 输出true
⚠️ 注意:不要将==用于比较引用数据类型的内容,应该使用equals()方法。例如:
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
System.out.println(s1 == s2); // 输出true(因为字符串常量池的原因)
System.out.println(s1 == s3); // 输出false(s3指向堆内存中的对象)
System.out.println(s1.equals(s3)); // 输出true(比较内容)
用于进行逻辑运算,返回boolean类型的结果,包括:&&(逻辑与)、||(逻辑或)、!(逻辑非)。
示例:
boolean a = true;
boolean b = false;
System.out.println(a && b); // 输出false
System.out.println(a || b); // 输出true
System.out.println(!a); // 输出false
用于给变量赋值,包括:=(简单赋值)、+=(加赋值)、-=(减赋值)、*=(乘赋值)、/=(除赋值)、%=(取模赋值)。
示例:
int a = 10;
a += 5; // 相当于a = a + 5,结果为15
a -= 3; // 相当于a = a - 3,结果为12
a *= 2; // 相当于a = a * 2,结果为24
a /= 4; // 相当于a = a / 4,结果为6
a %= 5; // 相当于a = a % 5,结果为1
条件运算符是Java中唯一的三元运算符,格式为:条件表达式 ? 表达式1 : 表达式2。当条件表达式为true时,执行表达式1;当条件表达式为false时,执行表达式2。
示例:
int a = 10;
int b = 20;
int max = a > b ? a : b; // 如果a > b为true,max = a;否则max = b
System.out.println(max); // 输出20
流程控制用于控制程序的执行顺序,包括顺序结构、分支结构和循环结构。
顺序结构是程序默认的执行顺序,即按照代码的编写顺序从上到下依次执行。
示例:
int a = 10;
int b = 20;
int sum = a + b;
System.out.println("sum = " + sum); // 输出sum = 30
分支结构用于根据条件执行不同的代码块,包括if-else语句和switch语句。
if语句:当条件为true时,执行if块中的代码。if-else语句:当条件为true时,执行if块中的代码;否则,执行else块中的代码。if-else if-else语句:用于处理多个条件。switch语句:用于根据表达式的值执行不同的代码块。表达式的值可以是byte、short、int、char、String(JDK 7及以后)或枚举类型。
case后面跟表达式可能的值,break用于跳出switch语句。default用于处理所有case不匹配的情况。if-else语句示例:
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
// 输出:良好
switch语句示例:
String day = "Monday";
switch (day) {
case "Monday":
System.out.println("星期一");
break;
case "Tuesday":
System.out.println("星期二");
break;
case "Wednesday":
System.out.println("星期三");
break;
case "Thursday":
System.out.println("星期四");
break;
case "Friday":
System.out.println("星期五");
break;
case "Saturday":
case "Sunday":
System.out.println("周末");
break;
default:
System.out.println("无效的星期");
break;
}
// 输出:星期一
⚠️ 注意:如果case后面没有break语句,程序会继续执行下一个case中的代码,直到遇到break或switch语句结束(称为'case穿透')。
循环结构用于重复执行一段代码,包括for循环、while循环和do-while循环。
for循环:用于已知循环次数的情况。
for (初始化语句; 循环条件; 迭代语句) { 循环体 }while循环:用于未知循环次数的情况。
while (循环条件) { 循环体; 迭代语句 }do-while循环:与while循环类似,但会先执行一次循环体,然后再判断循环条件。
do { 循环体; 迭代语句 } while (循环条件);for循环示例:
// 输出1到10的整数
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
while循环示例:
// 输出1到10的整数
int i = 1;
while (i <= 10) {
System.out.println(i);
i++;
}
do-while循环示例:
// 输出1到10的整数
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 10);
循环控制语句用于控制循环的执行流程,包括break、continue和return。
break:用于跳出当前循环(如for、while、do-while)或switch语句。
示例:
// 输出1到5的整数,当i等于6时跳出循环
for (int i = 1; i <= 10; i++) {
if (i == 6) {
break;
}
System.out.println(i);
}
// 输出:1 2 3 4 5
continue:用于跳过当前循环的剩余语句,继续执行下一次循环。
示例:
// 输出1到10中的奇数
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue;
}
System.out.println(i);
}
// 输出:1 3 5 7 9
return:用于从当前方法中返回,结束方法的执行。
示例:
// 输出1到5的整数,当i等于6时返回
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i == 6) {
return;
}
System.out.println(i);
}
}
// 输出:1 2 3 4 5
问题:编译时提示'错误: 可能尚未初始化变量'。 解决方案:在使用变量之前,必须先声明并初始化。例如:
int a; // 只声明未初始化
System.out.println(a); // 编译错误
int b = 0; // 声明并初始化
System.out.println(b); // 编译成功
问题1:编译时提示'错误: 不兼容的类型: 从double转换到int可能会有损失'。 解决方案:使用强制类型转换。例如:
double d = 3.14;
int i = (int)d; // 强制转换
问题2:运行时出现数据溢出。 解决方案:使用更大范围的数据类型。例如:
int i = 128;
byte b = (byte)i; // 溢出,结果为-128
long l = 128; // 使用long类型
问题:程序运行时陷入死循环,无法结束。 解决方案:检查循环条件和迭代语句,确保循环能够正常结束。例如:
// 死循环:i的初始值为1,循环条件i <= 10,但迭代语句是i--
for (int i = 1; i <= 10; i--) {
System.out.println(i);
}
// 正确的循环:迭代语句是i++
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
问题:执行switch语句时,多个case的代码都被执行。 解决方案:在每个case的代码块后面添加break语句。例如:
int num = 2;
switch (num) {
case 1:
System.out.println("1");
case 2:
System.out.println("2");
case 3:
System.out.println("3");
break;
}
// 输出:2 3(case穿透)
// 正确的写法:添加break语句
switch (num) {
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
}
// 输出:2
本章我们学习了Java的核心语法,包括语法基础、变量与数据类型、运算符以及流程控制。其中,基本数据类型与引用数据类型的区别、自动类型转换与强制类型转换的规则、流程控制语句的使用是本章的重点内容。从下一章开始,我们将学习Java的面向对象编程。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online