在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时)。