Java基础:Java流程控制

块(即复合语句)是指由一对大括号括起来的若干条简单的 Java 语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。但是,不能在嵌套的两个块中声明同名的变量。使用块(有时称为复合语句)可以在Java程序结构中原本只能放置一条(简单)语句的地方放置多条语句。

本篇主要记录内容包括:块作用域、分支结构、循环语句与、中断控制流程语句


  • 上一篇内容:Java基础:Java数字类型
  • 下一篇内容:Java基础:Java类与对象
  • 更多知识学习:全网最全的 Java 技术栈内容梳理(持续更新中)

文章目录

    • 一、Java 代码块
        • 1、块作用域
        • 2、代码块分类
        • 3、构造方法与代码块执行顺序
    • 二、Java 分支结构
        • 1、条件语句
        • 2、多重选择:switch语句
        • 3、三元运算符
    • 三、Java 循环语句
        • 1、while 循环语句与 do-while 语句
        • 2、for 循环语句
        • 3、foreach 循环语句
    • 四、Java 中断控制流程语句


一、Java 代码块

1、块作用域

块(即复合语句)是指由一对大括号括起来的若干条简单的 Java 语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。但是,不能在嵌套的两个块中声明同名的变量。

Ps:在 C++ 中,可以在嵌套的块中重定义一个变量。在内层定义的变量会覆盖在外层定义的变量。这样,有可能会导致程序设计错误,因此在 Java 中不允许这样做。

有名字的代码块—— if-else 代码块,for 循环代码块,main 方法代码块。代码块也叫体,比如 for 循环体,main 方法体。

2、代码块分类

根据代码块位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块和同步代码块:

  • 局部代码块:类中方法的方法体,局部代码块是定义在方法或语句中,方法和类都是以代码块的方式划定边界的;
  • 构造代码块:定义在类中成员位置,方法之外的代码块,构造代码块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行。特点:①优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作;②每创建一个对象均会执行一次构造代码块;
  • 静态代码块:用static{}包裹起来的代码片段,只会执行一次,静态代码块优先于构造块执行。特点:①静态代码块是定义在成员位置,方法之外,使用static修饰的代码块;②它优先于主方法执行、优先于构造代码块执行,在类加载时执行;③该类不管创建多少对象,静态代码块只执行一次;④可用于给静态变量赋值,用来给类进行初始化;
  • 同步代码块:当线程开始执行同步代码块前,必须先获得对同步代码块的锁定,并且任何时刻只能有一个线程可以获得对同步监视器的锁定,当同步代码块执行完成后,该线程会释放对该同步监视器的锁定。

特点:①使用synchronized(){}包裹起来的代码块;②在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性;③同步代码块需要写在方法中。

3、构造方法与代码块执行顺序

B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块执行的先后顺序是:
父类B静态代码块>子类A静态代码块>父类B非静态代码块>父类B构造函数>子类A非静态代码块>子类A构造函数父类B静态代码块 > 子类A静态代码块 > 父类B非静态代码块 > 父类B构造函数 > 子类A非静态代码块 > 子类A构造函数 >>>>>

二、Java 分支结构

1、条件语句

在 Java 中,条件语句的格式为: if(condition) statement,这里的条件必须用括号括起来。

与绝大多数程序设计语言一样,Java常常希望在某个条件为真时执行多条语句。在这种情况下,使用块语句,格式为

{statement1statement2......
}

Ps:使用块(有时称为复合语句)可以在Java程序结构中原本只能放置一条(简单)语句的地方放置多条语句。

其中 else 部分是可选的。else 子句与最邻近的if构成一组。因此,在语句中 else 与第 2 个 if 配对。当然,用一对括号将会使这段代码更加清晰:重复地交替出现 if...else if...是一种很常见的情况。

2、多重选择:switch语句

在处理多个选项时,使用 if/else 结构显得有些笨拙。Java 有一个与 C/C++ 完全一样的 switch 语句。

switch 语句将从与选项值相匹配的 case 标签处开始执行直到遇到 break 语句,或者执行到 switch 语句的结束处为止。如果没有相匹配的 case 标签,而有 default 子句,就执行这个子句。

Ps:有可能触发多个 case 分支。如果在 case 分支语句的末尾没有 break 语句,那么就会接着执行下一个 case 分支语句。这种情况相当危险,常常会引发错误。

