12. 【Java教程】Java 表达式、语句和块

简介: 12. 【Java教程】Java 表达式、语句和块

我们在前面的小节中,已经学习了变量和运算符。有了这些前置知识,我们就可以学习表达式、语句和块了。


运算符可用于构建表达式,表达式可以进行值的计算,它是语句的核心组成部分;而语句是指令式编程语言中最小的独立元素;多条语句又可以组成语句块。本小节我们将学习表达式的概念和常用分类,也将了解到什么是语句和块。

1. 表达式

1.1 概念

表达式,是由数字、运算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。约束变量是在表达式中已被指定数值,而自由变量则可以在表达式之外另行指定数值。

Java 中,表达式是根据 Java 语法由变量运算符方法调用组成的结构,表达式的结算结果为单个值

表达式实例:

1. ppublic class Expression {
    public static void main(String[] args) {
        int a = 10, b = 20;
        // (a + b) * 2 就是一个算数表达式
        int c = (a + b) * 2;
        // c > b 就是一个布尔表达式
        if (c > b) { // if语句将在下一小节讲到,此处只需知道 c > b 是一个表达式即可
            System.out.println("c大于b");
        }
    }
}

上面代码中,(a + b) * 2 就是一个算数表达式,而 c > b 就是一个布尔表达式,代码中的 if 语句将在下一小节讲到,此处只需知道 c > b 是一个表达式即可。

下面我们将围绕算数表达式和布尔表达式来学习表达式。

1.2 分类

1.2.1 算数表达式

算数表达式是最常用的表达式,又称为数学表达式。它是通过算术运算符来进行运算的数学公式。

为了使用 Java 进行算数运算,首先必须至少声明一个变量。如下:

int num = 10;

变量创建后,可以使用算数运算符(+-*/%++-- )来操作变量的值。使用算数表达式的实例如下:

public class ArithmeticExpression1 {
    public static void main(String[] args) {
        int num = 10;
        int result = num / 3;
        System.out.println( num + " / 3 = " + result);
    }
}

编译执行程序,屏幕上将会打印:


10 / 3 = 3

对于操作数为整型的除法表达式,其计算结果将始终取整数部分。所以上面的 10 / 3 的结果等于 3。如果我们想得到小数,可以使用浮点类型的变量来作为操作数(10.0 / 3),其返回的值也是一个浮点型。


除了除法表达式之外,在使用自增 / 自减表达式运算的时候,也要额外注意前后自增 / 自减运算符的差别。我们来看下面一个实例:

public class ArithmeticExpression2 {
    public static void main(String[] args) {
      // 前自增
        System.out.println("------ 前自增 ------");
      int num = 10;
        System.out.println("++num = " + (++num));
        System.out.println("num = " + num);
        // 前自减
        System.out.println("------ 前自减 ------");
      num = 10;
        System.out.println("--num = " + (--num));
        System.out.println("num = " + num);
 
        // 后自增
        System.out.println("------ 后自增 ------");
      num = 10;
        System.out.println("num++ = " + (num ++));
        System.out.println("num = " + num);
        // 前自减
        System.out.println("------ 前自减 ------");
        num = 10;
        System.out.println("num-- = " + (num --));
        System.out.println("num = " + num);
    }
}

注意观察前后自增自减的区别,运行结果:

------ 前自增 ------
++num = 11
num = 11
------ 前自减 ------
--num = 9
num = 9
------ 后自增 ------
num++ = 10
num = 11
------ 前自减 ------
num-- = 10
num = 9

结论:

  1. 前自增 / 自减的运算规则是:先进行自增或者自减运算,再进行表达式运算;
  2. 后自增 / 自减的运算规则是:先进行表达式运算,再进行自增或者自减运算。
1.2.2 布尔表达式

布尔表达式(Boolean expression)的结果只有 true(真)和 false(假)两个值。在 Java 语言中,布尔表达式可以使用关系运算符逻辑运算符来代替算数运算符。

我们来看一个使用关系运算符的实例:

public class BooleanExpression1 {
    public static void main(String[] args) {
        // 初始化两个整型变量a、b,值分别为2、3
        int a = 2, b = 3;
        // 分别打印比较运算符比较的结果
        System.out.println(a == b);
        System.out.println(a != b);
        System.out.println(a > b);
        System.out.println(a < b);
        System.out.println(a >= b);
        System.out.println(a <= b);
    }
}

请阅读上面代码,并算出每一次打印的结果。这里不再展示代码打印结果。

布尔表达式常作为条件分支语句中的条件。因此下面的示例需要你对条件语句有一定的了解,我们再来看一个稍微复杂一些的实例:

1. publpublic class BooleanExpression2 {
    public static void main(String[] args) {
        // 初始化4个整型变量
        int i = 4, j = 5, k = 7, m = 8;
        // i > j && m < k++ 即为条件表达式
        if(i > j && m < k++) {
            k++;
        } else {
            k--;
        }
        System.out.println("k = " + k);
    }
}

编译执行代码,屏幕上将会打印:


k = 6

