这里简单讲解一下基本的流程控制语句,选择,循环等和其他语言一样,这里不多做介绍,讲一些容易出错的
一、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);
}
}
结果:
1
2
3
4
5
其实简单一句话,就是对输入的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。