case 标签可以是:① 类型为char、byte、short 或 int 的常量表达式。②枚举常量。③从 Java SE 7 开始,case 标签还可以是字符串字面量。

3、三元运算符

元运算符也叫三目运算符 ,即由三部分组成,格式:关系表达式 ? 表达式1:表达式2;

先执行关系表达式,看其结果是 true 还是 false:如果是 true,则执行表达式 1;如果是false,则执行表达式 2。

三、Java 循环语句

1、while 循环语句与 do-while 语句

当条件为 true 时,while 循环执行一条语句(也可以是一个语句块)。一般格式为:while( condition ) statetion,如果开始循环条件的值就为 flase,则 while 循环体一次也不执行。while循环语句首先检测循环条件,因此,循环体中的代码有可能不被执行。如果希望将语句至少执行一遍,则应该把检测条件放在最后面,这就是 do-while 语句,它的格式大致为:do statement while (condition );

2、for 循环语句

for 循环语句是支持迭代的一种通用结构,利用每次迭代之后更新的计数器或类似的变量来控制迭代次数。

for 语句的第 1 部分通常用于对计数器初始化;第 2 部分给出每次新一轮循环执行前要检测的循环条件;第 3 部分指示如何更新计数器。与 C++ 一样,尽管 Java 允许在 for 循环的各个部分放置任何表达式,但有一条不成文的规则:for 语句的 3 个部分应该对同一个计数器变量进行初始化、检测和更新。若不遵守这一规则,编写的循环常常晦涩难懂。

3、foreach 循环语句

Java 有一种功能很强的循环结构,可以用来依次处理数组中的每个元素(其他类型的元素集合亦可)而不必为指定下标值而分心,语句格式为:for(variable:collection) statement

for each 循环语句相较于传统的 for 循环更加简介、更不易出错(不必为下标的起始值和终止值而操心)

Ps:要想获得数组中的元素个数,可以使用 array.length。

Ps:for each 循环语句的循环变量将会遍历数组中的每个元素,而不需要使用下标值。

四、Java 中断控制流程语句

break 关键字:break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。 break 跳出最里层的循环,并且继续执行该循环下面的语句。

continue 关键字: continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。①在 for 循环中, continue 语句使程序立即跳转到更新语句。②在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。

跳出控制语句的区别:

  1. break :结束当前整个循环,执行当前循环下边的语句;
  2. continue :结束本次循环,继续进行下次循环;
  3. return : 用于结束一个方法,返回给上层调用者,如果位于main方法内,相当于结束了程序,return 也可以用于结束循环,因为 return 用于结束一个方法,如果方法中有循环的话,不管 return 嵌套于多少层循环之内,循环都结束不会再执行循环后面的语句。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础:Java类与对象

面向对象程序设计(简称OOP)是当今主流的程序设计范型,它已经取代了20世纪70年代的“结构化”过程化程序设计开发技术。Java是完全面向对象的,必须熟悉OOP才能够编写Java程序。面向对象的程序是由对象组成的,每个对象包…

SVN备份脚本

#!/bin/bash #svn全量备份脚本 wwytcode_path/home/wwytcode/project backup_path/home/bak Datedate %Y%m%d cd $backup_path echo date >> $back_path/svn_backup.log svnversionsvnlook youngest $wwytcode_path svnadmin dump --revision 0:$svnversion $wwytcode_pa…

Java基础:Java面向对象

面向过程的优点是性能比面向对象高,不需要面向对象的实例化;缺点是不容易维护、复用和扩展。面向对象的优点是具有封装、继承、多态的特性,因而容易维护、复用和扩展,可以设计出低耦合的系统;缺点是由于需要实例化对象…

薪资生成

import openpyxl from openpyxl.styles import Font,Alignment,Side,Border#设置字体样式 fontFont(name宋体,size20,boldTrue) font2Font(name宋体,size12,boldTrue) alignmentAlignment(horizontalcenter,verticalcenter,wrap_textTrue) sideSide(stylethin ,color000000) …

Java基础:Java抽象接口

在Java中,一个没有方法体的方法应该定义为抽象方法,而如果一个类中含有抽象方法,则该类必须定义为一个抽象类。接口是功能的集合,同样可看做是一种特殊的数据类型,是比抽象类更为抽象的类,接口只描述所应该…

13 张图带你学懂 Kubernetes Service(转载)

