前两篇已经了解了Java语言基础,本篇开始Java的流程控制。流程控制对任何一门编程语言都是至关重要的,它提供了控制程序步骤的基本手段。

一、复合语句

  Java语言的复合语句是以整个块区为单位的语句,又称块语句。复合语句由“{”开始,“}”结束。

  对于复合语句,我们只需要知道,复合语句为局部变量创建了一个作用域,该作用域为程序的一部分,在该作用域中某个变量被创建并能够被使用,如果在某个变量的作用域外使用该变量,则会发生错误。并且复合语句中可以嵌套复合语句。

二、条件语句

  条件语句可根据不同的条件执行不同的语句。包括if条件语句与switch多分支语句。这是学习Java的一个基础与重点。

  1. if条件语句

  使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“布尔表达式”,如果该表达式返回true,则执行其后的语句;若为false,则不执行if后的语句。可分为简单的if条件语句、if···else语句和if···else if多分支语句。

int a = 100;
if(a == 100) {
System.out.println(a);
}

  如上方代码,{}之间为复合语句,if为条件语句,翻译过来就是如果a等于100,则输出a的值,否则不执行。

  如果if后只有一条语句,比如上述代码只有一条输出,可以不加{},但为了代码的可读性,以及防止代码过多出现不必要的错误,建议所有的if、else后都加上相应的{}。

  2. if···else语句

  if···else语句是条件语句中最常用的一种形式,它会针对某种条件有选择的作出处理。通常表现为“如果满足某种条件,就进行某种处理,否则就进行另一种处理”。

  if后的()内的表达式必须是boolean型的。如果为true,则执行if后的复合语句;如果为false,则执行else后的复合语句。

  如:

 public class Getifelse {

     public static void main(String[] args) {
int math = 80; // 声明,数学成绩为80(及格)
int english = 50; // 声明,英语成绩为50(不及格) if(math >= 60) { // if判断语句判断math是否大于等于60
System.out.println("math has passed");
} else { // if条件不成立
System.out.println("math has not passed");
} if(english >= 60) { // if判断语句判断english是否大于等于60
System.out.println("english has passed");
} else { // if条件不成立
System.out.println("english has not passed");
}
} }

  运行结果为:

  

  3. if···else if多分支语句

  if···else if多分支语句用于针对某一事件的多种情况进行处理。通常表现为“如果满足某种条件”,就进行某种处理,否则,如果满足另一种条件,则进行另一种处理。

  如:

 public class GetTerm {

     public static void main(String[] args) {
int x = 40; if(x > 60) {
System.out.println("x的值大于60");
} else if (x > 30) {
System.out.println("x的值大于30但小于60");
} else if (x > 0) {
System.out.println("x的值大于0但小于30");
} else {
System.out.println("x的值小于等于0");
}
} }

  在本例中,由于x为40,条件x>60为false,程序向下执行判断;条件x>30为真,所以执行条件x>30后的程序块中的语句。输出结果如下:

  

  所以,if语句只执行条件为真的语句,其它语句都不会执行。

  4. switch多分支语句

  switch语句是一种比较简单明了的多选一的选择,在Java语言中,可以用switch语句将动作组织起来进行多选一。语法格式如下:

