Java study notes --- control the flow of execution

 Java uses all of C flow control statements, involving keywords are: if-else, while, do-while, for, return, break and switch. Java does not support goto statement (the statement caused many objections, but it is still solve some specific problems of the most convenient method), in Java can still jump a similar kind of goto, but compared to the typical goto, there a lot of restrictions.

  • true and false
  • if-else
  • Iteration
  • Foreach
  • return
  • break和continue
  • goto
  • switch

 

1.true and false

All conditional statements use the truth or falsehood of a conditional expression to determine the execution path. Example: a == b, a condition operator "==" to determine whether the value is equal to a value b, this expression returns true or false.

All the foregoing relational operators can be used to construct a conditional statement.

Note: Java is not allowed to use a number as a boolean value.

If you would like to use boolean test, a non-Boolean value, such as if (a), we first need to use a conditional expression to convert it to a Boolean value, for example, if (a! = 0) 

2.if-else

if-else is the most basic way to control program flow. Wherein else Alternatively, the following form:

if(Boolean-expression)

  statement

or

if(Boolean-expression)

  statement

else

  statement  

Boolean expression must produce a boolean result, statement refers to simple statements with a semicolon or a compound statement enclosed in braces --- a set of simple statements

3. Iteration

while, do-while loop, and to control for. Statement repeated until the dominant are Boolean expressions to get "false" results so far, while the cycle format is as follows:

 

example:

The method uses a condition Math library static (Static) Method Random (), the role of the process is to produce (but not including 0 comprises a) a double value between 0 and 1. Random number generation function compared to the front: Random rand = new Random (47); int i = rand.nextInt (100); generating an integer between 0-100.

while的条件表达式的意思是说:只要condition()返回true,就重复执行循环体中的语句。

do-while:

格式:

 

while和do-while唯一的区别就是do-while中的语句至少会执行一次,即便表达式第一次就被计算为false。而在while循环结构中,如果条件第一次就为false,那么其中的语句根本不会执行。

for:

for循环第一次执行之前需要进行初始化。随后,会进行条件测试,而且每次迭代结束时,进行某种形式的“步进”。for循环的格式如下:

 

初始化表达式,布尔表达式,或者步进运算都可以为空。每次迭代前会测试布尔表达式。若结果为true,就会执行for语句后面的代码行。每次循环结束会执行一次步进。

例子:

程序使用了java.lang.Character包装器类,这个类不但能把char基本类型的值包装进对象,还提供了一些其他的方法,这里用到了static idLowerCase()方法来检查问题中的字符是否为小写字母。 

逗号操作符:

Java里唯一用到逗号操作符的地方就是for循环的控制表达式。在控制表达式的初始化和步进控制部分,可以使用一系列由逗号分隔的语句,而且这些语句会独立执行。

需要注意:逗号操作符不是逗号分隔符,分隔符是用来分隔函数的不同参数

使用逗号操作符,可以在for语句内定义多个变量,但是它们必须具有相同的类型

例如:

4.Foreach

Foreach是一种更加简洁的for语法用于数组和容器。不必创建int变量去对由访问项构成的序列进行计数,foreach将自动生成每一项。

例如:有一个float数组,我们要选取该数组中的每一个元素。

这个数组使用旧式的for循环组装,因为在组装时必须按索引访问它。

 

这条语句定义了一个float类型的变量x,继而将每一个f的元素赋值给x。

任何返回一个数组的方法都可以使用foreach。例如:String类有一个方法toCharArray(),它返回一个数组,因此可以很容易地像下面这样迭代在字符串里面的所有字符:

 

foreach还可以用于任何Iterable对象

对于for语句在一个整形值序列中步进,如: 

对于这些语句,foreach语法不起作用,但可以使用net.mindview.util.Range包中创建的一个名为range()的方法,该方法会自动生成恰当的数组。

 

range()方法已经被重载,重载表示相同的方法名可以具有不同的参数列表。

range()的第一种重载形式是从0开始产生值,直至范围的上限;

range()第二种形式的重载是从第一个值开始产生值,直至比第二个值小1的值为止;

第三种形式有一个步进值,因此它每次的增量为该值。 

5.return

在Java中有多个关键词表示无条件分支,它们只是表示这个分支无需任何测试即可发生。这些关键词包括:return,break,continue和一种其他语言中的goto类似的跳转到标号语句的方式。

return关键词的用途:

1).指定一个方法返回什么值(假设它没有void返回值);

2).导致当前方法退出,并返回那个值。

例如:

不必加上else,因为方法在执行了return后不再继续执行。

