从0开始学习Java+AI知识点总结与面试题分享-2.Java基础语法

一、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. 方法重载:同名不同参

方法重载是指在同一个类中,方法名相同但形参列表不同的情况(形参类型、个数、顺序不同均可)。

为什么需要重载?

比如我们需要打印不同类型的数据,不需要定义printIntprintString等多个方法,直接用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包下的类(如SystemString)无需手动导包,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

使用规则:
  • 单独使用时,++aa++效果相同:

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类型(truefalse):

符号

作用

示例

结果

>

大于

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 指数和基础代谢率。

需求说明

  1. 接收用户输入:年龄、性别、体重(kg)、身高(cm)
  2. 计算 BMI 指数:BMI = 体重(kg) / (身高(m)的平方)
  3. 计算基础代谢率(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 基础语法中的核心知识点:

  • 方法是功能的基本单元,掌握定义和调用是基础
  • 类型转换分为自动转换和强制转换,注意范围差异
  • 输入输出是程序交互的基础,ScannerSystem.out是常用工具
  • 运算符是数据处理的核心,尤其是自增自减、逻辑运算符的细节

学习编程最重要的是多动手实践,建议把本文的代码示例都敲一遍,再尝试修改和扩展功能(比如给健康计算器增加更多指标)。基础打扎实后,后续学习面向对象、集合框架等内容会更加轻松。

如果本文对你有帮助,欢迎点赞收藏~ 有任何疑问也可以在评论区交流,一起进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值