switch(表达式)
{
case 常量值1:
语句块1
[break;]
...
case 常量值n:
语句块2
[break;]
default:
语句块 n+1;
[break;]
}  

  switch语句中表达式的值必须是整型或字符型,常量值1~n必须也是整型或字符型。

  简单说一下switch语句是怎么执行的(重点,初学的朋友要注意)。首先switch语句先计算表达式的值,如果表达式的值与case后的常量值相同,则执行该case后的若干个语句,直到遇到break语句为止。如果没有break,则继续执行下一case中的若干语句,直到遇到break为止。若没有一个常量的值与表达式的值相同,则执行default后面的语句。default语句可选,如果不存在default语句,而且switch语句中的表达式的值与任何case的常量值都不相同,则switch不做任何处理。并且,同一个switch语句,case的常量值必须互不相同。

  例:用switch语句打印出星期的英文单词

 import java.util.Scanner;

 public class GetSwitch {

     public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入今天星期几:");
int week = scan.nextInt(); switch (week) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
case 7:
System.out.println("Sunday");
break;
default:
System.out.println("Sorry,I don't konw");
break;
}
} }

  这里Scanner是一个扫描器,用来输入的,使用时需在package下面用import语句导入Scanner类,我们可以在控制台中输入一个数字,然后用nextInt()来接收,这样week的值就是我们输入的数字,接下来执行switch语句,有7个case分别对应周一到周末,default在输入1~7以外的数据时执行。假设在控制台中输入1,则控制台会执行case 1后的语句,输出了Monday,结果如下:

  

  要注意的是case后的常量表达式的值可以为整数和字符,但不可以是实数后字符串,比如case 1.1,case “ok”都是非法的。

三、循环语句

  循环语句就是在满足一定条件的情况下反复执行某一个操作。包括while循环语句、do···while循环语句和for循环语句。

  1. while循环语句

  while循环语句的循环方式为利用一个条件来控制是否要继续反复执行这个语句。

  假设现在有1~10十个数字,我们要将它们相加求和,在学习while之前可能会直接用+运算符从1加到10,也就是1+2+3+4+5+6+7+8+9+10,但如果现在需要从1加到1万呢?10万?所以,我们要引入while循环来进行循环相加,如下:

 public class GetSum {

     public static void main(String[] args) {
int x = 1; // 定义初值
int sum = 0; // 定义求和变量,用于存储相加后的结果 while(x <= 10) {
sum += x; // 循环相加,也即 sum = sum + x;
x++;
}
System.out.println(sum);
} }

  这就是一个从1加到10的代码,首先定义一个初值x为1,然后定义一个存储相加结果的变量sum为0,循环条件为x<=10,也就是每次判断x<=10是否成立,成立则继续循环。循环内第一句“sum +=x;”其实就是“sum = sum +x;”的另一种写法,是在sum的基础上加x,并赋给sum,那么此时sum的值为0+1=1了,然后x++,x自增1为2,判断x<=10,则继续循环,sum的值变为1+2=3,然后x++变为3,如此循环下去,直到x为11时退出循环,此时sum的值就是1+2+3+4+5+6+7+8+9+10最后的结果55了。

  在while循环语句中,如果while语句后直接加分号,如while(a == 5);代表当前while为空语句,进入无线循环。

  2. do···while循环语句

  do···while循环语句与while循环语句的区别是,while循环语句先判断条件是否成立再执行循环体,而do···while循环语句则先执行一次循环后,再判断条件是否成立。也即do···while至少执行一次。语法格式如下:

do
{
执行语句
} while (条件表达式);

  下面对while循环语句与do···while循环语句进行一个对比:

 public class Cycle {

     public static void main(String[] args) {
int a = 10;
int b = 10; // while循环语句
while(a == 8) {
System.out.println("a == " + a);
a--;
} // do···while循环语句
do {
System.out.println("b == " + b);
b--;
} while(b == 8);
} }

  运行结果为:

  这里,a、b都为10,先看while循环语句,进入while下语句块的条件是a == 8,很明显不成立,所以不执行,结果中没有关于a的结果,然后再看do···while循环语句,先执行一次do后的语句块,输出“b == 10”,然后判断while条件b == 8不成立,循环结束,所以结果只有一个do···while语句中执行的第一步b == 10。

  3. for循环语句

  for循环语句是Java程序设计中最有用的循环语句之一。一个for循环可以用来重复执行某条语句,知道某个条件得到满足。语法格式如下:

