一、流程控制结构中的一些注意事项
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[]类型(数组类型)的变量,因此必须再次初始化这些数组。
浙公网安备 33010602011771号