一、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是常用工具
- 运算符是数据处理的核心,尤其是自增自减、逻辑运算符的细节
如果本文对你有帮助,欢迎点赞收藏~ 有任何疑问也可以在评论区交流,一起进步!