如果在返回void的方法中没有return语句,那么在该方法的结尾处会有一个隐式的return,因此在方法中总是必须要有一个return语句。但是,如果方法声明它将返回void方法之外的其他东西,那么必须确保每一条代码路径都将返回一个值。

6.break和continue

在任何迭代语句的主体部分,都可用break和continue控制循环的流程。其中,break用于强行退出循环,不执行循环中剩余的语句。而continue则停止执行当前的迭代,然后退回循环起始处,开始下一次迭代。

 

在这个for循环中,i的值永远不会达到100;因为一旦达到74,break语句就会中断循环。只要i不能被9整除,continue语句就会使执行过程返回到循环的最开头(i会增加)。如果能整除,则将值显示出来;

第二种for循环展示了foreach用法,它将产生相同的结果;

最后一个“无穷while循环”,循环内部有一个break语句,可终止循环。continue语句执行序列移回到循环的开头,而没有去完成continue语句之后的所有内容。(只有i值能被10整除时才打印出值);

无穷循环的第二种形式是for(;;)。编译器将while(true)和for(;;)看作同一回事。

7.goto

goto语句起源于汇编语言的程序控制:“若条件A成立,则跳到这里;否则跳到哪里”

goto语句是在源码级别上的跳跃,这使其招致了不好的声誉;但是少数情况下,goto还是组织控制流程的最佳手段。

尽管goto仍是Java中的一个保留字,但在语言中并未使用它;Java没有goto。然而Java也能完成一些类似跳转的操作,这与break和continue这两个关键字有关。它们其实不是跳转,而是中断迭代语句的一种方法。

之所以把break,continue与goto一起讨论,是因为他们使用了相同的机制:标签

标签是后面跟有冒号的标识符:

label1:

在Java中,标签起作用的唯一的地方刚好是在迭代语句之前。“刚好之前”意思表明,在标签和迭代之间置入任何语句都不好。而在迭代之前设置标签的唯一理由:我们希望在其中嵌套另一个迭代或者一个开关。这是由于break和continue关键词通常只中断当前循环,但若随同标签一起使用,它们就会中断循环,直到标签所在的地方:

 

在(1)中,break中断内部迭代,回到外部迭代;

在(2)中,continue是执行点回到内部迭代的起始处;

在(3)中,continue label1也会中断内部迭代以及外部迭代,直接转到label1处;随后,它实际上是继续迭代过程,但从外部迭代开始;

在(4)中,break label1也会中断所有迭代,并回到label1处,但并不重新进入迭代。也就是说,它实际上完全终止了两个迭代。

下面例子反映了上面这四种情况:

注意:break会中断for循环,而且抵达for循环的末尾之前,递增表达式不会执行。由于break跳过了递增表达式,所以i==3的情况下直接对i执行递增运算。i==7的情况下,continue outer语句会跳到循环顶部,而且也会跳过递增,所以这里也对i直接递增。

如果没有break outer语句,就没办法从内部循环里跳出外部循环。这是由于break本身只能中断最内层的循环(continue也是如此)。

如果向在中断循环的同时退出,简单的用一个return即可。

下面例子展示了带标签的break以及continue语句在while循环中的用法:

 结果为:

 

同样的规则亦适用于while:

1).一般的continue会退回最内层循环的开头(顶部),并继续执行;

2).带标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环;

3).一般的break会中断并跳出当前循环;

4).带标签的break会中断并退出标签所指的循环。

 重点:在Java里需要使用标签的唯一理由就是因为有循环嵌套存在,而且想从多层嵌套中break或continue。 

8.switch

switch有时被划归为一种选择语句,根据整数表达式的值,switch语句可以从一系列代码中选出一段去执行。格式如下:

 

其中,Integral-selector(整数选择因子)是一个能够产生整数值的方式,switch能将这个表达式的结果与每个Integral-value(整数值)相比较。若发现相符的就执行相应的语句(单一语句或多条语句,其中并不需要括号);若没有相符的,就执行default语句。

每一个case均以一个break结尾,这样可使执行流程跳转至switch主体的末尾;但break是可选的,若省略break,会继续执行后面的case语句,直到遇到一个break为止。

最后的default没有break但如果你想,也可以加上,但不会有任何实际用处。

switch语句是实现多路选择的一种干净利落的方法,但它要求使用一个选择因子,并且必须是int或char那样的整数值;在后面将会看到enum和switch的协调工作。

例子:

结果:

 

Random.nextInt(26)会产生0到26之间的一个值,所以在其上加上一个偏移量"a",即可产生小写字母;在case语句中,使用单引号引起的字符也会产生用于比较的整数值。

 

Guess you like

Origin www.cnblogs.com/ifreewolf/p/11207159.html