一、Java 程序的基本单位:方法
在 Java 中,方法是实现功能的最小单元,就像一个个独立的 "工具",每个工具负责完成特定的任务。比如打印信息、计算数值、判断逻辑等,都需要通过方法来实现。
1. 什么是方法?
方法是一段封装好的代码块,它可以:
- 接收外部传入的数据(参数)
- 对数据进行处理(方法体)
- 返回处理后的结果(返回值)
生活 analogy:就像一台咖啡机,接收咖啡豆(参数),经过研磨冲泡(方法体),最终产出咖啡(返回值)。
2. 方法的完整定义格式
修饰符 返回值类型 方法名(形参列表) { // 方法体:具体功能代码 return 返回值; // 返回处理结果(无返回值时可省略) } |
各部分详解:
- 修饰符:控制方法的访问权限,初学者常用public static(公共静态方法)
- 返回值类型:方法执行后返回结果的数据类型。如果没有返回值,必须用void声明
- 方法名:遵循 "小驼峰命名法"(首字母小写,后续单词首字母大写),如calculateBMI
- 形参列表:接收外部数据的变量列表,格式为数据类型 变量名,多个参数用逗号分隔
- 方法体:实现功能的核心代码
- return:将结果返回给调用者,无返回值时可单独用return;结束方法
3. 方法的常见形式
根据是否需要参数和返回值,方法可分为 4 种形式:
(1)无参数无返回值
// 打印3行Hello World public static void printHello() { System.out.println("Hello World"); System.out.println("Hello World"); System.out.println("Hello World"); } |
(2)有参数无返回值
// 根据温度推荐穿衣 public static void suggestClothes(int temperature) { if (temperature < 0) { System.out.println("穿羽绒服"); } else if (temperature < 15) { System.out.println("穿毛衣"); } else { System.out.println("穿T恤"); } } |
(3)无参数有返回值
// 获取当前系统时间(简化示例) public static String getCurrentTime() { return "2024-08-05"; // 实际开发中会用系统API获取 } |
(4)有参数有返回值
// 计算两个数的和 public static int add(int a, int b) { int sum = a + b; return sum; // 返回计算结果 } |
4. 方法的调用
方法定义后不会自动执行,必须通过调用才能运行,调用格式:方法名(实际参数)。
示例:调用上述方法
public static void main(String[] args) { // 调用无参无返回值方法 printHello();
// 调用有参无返回值方法 suggestClothes(26); // 传入实际温度
// 调用无参有返回值方法 String time = getCurrentTime(); System.out.println("当前时间:" + time);
// 调用有参有返回值方法 int result = add(10, 20); System.out.println("10+20=" + result); } |
注意:main方法是程序的入口,所有程序都从main方法开始执行
5. 方法重载:同名不同参
方法重载是指在同一个类中,方法名相同但形参列表不同的情况(形参类型、个数、顺序不同均可)。
为什么需要重载?
比如我们需要打印不同类型的数据,不需要定义printInt、printString等多个方法,直接用print即可:
// 打印整数 public static void print(int num) { System.out.println(num); } // 打印字符串(形参类型不同) public static void print(String str) { System.out.println(str); } // 打印整数和字符串(形参个数不同) public static void print(int num, String str) { System.out.println(num + ":" + str); } |
调用时 Java 会根据参数自动匹配对应的方法:
print(100); // 调用print(int) print("Hello"); // 调用print(String) print(2024, "年"); // 调用print(int, String) |
二、数据类型转换:不同类型的 "沟通技巧"
Java 是强类型语言,不同数据类型之间不能直接赋值,需要通过类型转换实现。就像不同国家的人交流需要翻译,不同数据类型也要通过转换才能 "沟通"。
1. 数据类型范围
首先要明确各种基本数据类型的范围(从小到大):
byte(1字节) < short(2字节) < int(4字节) < long(8字节) < float(4字节) < double(8字节)
⚠️ 注意:float虽然占用 4 字节,但范围比long大(因为存储方式不同)
2. 自动类型转换(隐式转换)
当把范围小的类型赋值给范围大的类型时,Java 会自动完成转换,无需额外操作。
byte b = 127; // byte范围:-128~127 int i = b; // 自动转换:byte -> int long l = i; // 自动转换:int -> long float f = l; // 自动转换:long -> float double d = f; // 自动转换:float -> double |
表达式中的自动提升
在表达式中,小范围类型会自动转换为大范围类型后再运算,最终结果类型由表达式中最大范围的类型决定。
特殊规则:byte、short、char参与运算时,会先自动转换为int:
byte a = 10; short b = 20; // a和b先转为int,结果也是int int c = a + b; char ch = 'A'; // 'A'的ASCII值是65 int num = ch + 1; // char自动转int,结果为66('B') |
3. 强制类型转换(显式转换)
当需要把范围大的类型赋值给范围小的类型时,必须手动进行强制转换,格式:
目标类型 变量名 = (目标类型) 源数据;
int a = 100; byte b = (byte) a; // 强制转换:int -> byte System.out.println(b); // 输出100(转换成功) |
注意事项:
- 可能导致数据溢出:当源数据超出目标类型范围时,结果会出错
int bigNum = 300; byte smallNum = (byte) bigNum; System.out.println(smallNum); // 输出-56(溢出结果) |
- 浮点转整型会截断小数:直接丢弃小数部分,不是四舍五入
double pi = 3.1415; int piInt = (int) pi; System.out.println(piInt); // 输出3(不是4) |
三、输入输出:程序与外界的交互
程序需要与用户交互:接收用户输入的数据(输入),展示计算结果(输出)。
1. 输出操作:打印数据
使用System.out相关方法实现输出:
- println():打印并换行
- print():打印不换行
- printf():格式化输出(类似 C 语言)
public static void main(String[] args) { System.out.println("Hello World"); // 打印后换行 System.out.print("Java"); System.out.print(" Programming"); // 连续打印不换行 System.out.printf("\n年龄:%d,身高:%.2f", 20, 1.75); // 格式化输出 } |
输出结果:
Hello World Java Programming 年龄:20,身高:1.75 |
2. 输入操作:使用 Scanner
通过 Java 提供的Scanner类可以接收键盘输入,步骤如下:
(1)导包:引入 Scanner 类
在类定义前添加:import java.util.Scanner;
(2)创建 Scanner 对象
Scanner sc = new Scanner(System.in);
(3)接收不同类型的数据
方法 |
功能 |
nextInt() |
接收整数 |
nextDouble() |
接收小数 |
next() |
接收字符串(不含空格) |
nextLine() |
接收一行字符串(含空格) |
完整示例:
import java.util.Scanner; // 导包 public class InputDemo { public static void main(String[] args) { // 创建Scanner对象 Scanner sc = new Scanner(System.in);
// 接收输入 System.out.print("请输入姓名:"); String name = sc.next(); // 接收字符串
System.out.print("请输入年龄:"); int age = sc.nextInt(); // 接收整数
System.out.print("请输入身高(米):"); double height = sc.nextDouble(); // 接收小数
// 输出结果 System.out.println("姓名:" + name); System.out.println("年龄:" + age + "岁"); System.out.println("身高:" + height + "米"); } } |
小贴士:java.lang包下的类(如System、String)无需手动导包,Java 会自动导入
四、运算符:数据处理的 "工具箱"
运算符是处理数据的工具,Java 提供了丰富的运算符来满足不同的计算需求。
1. 算术运算符
最基础的数学运算工具:
符号 |
作用 |
示例 |
结果 |
+ |
加法 |
5+3 |
8 |
- |
减法 |
5-3 |
2 |
* |
乘法 |
5*3 |
15 |
/ |
除法 |
5/2 |
2(整数除法取整) |
% |
取余(模运算) |
5%2 |
1(5 除以 2 的余数) |
特殊用法:+ 作为字符串连接符
当+两边有一个是字符串时,会把另一个也转换成字符串并拼接:
int a = 10; String b = "20"; System.out.println(a + b); // 输出"1020"(拼接结果) System.out.println(a + 5 + b); // 输出"1520"(先算10+5=15,再拼接) System.out.println(b + a + 5); // 输出"20105"(先拼接20和10,再拼接5) |
记忆技巧:能算则算,不能算就拼接
2. 自增自减运算符(++、--)
专门用于变量的加 1 和减 1 操作:
符号 |
作用 |
++ |
变量值 + 1 |
-- |
变量值 - 1 |
使用规则:
- 单独使用时,++a和a++效果相同:
int a = 5; a++; // a变为6 ++a; // a变为7 |
- 非单独使用时(如赋值、运算):
int a = 5; int b = ++a; // a先+1变为6,再赋值给b → b=6 int c = 5; int d = c++; // 先把c=5赋值给d,c再+1变为6 → d=5 |
-
- ++a:先自增,再使用变量值
- a++:先使用变量值,再自增
注意:自增自减运算符只能操作变量,不能操作字面量(如5++是错误的)
3. 赋值运算符
用于给变量赋值,分为基本赋值和扩展赋值:
(1)基本赋值运算符:=
int a = 10; // 把10赋值给变量a |
(2)扩展赋值运算符
在赋值的同时完成运算,包含:+=、-=、*=、/=、%=
表达式 |
等价于 |
a += b |
a = (a 的类型)(a + b) |
a -= b |
a = (a 的类型)(a - b) |
a *= b |
a = (a 的类型)(a * b) |
示例:
int a = 10; a += 5; // 等价于 a = a + 5 → a=15 byte b = 20; b += 30; // 等价于 b = (byte)(b + 30) → 自动强制转换 |
扩展赋值运算符会自动进行强制类型转换,这是它的重要特点
4. 关系运算符
用于判断条件,结果是boolean类型(true或false):
符号 |
作用 |
示例 |
结果 |
> |
大于 |
5>3 |
true |
>= |
大于等于 |
5>=5 |
true |
< |
小于 |
5<3 |
false |
<= |
小于等于 |
5<=3 |
false |
== |
等于 |
5==3 |
false |
!= |
不等于 |
5!=3 |
true |
注意:判断相等用==,不要写成赋值的=!
5. 三元运算符(三目运算符)
简化的条件判断,格式:
条件表达式 ? 结果1 : 结果2
执行逻辑:
- 如果条件表达式为true,返回结果 1
- 如果条件表达式为false,返回结果 2
示例:
// 判断成绩是否及格 int score = 75; String result = score >= 60 ? "及格" : "不及格"; System.out.println(result); // 输出"及格" // 求两个数的最大值 int a = 10, b = 20; int max = a > b ? a : b; System.out.println(max); // 输出20 |
6. 逻辑运算符
用于连接多个条件,进行逻辑判断,结果是boolean类型:
符号 |
名称 |
逻辑规则 |
特点 |
& |
逻辑与 |
两边都为 true,结果才为 true |
两边都会执行 |
&& |
短路与 |
同 & |
左边为 false 时,右边不执行(效率高) |
| |
逻辑或 |
至少一边为 true,结果就为 true |
两边都会执行 |
|| |
短路或 |
同 | |
左边为 true 时,右边不执行(效率高) |
! |
逻辑非 |
取反(!true=false, !false=true) |
单目运算符 |
^ |
逻辑异或 |
两边结果不同为 true,相同为 false |
- |
示例:
int a = 10; // 短路与:左边false,右边不执行(a不变) boolean rs1 = (a > 20) && (++a > 0); System.out.println(rs1); // false System.out.println(a); // 10 // 短路或:左边true,右边不执行(a不变) boolean rs2 = (a < 20) || (++a > 0); System.out.println(rs2); // true System.out.println(a); // 10 |
开发中推荐使用&&和||,因为短路运算能提高效率
五、综合案例:健康计算器
结合以上所有知识点,我们来实现一个实用的健康计算器,计算 BMI 指数和基础代谢率。
需求说明
- 接收用户输入:年龄、性别、体重(kg)、身高(cm)
- 计算 BMI 指数:BMI = 体重(kg) / (身高(m)的平方)
- 计算基础代谢率(BMR):
- 男性:BMR = 88.362 + (13.397 × 体重) + (4.799 × 身高) - (5.677 × 年龄)
- 女性:BMR = 447.593 + (9.247 × 体重) + (3.098 × 身高) - (4.330 × 年龄)
完整代码实现
import java.util.Scanner; public class HealthCalculator { public static void main(String[] args) { // 创建Scanner对象用于输入 Scanner sc = new Scanner(System.in);
// 接收用户输入 System.out.println("===== 健康计算器 ====="); System.out.print("请输入年龄:"); int age = sc.nextInt();
System.out.print("请输入性别(1-男,2-女):"); int gender = sc.nextInt();
System.out.print("请输入体重(kg):"); double weight = sc.nextDouble();
System.out.print("请输入身高(cm):"); double height = sc.nextDouble();
// 调用方法计算BMI和BMR double bmi = calculateBMI(weight, height); double bmr = calculateBMR(age, gender, weight, height); String bmiStatus = getBMIStatus(bmi);
// 输出结果 System.out.println("\n===== 计算结果 ====="); System.out.printf("BMI指数:%.2f(%s)\n", bmi, bmiStatus); System.out.printf("基础代谢率:%.2f 卡路里/天\n", bmr); }
// 计算BMI指数 public static double calculateBMI(double weight, double height) { double heightM = height / 100; // 身高转换为米 return weight / (heightM * heightM); }
// 计算基础代谢率 public static double calculateBMR(int age, int gender, double weight, double height) { if (gender == 1) { // 男性公式 return 88.362 + (13.397 * weight) + (4.799 * height) - (5.677 * age); } else { // 女性公式 return 447.593 + (9.247 * weight) + (3.098 * height) - (4.330 * age); } }
// 判断BMI状态 public static String getBMIStatus(double bmi) { if (bmi < 18.5) { return "体重过低"; } else if (bmi < 25) { return "正常范围"; } else if (bmi < 30) { return "超重"; } else { return "肥胖"; } } } |
运行结果示例
===== 健康计算器 ===== 请输入年龄:25 请输入性别(1-男,2-女):1 请输入体重(kg):70 请输入身高(cm):175 ===== 计算结果 ===== BMI指数:22.86(正常范围) 基础代谢率:1735.96 卡路里/天 |
总结
本文详细讲解了 Java 基础语法中的核心知识点:
- 方法是功能的基本单元,掌握定义和调用是基础
- 类型转换分为自动转换和强制转换,注意范围差异
- 输入输出是程序交互的基础,Scanner和System.out是常用工具
- 运算符是数据处理的核心,尤其是自增自减、逻辑运算符的细节
学习编程最重要的是多动手实践,建议把本文的代码示例都敲一遍,再尝试修改和扩展功能(比如给健康计算器增加更多指标)。基础打扎实后,后续学习面向对象、集合框架等内容会更加轻松。
如果本文对你有帮助,欢迎点赞收藏~ 有任何疑问也可以在评论区交流,一起进步!