任何事情基础很重要,扎实的基础才能对事物掌握本质,达到融汇贯通。很多时候出现问题都是由于基础细节不太清楚。编程语言也一样,任何复杂庞大的系统剖其机理无非是那些最基本的东西组成。而一个编程语言的语法基础是万石之基,语法掌握的不够精确,很多时候就会出现意向不到的问题,而且这些问题都是非常隐蔽却不起眼的。这些问题我也经常遇到,我非科班的java学习者,没有系统的学习过该语言,所以用起来老是会有各种各样的问题,这个系列文章是我在看thinking in java 这本书时总结的一些针对我个人容易出错混淆的概念和技术点。
1. 逗号操作符
java中唯一用到逗号操作符的地方是for循环表达式,在表达式的初始化和步进控制部分,可以使用一系列的由逗号分隔的语句,并且会独立运行。
private void testFor(){
for (int i = 1 , j = i + 10 ; i < 5 ; i++ , j = i * 2){
Log.e(TAG, "i = " + i + " j = " + j);
}
}
运行结果:
i = 1 j = 11
i = 2 j = 4
i = 3 j = 6
i = 4 j = 8
在初始化部分可以定义任何数量的同类型的变量,无论是在初始化和步进部分都是顺序执行的。
2. Foreach语法
Java SE5引入了一种新的,也更简洁的for循环语法,可以作用于数组和容器,这种方式不必创建int变量区对由访问项构成的序列进行计数,foreach会自动读取每一项。
private void testForeach(){
Random random = new Random(30);
float arrF[] = new float[5];
for (int i = 0 ; i < 5 ; i++){
arrF[i] = random.nextFloat();
}
for (float f : arrF) {
Log.e(TAG, "" + f);
}
}
for语句和foreach语句在不同的情况下会有性能上的一些差异问题,后续在进阶部分中再研究学习。
3. return
return 关键词有两个方面的用途:
1.指定一个方法返回什么样的类型
2.可以退出当前的方法,并返回定义的值
private int testReturn(){
int[] numbers = {10,20,30,40,50};
for (int x : numbers) {
if(x == 30){
return 30;
}
System.out.println("x = " + x);
}
return 0;
}
运行结果:
x = 10
x = 20
这个函数会运行两次,打印x=10, 20的结果。当x=30的时候就会返回30,并结束该方法。如果if判断中始终为false,则会打印出所有值,最后返回0,结束该方法。
4. break 和 continue
再任何迭代语句的主体部分,都可以用break 和continue 控制循环的流程。其中,break用于强行退出循环,不执行循环中剩余的语句,而continue则停止执行当前的迭代,然后退出循环起始处,开始下一次迭代。另外需要注意的地方是,他们都只能终端当前循环。
break用法:
private void testBreak(){
int[] numbers = {10,20,30,40,50};
for (int x : numbers) {
if(x == 30){
break;
}
System.out.println("x = " + x);
}
}
运行结果:
x = 10
x = 20
运行的结果和return一样。 当x=30的时候break,结束循环了。
continue用法:
private void testContinue(){
int[] numbers = {10,20,30,40,50};
for (int y : numbers) {
if(y == 30){
continue;
}
System.out.println("y = " + y);
}
}
运行结果:
y = 10
y = 20
y = 40
y = 50
当x=30的时候,跳过后面的语句,继续开始下一个循环。
5. 无穷循环
有两种方式:
1. while(true){
}
2. for(; ;)