
每个Java程序都有特定的结构,就像建造房子需要地基、墙壁和屋顶一样。让我们从一个简单的程序开始,了解Java程序的基本组成部分。
|// 这是一个简单的Java程序 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
这个程序虽然只有几行代码,但它包含了Java程序的所有基本元素。让我们逐行分析:
|// 这是一个简单的Java程序
以双斜杠//开头的内容称为单行注释。在Java中,注释是专门写给人类阅读的说明文字,编译器在编译程序时会自动忽略这些内容,不会影响程序的运行。
注释的主要作用是帮助自己或他人理解代码的功能、思路或特殊处理,尤其在代码较长或逻辑复杂时尤为重要。
除了//单行注释,Java还支持多行注释(用/* ... */包裹)和文档注释(用/** ... */包裹,通常用于生成API文档)。但在本例中,//后面的内容只对本行有效,适合简短说明或标注代码的作用。
|public class HelloWorld {
这行代码的作用非常重要,让我们逐部分详细解析:
public:这是一个访问修饰符,表示这个类是“公开的”,可以被任何其他类访问。如果没有写public,这个类只能在同一个包(package)中被访问。对于初学者来说,通常第一个程序会把类声明为public,这样编译器和运行环境都能正确找到它。class:这是Java的关键字,用来声明一个“类”。类是Java程序的基本结构单位,可以理解为一种“蓝图”或“模板”,用来描述某一类对象的属性和行为。HelloWorld:这是类的名字。Java要求类名必须和文件名完全一致(区分大小写),比如这里的类名是HelloWorld,那么文件名也必须是HelloWorld.java。{ ... }:大括号包裹的是类的主体,里面可以包含变量、方法等内容。所有属于这个类的代码都必须写在这对大括号内。在Java中,所有的代码都必须写在类里面,不能单独存在于类外部。每个Java程序至少有一个类。这里我们定义了一个名为HelloWorld的类,并且用public修饰,表示它是公开的,可以被Java虚拟机(JVM)直接访问和运行。
|public static void main(String[] args) {
这是程序的入口点,就像房子的正门一样。每个Java应用程序都必须有一个名为main的方法。当程序运行时,计算机从这里开始执行代码。
|System.out.println("Hello, World!");
这行代码负责在屏幕上显示文字。System.out.println是Java提供的输出功能,括号里的内容会被显示在屏幕上。
运行这个程序会输出:
|Hello, World!
大小写敏感
Java区分大小写,Hello和hello是完全不同的。
文件命名
Java源文件必须以.java结尾,文件名必须与类名相同。比如上面的程序应该保存为HelloWorld.java。
分号的重要性 每条语句后面都要加分号,就像句子后面要加句号一样。
大括号的配对
每个开始的大括号{都必须有对应的结束大括号}。
在Java编程中,最常见的输出方式是通过“控制台”来显示信息。控制台(Console)是一个用于输入和输出文本的窗口,通常在你运行Java程序时会自动弹出。它类似于一个黑色的命令行窗口,可以让程序员和用户之间进行简单的文字交互。
当你在Java代码中使用System.out.println或System.out.print等方法时,输出的内容就会显示在控制台上。控制台输出主要用于:
需要注意的是,控制台只能显示纯文本信息,不能显示图片、按钮等图形界面元素。对于初学者来说,学会使用控制台输出是理解Java程序运行流程和调试代码的重要基础。
println方法
|System.out.println("这是第一行"); System.out.println("这是第二行");
输出结果:
|这是第一行 这是第二行
println方法会在显示完内容后自动换行,就像按了回车键一样。
print方法
|System.out.print("Hello"); System.out.print(" "); System.out.print("World");
输出结果:
|Hello World
print方法不会自动换行,所有内容会连续显示在同一行。
在编写Java程序时,字符串通常用双引号括起来,比如 "Hello World"。但有时候,我们希望在字符串中包含一些特殊的字符,比如让输出内容换行、插入空格(制表符)、显示引号本身,或者输出一个反斜杠。这些字符如果直接写在字符串里,Java会无法识别或产生语法错误。
为了解决这个问题,Java 提供了“转义字符”(Escape Characters)。转义字符由反斜杠 \ 开头,后面跟一个特定的字母或符号,表示一个特殊的含义。通过使用转义字符,我们可以在字符串中插入各种特殊效果。例如:
\n):让输出内容从新的一行开始。\t):插入一个水平的空格,类似于按下 Tab 键。\"):在字符串中显示一个双引号。\'):在字符串中显示一个单引号。\\):在字符串中显示一个反斜杠本身。使用转义字符可以让我们的输出更加灵活和美观。下面是一些常见的用法:
|System.out.println("第一行\n第二行"); System.out.println("姓名\t年龄\t城市"); System.out.println("张三\t25\t北京");
输出结果:
|第一行 第二行 姓名 年龄 城市 张三 25 北京

