作为一名从零开始学习Java的开发者,第二天往往是建立编程思维的关键时期。今天我们要深入理解Java程序的基本结构、变量与数据类型、运算符以及控制流程这些构建Java程序的基石内容。
一个最简单的Java程序通常包含以下核心元素:
java复制public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
这段代码虽然简单,但包含了Java程序的核心结构:
public class HelloWorld:定义了一个公开类,类名必须与文件名一致(这里是HelloWorld.java)public static void main(String[] args):程序的入口方法,JVM从这里开始执行System.out.println():标准输出语句,用于在控制台打印信息注意:Java是严格区分大小写的语言,System和system会被视为不同的标识符。初学者常犯的错误就是大小写不一致导致编译失败。
Java是强类型语言,所有变量都必须先声明后使用。第二天学习需要掌握以下基本数据类型:
| 数据类型 | 大小 | 取值范围 | 默认值 | 示例 |
|---|---|---|---|---|
| byte | 8位 | -128~127 | 0 | byte b = 100; |
| short | 16位 | -32768~32767 | 0 | short s = 1000; |
| int | 32位 | -2^31~2^31-1 | 0 | int i = 100000; |
| long | 64位 | -2^63~2^63-1 | 0L | long l = 100000L; |
| float | 32位 | 单精度浮点 | 0.0f | float f = 3.14f; |
| double | 64位 | 双精度浮点 | 0.0d | double d = 3.1415926; |
| char | 16位 | Unicode字符 | '\u0000' | char c = 'A'; |
| boolean | 1位 | true/false | false | boolean flag = true; |
变量声明的基本语法:
java复制数据类型 变量名 [= 初始值];
例如:
java复制int age = 25;
double price = 99.8;
char grade = 'A';
boolean isPassed = true;
实操心得:在实际开发中,int和double是最常用的基本数据类型。对于货币计算等需要精确值的场景,建议使用BigDecimal而不是double,以避免浮点数精度问题。
Java运算符可以分为以下几类:
算术运算符:+ - * / % ++ --
java复制int a = 10;
int b = 3;
System.out.println(a + b); // 13
System.out.println(a % b); // 1
关系运算符:> < >= <= == !=
java复制System.out.println(a > b); // true
System.out.println(a == b); // false
逻辑运算符:&& || !
java复制boolean x = true;
boolean y = false;
System.out.println(x && y); // false
System.out.println(x || y); // true
赋值运算符:= += -= *= /= %=
java复制int c = 10;
c += 5; // 等同于 c = c + 5;
System.out.println(c); // 15
三元运算符:? :
java复制int max = (a > b) ? a : b;
java复制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("不及格");
}
java复制int day = 3;
switch (day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三"); // 输出这个
break;
default:
System.out.println("无效输入");
}
注意事项:每个case后面通常要加break语句,否则会出现"case穿透"现象,即会继续执行下一个case的代码。这在某些特定场景下可以利用,但大多数情况下是bug的来源。
java复制for (int i = 0; i < 5; i++) {
System.out.println("当前i的值:" + i);
}
// 输出0到4
java复制int j = 0;
while (j < 5) {
System.out.println("当前j的值:" + j);
j++;
}
java复制int k = 0;
do {
System.out.println("当前k的值:" + k);
k++;
} while (k < 5);
实操心得:for循环适合已知循环次数的场景,while循环适合条件控制的场景,do-while循环至少会执行一次循环体。在开发中,for循环使用频率最高。
数组是存储多个相同类型数据的容器。Java数组的声明方式:
java复制// 声明方式1:先声明后初始化
int[] arr1;
arr1 = new int[5]; // 创建一个长度为5的int数组
// 声明方式2:声明同时初始化
int[] arr2 = new int[3];
// 声明方式3:直接赋值初始化
int[] arr3 = {1, 2, 3, 4, 5};
数组通过索引访问,索引从0开始:
java复制int[] nums = {10, 20, 30, 40, 50};
System.out.println(nums[0]); // 10
System.out.println(nums[4]); // 50
// 遍历数组的三种方式
// 1. for循环
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
// 2. 增强for循环
for (int num : nums) {
System.out.println(num);
}
// 3. Arrays.toString()
System.out.println(Arrays.toString(nums));
注意事项:数组长度是固定的,创建后不能改变。如果需要动态大小的集合,后续会学习ArrayList等集合类。数组索引越界会抛出ArrayIndexOutOfBoundsException异常。
大小写错误:
java复制system.out.println("Hello"); // 错误,应该是System
缺少分号:
java复制int a = 5 // 错误,缺少分号
变量未初始化就使用:
java复制int x;
System.out.println(x); // 错误,x未初始化
数组索引越界:
java复制int[] arr = new int[3];
System.out.println(arr[3]); // 错误,最大索引是2
使用System.out.println()输出中间结果:
java复制int a = 5;
System.out.println("a的值:" + a); // 调试输出
a = a * 2;
System.out.println("计算后a的值:" + a);
使用IDE的调试功能:
阅读错误信息:
实操心得:遇到问题时,先仔细阅读错误信息,大多数情况下错误信息已经指明了问题所在。养成逐步调试的习惯,不要试图一次写太多代码再测试。
代码规范:
练习建议:
学习资源推荐:
建立知识体系:
学习编程最重要的是多实践,不要害怕犯错。每个优秀的程序员都经历过无数次的调试和修改。建议将今天的知识点通过实际编码来巩固,可以尝试编写一些小程序,如简易计算器、成绩评级系统等。