for(表达式1; 表达式2; 表达式3)
{
语句序列
}

  其中,表达式1为初始化表达式,负责完成变量的初始化;表达式2为循环条件表达式,指定循环条件;表达式3为循环后操作表达式,负责修整变量,改变循环条件。三个表达式间用分号隔开

  例:用for循环语句求100以内所有偶数的和。

 public class Circulate {

     public static void main(String[] args) {
int sum = 0; for(int i=2; i<=100; i+=2) {
sum += i;
} System.out.println(sum);
} }

  for循环内,首先定义一个变量并赋初值,表示循环中i从2开始进行,然后条件为i<=100,即i<=100时进行循环并执行语句块中的语句,第三个表达式“i+=2”表示每次循环执行i=i+1,即没循环一次,i的值为在原来的基础上加2后的值。然后循环求sum的值,即2+4+6+8+···+100,当i=102时退出循环,执行输出语句,输出结果为2550。

  说到for循环语句就不得提到foreach语句了,它是Java5后新增的for语句的特殊简化版本,并不能完全替代for语句,但所有foreach语句都可以改写为for语句。foreach语句在遍历数组等时为程序员提供了很大的方便。语法格式如下:

for(元素变量x : 遍历对象obj) {
引用了x的Java语句;
}

  下面举一个例子说明foreach怎么遍历的:

int array[] = {7, 8, 9};

for (int arr : array) {
System.out.println(arr);
}

  array是一个一维数组,其中有7、8、9三个值,现在要将这三个值打印到控制台上,用foreach语句相比for语句会简单很多。其中,在for的条件中,先定义了一个整型变量arr(只要和要遍历的数组名不同即可),冒号后则是要遍历的数组名,那么{}间就是要循环的内容了。

四、跳转语句

  Java语言提供了三种跳转语句,分别是break语句、continue语句和return语句。

  1. break语句

  break语句刚刚在switch中已经见过了,是用来中止case的。实际上break语句在for、while、do···while循环语句中,用于强行退出当前循环,为什么说是当前循环呢,因为break只能跳出离它最近的那个循环的循环体,假设有两个循环嵌套使用,break用在内层循环下,则break只能跳出内层循环,如下:

for(int i=0; i<n; i++) {    // 外层循环
for(int j=0; j<n ;j++) { // 内层循环
break;
}
}

  2. continue语句

  continue语句只能用于for、while、do···while循环语句中,用于让程序直接跳过其后面的语句,进行下一次循环。

  例:输出10以内的所有奇数

 public class ContinueDemo {

     public static void main(String[] args) {
int i = 0; while(i < 10) {
i++; if(i%2 == 0) { // 能被2整除,是偶数
continue; // 跳过当前循环
} System.out.print(i + " ");
}
} }

  这里if条件判断是否为偶数,如果是偶数则执行continue,直接跳出本次循环,不进行continue后的步骤(即不执行输出语句),然后下一次循环为奇数,输出i,运行结果如下:

  

  3. return语句

  return语句可以从一个方法返回,并把控制权交给调用它的语句。

public void getName() {
return name;
}

  例如上方代码,这是一个方法用于获取姓名,当调用这个方法时将返回姓名值。

