java学习笔记4——流程控制语句

来源:互联网 发布:mac 在线重装系统 编辑:程序博客网 时间:2024/04/30 03:32

这里简单讲解一下基本的流程控制语句,选择,循环等和其他语言一样,这里不多做介绍,讲一些容易出错的

一、for循环

  在java中,除了for,还有一个增强型for循环,这是jdk5.0增加的新特性,下面介绍用法。foreach的主要格式为:

for(元素类型T  每次循环元素的名称O : 循环对象){   //对O进行操作}

  此类方法拥有不错的性能,主要是用在遍历数组、集合上,但是和for还是有点区别的。所有的foreach都可以转化为for语句,但是for语句并不是所有的都可以转化为foreach的格式。其实本质上foreach还是一个for循环。还是直接来看代码:

public static void main(String[] args) {    String[] test = { "1", "2", "3", "4", "5" };    for (String result : test) {      System.out.println(result);    }  }

结果:

12345

  其实简单一句话,就是对输入的test进行遍历,然后做相应操作,result就是每一次遍历test里面的元素。result前面的就是元素的类型,可以是基本数据类型,也可以是引用数据类型。

Attention:

  在循环遍历的过程中,不能对数组进行增加删除操作,不然就会产生java.util.ConcurrentModificationException。原因简单说一下,就是foreach的内部实现是以iterator迭代器实现的,在开始前会有一个count的大小统计,如果更改了遍历元素的size,会使得count的值发生变化,从而报错。有兴趣的同学可以去看一些foreach的具体实现以及iterator的源码。还有一个很有意思的就是这个错误也不是一定会出现的,这就留给同学们自己去发现了,这里不做阐述。
  个人建议,如果要遍历数组或者集合,还是直接用iterator比较好。

二、三目运算符

  java中的三目运算符,一般形式为

  表达式1?表达式2:表达式3;

  化成if-else语句的话,就是:

if(表达式1)    表达式2;else    表达式3;

  看到这里,其实这个三目表达式很好理解,就是一个简化的选择语句嘛,那为什么要拿出来呢,因为他的结合方向。
  在面试或者笔试的时候我们会遇到这样的题目:

  public static void main(String[] args) {    int a = 1, b = 2, i = 3, j = 4;    System.out.println(a > b ? a : i > j ? i : j); //答案是4  }

  一看到这样的题目的时候可能会懵,不过要知道,三目运算符的结合性是从右至左,就是说,在遇到相同优先级的运算中(java中三目运算符的优先级相同的只有它自己),最右边的先进行运算,然后再是左边的,所以,其实a > b ? a : i > j ? i : j也可以看做是a > b ? a :( i > j ? i : j)。所以,上题的答案是4,在实际开发中,为了避免这种会让自己懵的情况发生,要善于利用括号!

  这里再看一道题目,或许在笔试的时候会碰到:

  public static void main(String[] args) {    int a = 1, b = 1;    System.out.println(--a == b++ ? a++ : b++);//答案是2    int m = 1, n = 0;    System.out.println(--m == n++ ? m++ : n++);//答案是0  }

总结:

  仔细推敲一下,可以发现==,++,三目的优先级应该是++ > == > 三目,所以第一个运算判断条件应该是(a=0)是否和b相等,不相等那就是(b++),这时候要注意++的运算,是先使用后自加,所以输出b,那为什么是2呢,因为在前面判断的时候b++了一次,所以为2。看了解释还迷糊的同学可以转化成if-else的语句形式,就明了了,这里不再作解释。同理分析第二个运算,可以得到答案是0。

0 0