分支结构

if条件语句

  1. if,else if,else后的代码块只有一条语句时(可以是空语句),可以省略花括号。
  2. 使用if,else时一定要先考虑小的范围。

switch分支语句

  1. switch后的控制表达式的数据类型只能是:byte,short,int,char。不能是boolean。Java7还允许是String类型。
  2. 允许省略case后的花括号。
  3. 不要忘了当一个case块写完时,以break结尾,否则将继续执行,直到遇到break或运行switch完毕才结束。

一个写法案例如下:

char a=97;
//符合条件'a'
switch (a){
    case 'a':
        System.out.println("一概窝里GIAOGIAO!");
        System.out.println("我是char类型的a");
        break;
    case 'b':
        System.out.println("我是b");
        break;
    default:
        System.out.println("我是default呜呜呜");
}

循环结构

循环语句可能包含如下四个部分:

  1. 初始化语句:一条或者多条语句,完成一些初始化操作,在循环开始前执行。
  2. 循环条件:一个布尔表达式,决定是否执行循环体。
  3. 循环体:循环的主体内容。
  4. 迭代语句:在循环条件执行之前执行,控制循环条件的变量,使之能够在合适的条件下结束循环。

while循环语句

一个简单的案例如下:

int i=1;    //初始化语句
while(i<11) {   //循环条件
    System.out.println("i="+i); //循环体
    ++i;    //迭代语句
}

此语句容易范的 错误 是: 在while()后加一个封号

do while循环语句

do while与while的区别在于:do while先执行循环体,再执行循环条件,而while是先执行循环条件,条件允许时才能执行循环体。一个简单的案例如下:

int i=1;    //初始化语句
do{
    System.out.println("i="+i); //循环体
    ++i;    //迭代语句
}while (i<11);  //循环条件

此语句容易犯的一个 错误是while()后没加封号

for循环语句

for循环的迭代语句没有和循环体放在一起,所以即使循环体中出现continue,结束本次循环,开始下次循环时,迭代语句也会被执行。所以用while或者do while循环语句的一个常见错误如下:

int i=1;    //初始化语句
do{
    System.out.println("i="+i); //循环体
    if (i == 5) {
        continue;
        //结束本次循环时,++i不会得到执行,所以i==5时,将一直等于5,造成死循环
    }
    ++i;    //迭代语句
}while (i<11);  //循环条件

一个简单的案例如下:

for (int a=0,b=1,c=2;a<10&&b<11&&c<12;a++,b++,c++){
    System.out.println("a:"+a+",b:"+b+",c:"+c);
}

Notice: for语句的括号内的两个封号是必须的,其他都可以省略。

循环控制结构

Java的循环控制有 breakcontinue 。此外, return 可以结束整个方法,也就可以算是结束一次循环。关于break和continue和return的一些注意事项如下:

  1. break是结束当前所在循环,而continue是结束本次循环,继续下次循环。
  2. break和continue都可以在循环体前写一个标识符,然后break或者continue此标识符,来达到break或者continue这个标识符所在的循环体。
  3. return是直接结束整个方法,所以当在内循环中return执行了的话,外层循环也就结束了。而break结束的循环只是当前所在的循环,当前在内循环就结束内循环,在外循环就结束外循环。

数组类型

  1. 一个数组只能存储一种数据类型的数据。
  2. 一旦数组初始化完成,其占用内存也就确定了,所以 数组长度不可变
  3. 数组也是一种数据类型,它本身是一个引用类型。
  4. 定义数组变量时,由于此变量是一个引用变量,未指向任何有效的内存空间,所以定义数组时不能定义数组的长度。

数组的初始化

  1. 静态初始化:初始化时由程序员显示定义每个数组元素的初始值,由系统决定数组的长度。(言外之意就是:不能同时指定初始值,又指定数组元素的个数)
  2. 动态初始化:初始化时由程序员显示的指定数组的长度,由系统为数组元素分配初始值。

使用静态初始化和和动态初始化的一个案例如下:

Object[] a=new Integer[]{1,2,3};	//此时将不能再指定数组元素的个数为3
Object[] b={"哈哈","嘻嘻"};	//同上,这是简化后的静态初始化
float[] c=new float[5];	//动态初始化,系统将自动给默认值,我们只需给定元素个数即可
for (int i=0;i<c.length;i++){
    //将输出5个0.0
    System.out.println(c[i]);
}

关于动态初始化时,系统分配初始值的规律如下:

  • 类型为byte,short,int,long,默认为0
  • 类型为float,double,默认为0.0
  • 类型为char,默认为’\u0000'
  • 类型为boolean,默认为false
  • 类型时引用类型,默认为null

此外,关于高维数组,一个简单的案例如下:

String[][] a=new String[3][3];
String[][] b=new String[][]{new String[3],new String[]{"哈哈","嘻嘻","呵呵","呜呜"}};
String[][] c={new String[3],new String[]{"哈哈","嘻嘻","呵呵","呜呜"}};

最后,常用java.util.Arrays工具类操作数组(排序,查找,打印等操作)。