Java入门篇(三)——Java流程控制的更多相关文章

  1. Excel VBA入门(三) 流程控制1-条件选择

    VBA中的流程控制分为两种,其一是条件结构式的,即根据条件判断的结果去选择性执行相应的语句(块):另一种是循环,即循环地执行语句(块).本节介绍第一种. 1. IF if 语句其实包含有几种形式: ① ...

  2. java提高篇(三)-----java的四舍五入

    Java小事非小事!!!!!!!!!!!! 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么简单了.在讲解之间我们先看如下一个经典的案例: public stat ...

  3. excel的宏与VBA入门(三)——流程控制

    一.条件控制IF if 逻辑表达式 then 语句块 end if 带else的if语句: If 逻辑表达式1 Then 语句块1 ElseIf 逻辑表达式2 Then 语句块2 ElseIf 逻辑表 ...

  4. Excel VBA入门(四)流程控制2-循环控制

    所谓循环控制,即在循环执行一段代码,用于完成一些重复性任务. VBA中的循环控制语句主要有3种:for.while.loop.对于大多数人来说,for的使用频率最高,而我个人也觉得for是最为灵活的, ...

  5. Java入门篇(六)——类和对象

    写到这里终于写到了入门篇的最后一个知识点了.类和对象是Java中经常被提到的两个词汇,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语 ...

  6. Java 中的运算符和流程控制

    Java 中的运算符和流程控制 + 面试题 算术运算符 Java 中的算术运算符,包括以下几种: **算术运算符** **名称** **举例** + 加法 1+2=3 - 减法 2-1=1 \* 乘法 ...

  7. Java基础篇(03):流程控制语句,和算法应用

    本文源码:GitHub·点这里 || GitEE·点这里 一.分支语句 流程控制语句对任何一门编程语言都是非常重要的,Java中基于流程控制程序执行的不同步骤和代码块. 1.IF条件 IF条件语句会根 ...

  8. Java入门(三):变量和运算符

    上次谈到了Java的基本数据类型,今天接着聊Java的变量.运算符. 一.变量 1.变量的分类 变量分为成员变量.局部变量和常量,其中成员变量又分为实例变量.类变量. 2.变量的定义 语法:变量类型( ...

  9. java提高篇-----理解java的三大特性之封装

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  10. Java总结篇:Java多线程

    Java总结篇系列:Java多线程 多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: ...

随机推荐

  1. 使用 Kafka 和 ELK 搭建测试日志系统(1)

    本文仅供自己学习,不合适转载. 这是两篇文章的第一部分. 1. 安装 ELK 1.1 安装 ElasticSearch 在海航云上创建一个 Ubutu 16.4 虚机,2核4GB内存. (1)执行以下 ...

  2. MySQL Replication 主从复制全方位解决方案

    1.1 主从复制基础概念 在了解主从复制之前必须要了解的就是数据库的二进制日志(binlog),主从复制架构大多基于二进制日志进行,二进制日志相关信息参考:http://www.cnblogs.com ...

  3. [编织消息框架][JAVA核心技术]动态代理应用11-水平扩展实现

    由于示例,远程服务地址配置在properties文件,通过QMConfig类加载,最优方式是上节介绍过,放在共享内存上,只需要维护一份数据即可,如放在redis上 /** 服务地址<servic ...

  4. K:java中枚举的常见用法

    用法一:常量   在JDK1.5 之前,我们定义常量都是: public static fianl.....现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. ...

  5. python2中的__init__.py文件的作用

    python2中的__init__.py文件的作用: 1.python的每个模块的包中,都必须有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module. 2.__init_ ...

  6. iconfont-字体图标

    看到支付宝官网,使用很多iconfont-字体图标.素色,纯色,体积小,尝试使用做个demo,以便日后参考使用 ============================ <h1>第一个结构 ...

  7. HTML5 Audio/Video 标签,属性,方法,事件汇总 (转)

    HTML5 Audio/Video 标签,属性,方法,事件   <audio> 标签属性:src:音乐的URLpreload:预加载autoplay:自动播放loop:循环播放contro ...

  8. 使用dropwizard(4)-加入测试-jacoco代码覆盖率

    前言 dropwizard提供了一个简单的测试框架.这里简单集成并加入jacoco测试. Demo source https://github.com/Ryan-Miao/l4dropwizard 本 ...

  9. windows环境VS2015编译TensorFlow C++程序完全攻略

    本文参考和综合了多篇网络博客文章,加以自己的实践,最终终于在windows环境下,编译出可以用于C++程序调用tensorflow API的程序,并执行成功. 考虑到网络上关于这方面的资料还较少,特总 ...

  10. Python 读取文件 with语句 管理上下文

    为了避免打开文件后忘记关闭,可以通过管理上下文 with open('file_name', 'r') as f: pass with 执行完毕之后 自动关闭且释放资源