• Java学习笔记(四):流程控制


    if语句

    if判断语句比较简单,具体有下面的几种写法:

     1 int i = 0;
     2 // if 判断
     3 if (i == 0)
     4 {
     5     // to do something
     6 }
     7 // if else 判断
     8 if (i == 1)
     9 {
    10     // to do something
    11 }
    12 else
    13 {
    14     // to do something
    15 }
    16 // if else if 判断
    17 if (i == 1)
    18 {
    19     // to do something
    20 }
    21 else if(i == 2)
    22 {
    23     // to do something
    24 }
    25 else if(i == 3)
    26 {
    27     // to do something
    28 }
    29 else
    30 {
    31     // to do something
    32 }

    使用if实现条件编译

    不同于C++和C#直接提供了条件编译功能,Java并没有提供相关的功能,但是我们可以巧妙的使用if来实现条件编译。

    我们看一下下面的代码:

    1 public class Hello {
    2     public static void main(String[] args) {
    3         if(false) {
    4             System.out.println("Hello, world!");
    5         }
    6     }
    7 }

    由于Java编译器会对代码进行优化,对于条件永远为false的语句,JAVA编译器将不会对其生成字节码。

    我们反编译一下上面的程序,结果如下:

    1 public class Hello
    2 {
    3   public static void main(String[] paramArrayOfString)
    4   {
    5   }
    6 }

    由此可见,我们可以通过这种方法来实现Java的条件编译:

     1 package org.hammerc.study;
     2 
     3 public class Main
     4 {
     5     private final boolean DEBUG = true;
     6     
     7     public static void main(String[] args)
     8     {
     9         if (DEBUG)
    10         {
    11             System.out.println("Hello, world!");
    12         }
    13     }
    14 }

    通过对DEBUG的修改来实现是否编译被if(DEBUG){}包含的代码。

    3元操作符

    我们看一下下面这个简单的条件判断代码:

    1 int a = 100, b = 0;
    2 if (a > 100)
    3 {
    4     b = 1;
    5 }
    6 else
    7 {
    8     b = 2;
    9 }

    很简单,但代码过于长了,通过3元操作符可以缩短代码,如下:

    int a = 100, b = 0;
    b = a > 100 ? 1 : 2;

    效果与上面的代码一致。

    switch语句

    我们先来看一个简单的例子:

     1 int i = 0;
     2 switch (i)
     3 {
     4     case 0:
     5         System.out.println("0");
     6     case 1:
     7         System.out.println("1");
     8         break;
     9     case 2:
    10         System.out.println("2");
    11         break;
    12     default:
    13         System.out.println("3");
    14 }

    当i=0时,会输出"0"和"1",这是因为case 0下面没有break关键字,表示不退出switch语句,当i=1和i=2时,输出"1"和"2",其他的值时输出"3"。

    switch支持的类型

    JDK1.5之前

    switch的case语句可以处理int,short,byte,char类型的值,但是不能处理long,String等类型。因为short,byte,char都会转换成int进行处理。

    JDK1.5

    新加入的枚举Enum类型也是可以作为case值的。

    JDK1.7

    添加了对String的支持,但是仍然不支持long,后面的升级中或许会添加支持。

    循环结构

    while

    while()括号中的表达式只要为true就执行其包含的代码,执行完毕再检测表达式是否还为true,是则继续执行,不是则退出循环。

    1 int i = 0;
    2 while (i < 100)
    3 {
    4     System.out.println("i: " + i);
    5     ++i;
    6 }

    会打印100条消息。

    do while

    和while相似,但是是先执行包含的代码后在检测while()括号中的表达式是否为true,是则再次执行,否则退出循环。

    1 int i = 0;
    2 do
    3 {
    4     System.out.println("i: " + i);
    5     ++i;
    6 }
    7 while(i < 100);

    也会打印100条消息。

    for

    for循环可以看做while循环的升级版,他把变量初始化,判断及每一次执行完毕要进行处理的代码都集中到一起了,如下:

    for (int i = 0; i < 100; ++i)
    {
        System.out.println("i: " + i);
    }

    效果和上面的while一致。

    for each

    JDK1.5中提供了另一种形式的for循环。借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象。

    我们先来看看使用老的方式遍历数组:

    1 int[] arr = {1, 2, 3, 4, 5};
    2 for (int i = 0; i < arr.length; i++)
    3 {
    4     int item = arr[i];
    5     System.out.println(item);
    6 }

    使用for each来遍历数组:

    1 int[] arr = {1, 2, 3, 4, 5};
    2 for (int item : arr)
    3 {
    4     System.out.println(item);
    5 }

    使用老的方式来遍历集合:

    1 String[] strings = {"A", "B", "C", "D", "E"};
    2 Collection stringList = java.util.Arrays.asList(strings);
    3 for (Iterator itr = stringList.iterator(); itr.hasNext();)
    4 {
    5     Object str = itr.next();
    6     System.out.println(str);
    7 }

    使用for each来遍历集合:

    1 String[] strings = {"A", "B", "C", "D", "E"};
    2 Collection stringList = java.util.Arrays.asList(strings);
    3 for (Object str : stringList)
    4 {
    5     System.out.println(str);
    6 }

    continue

    continue用来退出当前的循环:

    1 for (int i = 0; i < 100; i++)
    2 {
    3     if (i % 2 == 1)
    4     {
    5         continue;
    6     }
    7     System.out.println(i);
    8 }

    这个代码会过滤掉所用奇数,只打印偶数。

    break

    break用来退出整个循环:

    1 for (int i = 0; i < 100; i++)
    2 {
    3     if (i == 50)
    4     {
    5         break;
    6     }
    7     System.out.println(i);
    8 }

    循环到第50次时退出循环。

    label

    我们来考虑一种情况,如下:

     1 for (int i = 0; i < 10; i++)
     2 {
     3     System.out.println("i: " + i);
     4     for (int j = 0; j < 10; j++)
     5     {
     6         System.out.println("j: " + j);
     7         if (j == 5)
     8         {
     9             break;
    10         }
    11     }
    12 }

    我们希望当j==5时退出两个循环,但是运行时可以发现,该break只能退出嵌套在内层的循环,这时就需要引入标签了,如下:

     1 label1:
     2 for (int i = 0; i < 10; i++)
     3 {
     4     System.out.println("i: " + i);
     5     for (int j = 0; j < 10; j++)
     6     {
     7         System.out.println("j: " + j);
     8         if (j == 5)
     9         {
    10             break label1;
    11         }
    12     }
    13 }

    输出如下:

    1 i: 0
    2 j: 0
    3 j: 1
    4 j: 2
    5 j: 3
    6 j: 4
    7 j: 5

    此时的break实际上是退出了两个循环,可以看做外部循环的break,所以也不会重新进入循环了。

    我们再看看continue:

     1 label1:
     2 for (int i = 0; i < 3; i++)
     3 {
     4     System.out.println("i: " + i);
     5     for (int j = 0; j < 3; j++)
     6     {
     7         System.out.println("j: " + j);
     8         if (j == 1)
     9         {
    10             continue label1;
    11         }
    12     }
    13 }

    输出如下:

    1 i: 0
    2 j: 0
    3 j: 1
    4 i: 1
    5 j: 0
    6 j: 1
    7 i: 2
    8 j: 0
    9 j: 1

    此时的continue可以看做外部循环的continue,所以外部循环还是可以继续运行。

  • 相关阅读:
    【瞎搞】 HDU 3101 The Heart of the Country
    使用EXCEL设置“下拉菜单”选项功能
    IE, FireFox, Opera 浏览器支持CSS实现Alpha透明的方法 兼容问题
    Linux的文件权限
    刘德华夏日Fiesta演唱会上那个表演探戈舞的演员是谁啊?_百度知道
    每周日与周四《红酒屋》探戈舞会"Wine Bar" Milonga_原生态拉丁_新浪博客
    精华区文章阅读
    探戈
    探戈
    TangoWalk小组课程与优惠(20131208更新) | TangoWalk 学跳阿根廷探戈舞
  • 原文地址:https://www.cnblogs.com/hammerc/p/5200159.html
Copyright © 2020-2023  润新知