在Java中,语句的种类可分为:表达式语句声明语句控制流程语句。下面将介绍这三种语句:

表达式语句

表达式

  • 赋值表达式
  • ++或--表达式
  • 方法调用
  • 对象创建表达式
  • 等等...

一个表达式,在计算(执行)后的结果可以表示以下三种含义:

  • 一个变量
  • 一个值
  • 无(当且仅当表达式是一个对于返回值为void的函数的调用)

一个表达式的类型,指的就是它在计算后得到的结果的类型。关于表达式更多信息可参考Java语言特性规定。

表达式语句

以上四种表达式及其复合表达式,在加上分号(;)就成为了相应的表达式语句,如下所示:

// assignment statement
aValue = 8933.234;
// increment statement
aValue++;
// method invocation statement
System.out.println("Hello World!");
// object creation statement
Bicycle myBike = new Bicycle();

声明语句

  形如:

// declaration statement
double aValue = 8933.234;

控制流程语句

语句块

​ 语句块是由一对含有零条或者多条语句的大括号所组成,能够出现在任何一条单独语句能够出现的地方。

class BlockDemo {
     public static void main(String[] args) {
          boolean condition = true;
          if (condition) { // begin block 1
               System.out.println("Condition is true.");
          } // end block one
          else { // begin block 2
               System.out.println("Condition is false.");
          } // end block 2
     }
}

​ 在语句块中声明的变量,它的作用域仅限于该语句块。也就是说下面这样的代码是被允许的:

public static void main(String[] args) {
    {
        {
            int i=0;
        }
        {
            int i=0;
        }
    }

选择语句(decision-making statements )

if-then和if-then-else

if(boolean-exprenssion){
    statements;
}
//或者
if(boolean-exprenssion){
    statements;
}else{
    statements;
}

  下面的例子中出现了else if,但其并不是新的关键字,而仅仅是else后面紧跟一个新的if语句。

if(boolean-exprenssion){
    statements;
}else if(boolean-exprenssion){
    statements;
}else{
    
}

switch

​ 虽然同样是选择语句,但与if-then和if-then-else不同,switch可以有更多可能执行的路径,switch语句中的表达式类型可以是byte、short、char、int以及这四种对应的包装类型Byte、Short、Character、Integer。还可以是String类型和枚举类型。注意:当使用的是String类型的时候,表达式的值不能为null,否则会导致NullPointerException。

public class SwitchDemo {
    public static void main(String[] args) {
        int month = 8;
        String monthString;
        switch (month) {
            case 1:  monthString = "January";//这里的1就是一个case标签
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;//因为在最后了,所以实际上是没有必要加break的
        }
        System.out.println(monthString);
    }
}

​ switch语句的主体被称为switch块,在switch块中可以有一个或者多个case/default标签,switch语句首先计算表达式,然后与case标签进行匹配。break语句是为了结束switch语句,没有breakd执行完case后面的语句之后,将继续往下执行。直到遇见break或者执行完所有语句。case标签必须是常量表达式或者是枚举常量,case标签的类型对于switch表达式的类型而言,必须是可赋值的。更多可参考java语言特性规定。

循环语句

for

for (initialization; termination; increment) {
    statement(s)
}

while

while (expression) {
    statement(s)
}

do-while

do {
     statement(s)
} while (expression);

分支语句

关于标签:

    public static void main(String[] args) {
        label://后面必须紧跟循环语句
            for(;;) {
                for(;;)
                break label;
            }
    }

​ 如上面代码所示,标签就是后面根有冒号的标识符,并且标签与循环语句之间不允许插入任何其他语句,否则在使用break/continue标签的地方会编译出错。在Java里需要使用标签的理由就是想从多层循环嵌套中break或continue

break

  • 一般的break会中断并跳出当前层循环
  • 带标签的break会中断并且跳出标签所指的循环。

continue

  • 一般的continue会退回到当前层循环的开头,并继续执行。
  • 带标签的continue会到达标签所指的位置,并且继续执行紧跟在那个标签后面的循环。

return

​ return语句从当前的方法离开,回到方法被调用的地方,有两种形式,一种带返回值,一种不带返回值(声明方法返回值类型为void时)。


橡皮擦
41 声望4 粉丝