变量就像计算机内存中的盒子,可以存储数据。每个盒子都有一个名字,我们可以通过这个名字来访问里面存储的数据。
|public class VariableDemo { public static void main(String[] args) { // 声明一个整数变量 int age = 25; // 声明一个字符串变量 String name = "张三"; // 声明一个小数变量 double salary = 5000.50; // 显示变量的值 System.out.println(
输出结果:
|姓名: 张三 年龄: 25 工资: 5000.5
Java提供了几种基本的数据类型,每种类型适合存储不同类型的数据。下面是详细的对比表:
char类型只能存储一个字符,必须用单引号括起来!boolean类型只有两个取值:true和false。
变量名必须遵循以下规则:
好的变量名应该有意义,能够清楚地表达变量所代表的数据内容和用途。这样不仅方便自己理解代码,也方便他人阅读和维护。
例如,表示学生年龄的变量可以命名为studentAge,表示用户名的变量可以命名为userName。避免使用无意义的单个字母(如x、y),除非在非常简短的、临时性的场合(如循环计数器):
|int studentAge = 20; // 好 String userName = "李四"; // 好 int x = 10; // 不好,没有意义
Java提供了五种基本的算术运算符:
|public class ArithmeticDemo { public static void main(String[] args) { int a = 10; int b = 3; System.out.println("a = " + a + ", b = " + b); System.out.println("加法: " + (a +
输出结果:
|a = 10, b = 3 加法: 13 减法: 7 乘法: 30 除法: 3 取余: 1
当一个表达式中包含多个不同的运算符时,Java并不是简单地从左到右依次计算,而是根据每种运算符的“优先级”来决定先算哪一部分。优先级高的运算符会先参与运算,优先级相同的运算符则按照结合性(一般是从左到右)依次计算。
例如,在表达式2 + 3 * 4中,虽然加法在乘法的左边,但因为乘法的优先级高于加法,所以会先计算3 * 4,再与2相加。
如果你希望改变默认的运算顺序,可以使用括号()将需要优先计算的部分括起来。括号的优先级最高,Java会最先计算括号内的表达式。
下面是一个简单的例子:
|int result = 2 + 3 * 4; // 结果是14,不是20
计算顺序:
3 * 4 = 122 + 12 = 14优先级从高到低:
()*、除法/、取余%+、减法-当两个整数相除时,结果也是整数,小数部分会被丢弃:
|int result = 7 / 2; // 结果是3,不是3.5
如果需要得到小数结果,至少有一个操作数必须是浮点数:
|double result = 7.0 / 2; // 结果是3.5
在Java中,我们可以使用+号来连接字符串:
|String firstName = "张"; String lastName = "三"; String fullName = firstName + lastName; System.out.println("全名: " + fullName);
输出结果:
|全名: 张三
String类提供了许多有用的方法,下面是一些常用方法及其说明:
这些方法可以帮助你方便地处理和操作字符串。下面是一些简单的示例:
|public class StringMethodsDemo { public static void main(String[] args) { String message = "Hello World"; // 获取字符串长度 System.out.println("长度: " + message.length()); // 转换为大写 System.out.println("大写: " + message.toUpperCase());
输出结果:
|长度: 11 大写: HELLO WORLD 小写: hello world 第1个字符: H 第6个字符: W
在Java中,某些数据类型之间可以自动进行类型转换,这种转换称为“自动类型转换”或“隐式类型转换”。当一种数据类型的值赋给另一种兼容且范围更大的数据类型时,Java会自动完成转换,
无需手动干预。例如,将int类型的变量赋值给double类型的变量时,Java会自动将int转换为double,因为double的取值范围更大且不会丢失精度。
这种自动转换通常发生在以下几种基本数据类型之间:byte → short → int → long → float → double。
|int number = 10; double decimal = number; // 自动转换为double System.out.println("整数: " + number); System.out.println("小数: " + decimal);
输出结果:
|整数: 10 小数: 10.0
有些情况下,自动类型转换无法满足需求,或者会导致精度丢失,这时我们需要手动进行类型转换,这种方式称为“强制类型转换”或“显式类型转换”。
强制类型转换通常用于将范围较大的数据类型转换为范围较小的数据类型,例如将double转换为int。在Java中,强制类型转换需要在目标类型前加上括号。例如:
|double price = 19.99; int wholePrice = (int) price; // 强制转换为int System.out.println("原价: " + price); System.out.println("整数价格: " + wholePrice);
输出结果:
|原价: 19.99 整数价格: 19
在Java中,常量指的是在程序运行过程中其值不能被修改的变量。要声明常量,需要使用final关键字修饰变量。被final修饰的变量在赋值后就不能再被更改,通常常量名使用全大写字母并用下划线分隔单词,以增强可读性。例如:
final关键字可以防止变量被意外修改,保证数据的安全性和一致性。声明常量的基本语法如下:
final 数据类型 常量名 = 值;
|public class ConstantsDemo { public static void main(String[] args) { final double PI = 3.14159; final String COMPANY_NAME = "我的公司"; System.out.println("圆周率: " + PI); System.out.println("公司名称: " + COMPANY_NAME); // 下面的代码会出错,因为常量不能重新赋值
使用常量有很多好处。首先,常量让代码更加清晰易懂,因为你可以用有意义的名字来代替那些难以理解的“魔法数字”。
比如,如果你在程序中多次用到圆周率3.14159,直接写数字别人可能不知道它的含义,但用PI这个常量名就一目了然。
其次,如果将来需要修改这个值,只需要改常量的定义处,整个程序其他地方都会自动更新,维护起来非常方便。
举个例子,假设你在公司里规定了员工的最大年假天数为15天,如果用常量MAX_VACATION_DAYS = 15,以后公司政策变了,只需改这一处即可,避免遗漏和出错。
在Java中,获取用户输入通常需要用到标准输入流(如键盘输入),而最常用的方式是通过Scanner类来实现。Scanner类位于java.util包中,它可以方便地从控制台
读取各种类型的数据(如字符串、整数、浮点数等)。下面我们看看如何使用Scanner类读取用户输入:
|import java.util.Scanner; public class InputDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入你的姓名: "); String name = scanner.nextLine(); System.out.print("请输入你的年龄: "); int
运行这个程序时,用户需要输入姓名和年龄,程序会显示个性化的问候语。
语法错误
|int number = 10 // 缺少分号 System.out.println("Hello" // 缺少右括号
逻辑错误
|int result = 5 / 2; // 期望得到2.5,实际得到2
运行时错误
|String text = null; System.out.println(text.length()); // 空指针异常
仔细阅读错误信息
当编译器或运行时抛出错误时,首先要认真阅读错误提示信息。错误信息通常会指出出错的文件、行号以及错误类型。例如,';' expected 表示缺少分号,cannot find symbol 说明变量名或方法名拼写有误。
通过分析这些信息,可以快速定位问题所在。
检查括号和分号
Java 对语法格式要求严格,常见的错误包括漏写分号(;)、大括号({})、小括号(())或中括号([])。建议在出错行及其上下文仔细检查括号和分号是否配对完整,尤其是在多层嵌套结构中。
确认变量名拼写正确
变量名、方法名、类名的拼写必须与声明时完全一致(区分大小写)。如果出现 cannot find symbol 或类似错误,检查是否有拼写错误、大小写不一致,或者变量是否在使用前已声明。
使用 print 语句检查变量值
在调试程序时,可以在关键位置插入 System.out.println() 语句,输出变量的当前值或程序执行到的步骤。这有助于追踪程序流程,发现逻辑错误或变量值异常。例如:
|System.out.println("age = " + age);
通过逐步输出变量值,可以定位问题发生的具体位置和原因。
7. 程序结构修正
以下程序有什么问题?请修正它。
|public class TestProgram { public static void main(String[] args) { System.out.println("Hello World") }
|public class TestProgram { public static void main(String[] args) { System.out.println("Hello World"); } }
问题:
System.out.println("Hello World")后面缺少分号修正后的代码:
println语句后添加了分号8. 个人信息程序
编写一个程序,声明变量并显示个人信息。
|public class PersonalInfo { public static void main(String[] args) { // 声明变量 String name = "张三"; int age = 20; double height = 1.75; boolean isStudent = true; // 显示个人信息 System.out.println("姓名: "
9. 简单计算器
编写一个程序,计算两个数的和、差、积、商和余数。
|public class Calculator { public static void main(String[] args) { int a = 15; int b = 4; System.out.println(a + " + " + b + " = " + (a + b)); System.out.println(a +
10. 字符串操作
编写一个程序,演示字符串的基本操作。
|public class StringOperation { public static void main(String[] args) { String text = "Java Programming"; System.out.println("原字符串: " + text); System.out.println("长度: " + text.length()); System.out.println("大写: " + text.toUpperCase());
输出结果:
|姓名: 张三 年龄: 20岁 身高: 1.75米 是否学生: true
说明:
String用于存储字符串(姓名)int用于存储整数(年龄)double用于存储小数(身高)boolean用于存储布尔值(是否学生)输出结果:
|15 + 4 = 19 15 - 4 = 11 15 * 4 = 60 15 / 4 = 3 15 % 4 = 3
说明:
+加法运算符-减法运算符*乘法运算符/除法运算符(整数除法)%取余运算符输出结果:
|原字符串: Java Programming 长度: 16 大写: JAVA PROGRAMMING 小写: java programming 第5个字符:
说明:
length()方法返回字符串的长度toUpperCase()将字符串转换为大写toLowerCase()将字符串转换为小写charAt(4)获取索引为4的字符(索引从0开始,所以是第5个字符)