在 Kubernetes 中 Service 主要有4种不同的类型,其中的 ClusterIP 是最基础的,如下图所示: 当我们创建一个 NodePort 的 Service 时,它也会创建一个 ClusterIP,而如果你创建一个 LoadBalancer,它就会创建一…

Java基础:Java异常机制

异常是程序运行过程中出现的错误。Java 把异常当作对象来处理,把异常信息封装成了一个类,并定义一个基类java.lang.Throwable作为所有异常的超类。Throwable : 它是所有错误与异常的超类(祖宗类),有两个子类 Error 和 Exception。…

JavaWeb:Servlet的应用及接口介绍

广义的 Servlet 泛指在服务器上运行的 Java 程序,但是这个 Java 程序,并不能独立运行(因为 Servlet 没有 main 方法),需要部署在相应的 Servlet 容器中,比如 Tomcat 和 Jetty。Servlet 主要功能在于交互式地…

DOCKERFILE参数注解

Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。 一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。 Dockerfile的指令是忽略大小写的,建议使用大写,使用 # 作为…

Zookeeper:分布式过程协同技术

Zookeeper 是一个高性能的分布式一致系统,在分布式系统中有着广泛的应用。基于它,可以实现诸如“分布式同步”、“配置管理”、“命名空间管理”等众多功能,是分布式系统中常见的基础系统。Zookeeper 主要用来解决分布式集群中应用系统的一致…

面试题2021-2-24

给某CentOs6虑拟机添加了新的数据盘,设备名为/de/sdd.写命令格式化满加的效的并挂载到指定目录/opt fdisk -l mkfs.ext4 /de/sdd mount /de/sdd /opt 如何查看与RabbtMQ服务器之间的establish状态连接数?netstat -an |grep ESTABLISHED |grep tcp |wc -l…

Zookeeper:在三种模式下的部署

zookeeper 安装模式有三种:单机模式:单机单 server;集群模式:多机多 server,形成集群;伪集群模式:单机多 server,形成伪集群。 ~ 本篇内容包括:Zookeeper 官网下载、Zook…

Linux namespace概述

操作系统通过虚拟内存技术,使得每个用户进程都认为自己拥有所有的物理内存,这是操作系统对内存的虚拟化。操作系统通过分时调度系统,每个进程都能被【公平地】调度执行,即每个进程都能获取到CPU,使得每个进程都认为自己…

Zookeeper:Zookeeper的主从选举机制

ZAB 协议,全称 Zookeeper Atomic Broadcast(Zookeeper 原子广播协议),是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的一致性协议。基于该协议,ZooKeeper 实现了一种主从模式的系统架构来保持集群中各个副…

Linux namespace之:uts namespace

理解uts namespace uts(UNIX Time-Sharing System) namespace可隔离hostname和NIS Domain name资源,使得一个宿主机可拥有多个主机名或Domain Name。换句话说,可让不同namespace中的进程看到不同的主机名。 例如,使用unshare命令(较新版本L…

Zookeeper:事件监听和通知机制

Zookeeper 允许客户端向服务端的某个 Znode 注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据 Watcher 通知状态和事件类型做出业务上的改变。 …

Linux namespace之:mount namespace

理解mount namespace 用户通常使用mount命令来挂载普通文件系统,但实际上mount能挂载的东西非常多,甚至连现在功能完善的Linux系统,其内核的正常运行也都依赖于挂载功能,比如挂载根文件系统/。其实所有的挂载功能和挂载信息都由内…

Linux namespace之:network namespace

理解network namespace network namespace用来隔离网络环境,「在network namespace中,网络设备、端口、套接字、网络协议栈、路由表、防火墙规则等都是独立的」。 因network namespace中具有独立的网络协议栈,因此每个network namespace中都…

Kubernetes 的原理

kubernetes 已经成为容器编排领域的王者,它是基于容器的集群编排引擎,具备扩展集群、滚动升级回滚、弹性伸缩、自动治愈、服务发现等多种特性能力。 本文将带着大家快速了解 kubernetes ,了解我们谈论 kubernetes 都是在谈论什么。 kuberne…

Zookeeper:实现“分布式锁”的 Demo

Zookeeper 能保证数据的强一致性,用户任何时候都可以相信集群中每个节点的数据都是相同的。一个用户创建一个节点作为锁,另一个用户检测该节点,如果存在,代表别的用户已经锁住,如果不存在,则可以创建一个节…