疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java流程控制和数组


 

      流程控制

  Java提供了两种流程控制结构:分支结构和循环结构。Java提供if和switch两种分支语句,还提供了while、dowhile、for三种循环结构,除此之外,foreach循环可以更简单的来遍历集合、数组的元素。Java还提供break和continue来控制程序的循环结构。

  1. if条件语句

  if(条件)

  {

  如果条件为真,则执行此段代码

  }

  if(条件)

  {

  如果条件为真,则执行此段代码

  }else{

  如果条件为假,则执行此段代码

  }

  if(条件)

  {

  }if else{

  }else{

  }

  2. switch分支语句

  switch(expression)

  {

  case condition1:

  ……

  break;

  case condition2:

  ……

  break;

  default:;

  ……

  }

  每个case标签后的每个代码块都有一个break;语句。Switch先计算expression的表达式的值,然后与每个case标签后的值进行比较,一旦相等,开始执行case后边的代码,直到遇到brea才结束。注意,switch后的expression表达式的数据类型只能是byte、short、int、char类型。

  3. while循环语句

  while(test_expression)

  {

  }

  每次循环之前,先对test_expression循环条件求值,如果循环条件为true,则运行循环体部分。使用while循环时,一定要保证循环条件有变成false的时候。

  4. do while 循环语句

  do while循环与while循环的区别在于:while循环是先判断循环条件,如果条件为真才执行循环体;而dowhile循环则先执行循环体,然后判断循环条件,如果循环条件为真,则执行下一次循环,否则中止循环。

  do

  {

  statements;

  [iteration_statements]

  }

  while(test_expression);

  5. for循环语句

  for([init_statements]; [test_expression]; [iteration_statement])

  {

  }

  执行for循环时,先执行初始化语句init_statements,这个语句只在循环开始前执行依次。每次执行循环体之前,先计算test_expression循环条件的值,如果循环条件为true,则执行循环体部分代码,然后执行循环迭代语句iteration_statement。因此,对于for循环,循环条件总比循环体要多执行一次。

  6. foreach循环

  使用这个循环结构可以方便的遍历数组和集合。

  for(typevariableName : array | collection)

  {

  }

  注意:foreach循环不能给数组赋值!

  7. 嵌套循环

  当程序语带嵌套循环时,如果外层循环的循环条件允许,则开始执行外层循环的循环体,而内层循环将外层循环的循环体来执行—只是内层循环需要反复执行自己的循环体而已。当内层循环执行结束、且外层循环的循环体执行介绍,则再次计算外层循环的循环条件,决定是否再次开始执行外层循环的循环体。

  l 使用break结束循环

  break用于完全结束一个循环,跳出循环体。

  l 使用continue结束本次循环

  continue只是中止本次循环,开始执行下一次循环。

  l 使用return结束方法

  当使用return语句时,return后边的语句则不执行,直接结束整个方法。

  数组类型

  Java的数组要求所有数组具有相同的数据类型。一旦数组的初始化完成,则数组在内存中所占用的空间大小就被固定了,数组的长度也就固定了。即使把某个数组元素的数据清空,但它所占的空间依然被保留,依然属于该数组,数组的长度依然不变。

  数组的初始化:

  newType[] arrayName;

  arrayName =newType[]{element1, element2, element3…};//静态初始化数组

  arrayName = new Type[length];//动态初始化数组

  int[][] b = new int[4][5];//二维数组

  使用arrayName[index]来访问数组元素的值。index表示数组元素的索引值,数组索引从0开始。使用arrayName.length来访问数组的长度。

  数组是一个引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。数组元素存储在堆(heap)内存中,数组引用变量存储在栈(stack)内存中。

  为什么有栈内存和堆内存之分?

  答:当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法内存栈也将自然销毁了。因此,所有在方法中定义的变量都是放在栈内存中的;当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随着方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(方法的参数传递时很常见),则这个对象依然被销毁。只有当一个对象没有任何引用变量引用它的时候,系统的垃圾回收机制会在合适的时候回收它。