上述代码,是使用逻辑运算符和算数运算符结合的布尔表达式示例,如果布尔表达式 i > j && m < k++ 结果为真,则执行 if 分支,k 自增 1,否则执行 else 分支,k 自减 1,最后打印出 k 的值。由于 i 的值小于 j,并且 && 运算符有短路作用,所以 m < k++ 不做运算,直接走到 else 分支,最后得到结果 k = 这里再次强调一下逻辑运算符的短路:


在表达式中 (a && b),如果 a 为假,则 b 不会被求值,因为无论如何表达式都会为假。


同理,在表达式中 (a || b),如果 a 为真,则 b 不会被求值,因为无论如何表达式都会为真。


这就是我们所说的短路。如果想要取消短路,可以使用 & 代替 &&、使用 | 代替 ||,但是不建议这样写,会降低代码的可读性。


试想,如果将表达式中 i > j && m < k++ 的 && 改为 &,变量 k 的值将会是多少?

2. 语句

在计算机科学的编程中,一个语句是指令式编程语言中最小的独立元素,语句用以表达程序要执行的一些动作。多数语句是以高级语言编写成一个或多个语句的序列,用于命令计算机执行指定的一系列操作。


语句和自然语言(例如英语、汉语)中的句子大致相同。一条语句构成了完整的执行单元。通过使用英文分号(;)终止表达式,可以将以下类型的表达式制成语句:


赋值表达式

自增 / 自减 ++ 或 --

方法调用

对象创建表达式(面向对象部分将会学到)

请结合如下示例理解语句的概念:

变量声明语句:

int age;

赋值语句:

age = 20;

自增语句:

age ++;

方法调用语句:

System.out.println("Hello World! ");

3. 块

块通常用来将两条或多条语句组合在一起,使其在格式上看更像一条语句。

一堆语句可以放在大括号中,以作为单个块执行。可以为此类语句命名或为其提供执行条件(下一节的条件判断将会讲到)。

下面是将一系列的语句放在一个块中的示例代码:

{
    int a = 1;
    int b = 2;
    int c = 3;
    int result = a + b + c;
}

4. 小结

本节我们学习了表达式,它的计算结果为单独的值。还要特别注意前后自增 / 自减的区别,要理解逻辑运算符在表达式中的短路作用,这在任何语言的基础面试中都会经常考到。对于语句和块的概念,我们也有了一个初步的认识,想要完全理解这些内容,还需要继续向下学习更多知识。下一小节开始,我们将学习 Java 条件语句、循环语句等内容,这些都将加深你对本节概念的理解。


相关文章
|
19天前
|
安全 Java API
Java中的Lambda表达式:简洁与功能的结合
Java中的Lambda表达式:简洁与功能的结合
170 91
|
19天前
|
安全 Java
Java中的Switch表达式:更简洁的多路分支
Java中的Switch表达式:更简洁的多路分支
189 91
|
2月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
181 14
|
1月前
|
Java 编译器
Java 17 Switch表达式:更简洁、更强大的流程控制
Java 17 Switch表达式:更简洁、更强大的流程控制
|
2月前
|
设计模式 数据采集 Java
Java正则表达式的基础知识,进阶至熟练掌握。
通过大量的练习来熟悉它们的识别模式、如何设计模式来解决实际问题,才能够逐步达到熟练掌握。更多的是通过实践、编写代码和解决真实问题来完善技能。在这方面,没有快速的捷径,唯有刻意练习和长时间的代码实践。
57 0
|
3月前
|
SQL JSON 安全
Java 8 + 中 Lambda 表达式与 Stream API 的应用解析
摘要:本文介绍了Java 8+核心新特性,包括Lambda表达式与Stream API的集合操作(如过滤统计)、函数式接口的自定义实现、Optional类的空值安全处理、接口默认方法与静态方法的扩展能力,以及Java 9模块化系统的组件管理。每个特性均配有典型应用场景和代码示例,如使用Stream统计字符串长度、Optional处理Map取值、模块化项目的依赖声明等,帮助开发者掌握现代Java的高效编程范式。(150字)
61 1
|
7月前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
360 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
3月前
|
Oracle Java 关系型数据库
java 编程基础入门级超级完整版教程详解
这份文档是针对Java编程入门学习者的超级完整版教程,涵盖了从环境搭建到实际项目应用的全方位内容。首先介绍了Java的基本概念与开发环境配置方法,随后深入讲解了基础语法、控制流程、面向对象编程的核心思想,并配以具体代码示例。接着探讨了常用类库与API的应用,如字符串操作、集合框架及文件处理等。最后通过一个学生成绩管理系统的实例,帮助读者将理论知识应用于实践。此外,还提供了进阶学习建议,引导学员逐步掌握更复杂的Java技术。适合初学者系统性学习Java编程。资源地址:[点击访问](https://pan.quark.cn/s/14fcf913bae6)。
302 2
|
5月前
|
缓存 监控 Java
深入解析java正则表达式
本文深入解析Java正则表达式的应用,从基础概念到实际开发技巧全面展开。正则表达式是一种强大的文本处理工具,广泛应用于格式验证、搜索替换等场景。Java通过`Pattern`和`Matcher`类支持正则表达式,`Pattern.compile()`方法将正则字符串编译为高效模式对象。文章详细介绍了核心类的功能、常用正则语法及实际案例(如邮箱和电话号码验证)。掌握这些内容,可显著提升文本处理能力,满足多种开发需求。
168 1