一、流程控制结构中的一些注意事项

 1、if条件语句

    if () 、else if () 、else 后的代码块如果只有一行时,则可以省略花括号({}),因为单行语句本身就是一个整体,无需用花括号来把它们定义成一个整体。但是即使只有一行代码,也要保留花括号。这样程序会有更好的可读性,也会减少程序发生错误的可能。

 2、switch分支语句

   2.1、switch语句由一个控制表达式和多个case标签组成,和if语句不同的是,Switch语句后面的控制表达式的数据类型只能是byte、short、char、int四种整数类型和java.lang.String类型,不能是boolean类型。

   2.2、语法格式

switch (expression){
  case condition1:{
     statement(s)
     break;
      }       
    ...
  default:{
    statement(s)
    }         
}

   2.3、switch语句的运行流程

   switch语句会先求出expression表达式的值,然后拿这个表达式和case标签后的值进行比较,一旦遇到相等的值,程序就开始执行这个case标签后面的代码,不再判断与后面case、default标签的条件是否匹配,除非遇到break;才会结束。switch语句允许case代码块没有break;语句,但是会引起一个问题,一旦case标签的条件与expression表达式匹配,就会执行这个case后面的代码块,以及它后面的case、default标签里面的代码块,除非遇到下一个break;结束。

 3、循环结构

   3.1、在java程序中,一个单独的分好(;)表示一个空语句。所以不要在while (expression) 后面加;

例如:

int count = 0 ;
//while后面紧跟一个分号,表明循环体是一个分号(空语句)
while (count<5) ;
//下面的代码块与while循环一斤没有任何关系
    {
  System.out.println("count的值="+count);
  count++;    
    }

   3.2、与while循环不同的是,do while循环的循环条件后面必须有一个分号,用来表明循环结束。

例如:

int count = 0 ;
do
{
  System.out.println("count的值="+count);
  count++;    
}while (count<5) ;

   3.3、while、do while循环的循环迭代语句紧跟着循环体,因此如果循环体不能完全执行,如使用continue语句来结束本次循环,则循环迭代语句不会被执行。但for循环的循环迭代语句并没有与循环体放在一起,因此不管是否使用continue语句来结束本次循环,循环迭代语句一样会获得执行。

   3.4、使用break结束循环:某些时候需要某种条件出现时强行终止循环,而不是等循环条件变false时才退出循环。break可以用来完成这个功能。break用于完全结束一个循环,跳出循环体。

例如:

public class BreakTest {
    public static void main(String[] args){
        for(int i = 0;i<5;i++){
            System.out.println("i1="+i);
            if(i==2){
                break;
            }
            System.out.println("i2="+i);
        }
        System.out.println("循环结束");
    }
}

/**输出为
 *i1=0
 *i2=0
 *i1=1
 *i2=1
 *i1=2
 *循环结束
 */

 

  break语句不仅可以结束其所在的循环,还可以直接结束其外层循环。此时需要在break后紧跟一个用于表示外层循环的标签。

例如:

 1 public class BreakTest {
 2     public static void main(String[] args){
 3         for(int i = 0;i<2;i++){
 4             System.out.println("i="+i);
 5             waiceng: //标签名可以随意指定。变迁放在哪一层循环的外面,就表示跳出哪一层的方法。
 6             for(int j = 0;j<5;j++){
 7                 System.out.println("j="+j);
 8                 for(int z = 0;z<5;z++){
 9                     System.out.println("z1="+z);
10             if(z==1){
11                 break waiceng;
12             }
13                 System.out.println("z2="+z);
14                 }
15             System.out.println("循环z的结束");
16         }
17         System.out.println("循环j的结束");
18         }
19     }
20 }
21 
22 /**输出为
23  *i=0
24  *j=0
25  *z1=0
26  *z2=0
27  *z1=1
28  *循环j的结束
29  *i=1
30  *j=0
31  *z1=0
32  *z2=0
33  *z1=1
34  *循环j的结束
35  */

   3.5、使用continue忽略本次循环剩下的语句。continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环。continue同break一样,可以在后面紧跟一个标签,用于直接跳过标签所标识循环的当次循环的剩下的语句,重新开始下一次循环。

例如:

public class BreakTest {
    public static void main(String[] args){
        for(int i = 0;i<3;i++){
            System.out.println("i="+i);
            if(i == 1){
                continue;//忽略本次循环剩下的语句。即当i=1时,下面的的打印语句将不执行。
            }
        System.out.println("continue后面的语句");
        }
    }
}

/**输出为
 *i=0
 *continue后面的语句
 *i=1
 *i=2
 *continue后面的语句
 */

  3.6、return关键字并不是专门用于结束循环的,return的功能是结束一个方法。与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。

二、数组类型

  java要求数组中所有元素具有相同的数据类型。因此,一个数组里只能存储一种数据类型的数据

  1、定义数组:当使用数组定义一个变量时,仅仅表示定义了一个引用变量(也就是定义了一个指针),这个引用变量还未只想任何有效的内存,因此定义数组时不能指定数组的长度。而且这个数组也不能使用,只有对数组进行初始化后才能使用

   type[] arrayName;

   type arrayName[]; //通常建议用第一种定义方法。

  2、数组的初始化:

   arrayName = new type[]{element1,element2,...}; //静态初始化,只能指定数组元素的初始值,不能指定数组长度。

   arrayName = new type[length]; //动态初始化,只需指定数组的长度length即可。

   动态初始化时,系统将会为数组元素分配初始值。如下:

    a、数组元素的类型是基本类型中的整数类型(byte、short、int、long),则数组元素的值是0。

    b、浮点类型(float、double),则数组元素的值是0。

    c、字符类型(char),则数组元素的值是‘\u0000’。

    d、布尔类型(boolean),则数组元素是false。

    e、引用类型(类、接口、数组),则数组元素是null。

  3、使用数组:java中数组索引是从0开始的,即第一个数组元素的索引值是0,最后一个数组元素的索引值为数组长度减1。

     得到数组长度:arrayName.length

     输出数组的每个元素:

 1 //方法1 for循环
 2 
 3 for (int i = 0;1<arrayName.length;i++){
 4   System.out.println(arrayName[i]);  
 5 }
 6 
 7 //方法2 foreach循环
 8 
 9 public class ForeachTest {
10     public static void main(String[] args){
11         String[] hostName = new String[3];
12         hostName[0] = "张三";
13         hostName[1] = "李四";
14         hostName[2] = "王五";
15         for(String name:hostName){
16             System.out.println(name);
17         }
18     }
19 }

  当使用foreach来迭代访问数组元素时,foreach中循环变量相当于一个临时变量,系统会把数组元素依次赋给这个临时变量,而这个临时变量并不是数组元素,它只是保存了数组元素的值。如果希望改变数组元素的值,则不能使用这个foreach循环

  4、(没有)多维数组

   java语言里的数组类型是引用类型,因此数组变量其实是一个引用,这个引用指向真实的数组内存。数组元素的类型也可以是引用,如果数组元素的引用再次指向真实的数组内存,这种情形看上去很想多维数组。

   二维数组语法:type[][] arrayName; //第一个中括号是引用类型,初始值是null。

   二维数组实际上完全可以当成一维数组使用,使用new type[length][]初始化这个数组后,相当于定义了length个type[]类型(数组类型)的变量,因此必须再次初始化这些数组

posted on 2016-09-17 16:40  追雨的BigMouse  阅读(128)  评论(0)    收藏  举报