自学Java28

78 阅读2分钟

引言

  • 在记录自己自学java过程中,首先声明关于学习顺序可能并不很科学,即使我也是通过一些公开的资料来进行学习,但不会是完全无基础的教学,更像是比对着python(本人平时编程使用的是python)比较实现方法的异同学习,请酌情参考学习,有理解不对的地方欢迎指正。

java-流程控制 5

for循环使用的一些细节

使用for循环时,尽量不要在循环体内修改计数器,因为在循环体中修改计数器常常导致莫名其妙的逻辑错误,这种很简单的用法却出现莫名其妙的报错有点难解决却可以很好避免;

  • (比如我写shell的时候,总是莫名其妙用其他软件打开复制过来粘贴到一个新建的shell文件就报错无法使用了,如果不用显示格式的工具比对很难找出原因,因为显示的是一样的,但是就是不能执行)
public class Main {
    public static void main(String[] args) {
        int[] ns = { 1, 4, 9, 16, 25 };
        for (int i=0; i<ns.length; i++) {
            System.out.println(ns[i]);
            i = i + 1;
        }
    }
}

  • 虽然不会报错,但是既然在()内已经定义好了循环后更新计数器,就不要在循环体内继续定义,for循环既然集成到小括号内就是为了规范且简介明了美观,我们可以不使用i++,可以写成i=i+2来实现上述代码的功能

使用for循环时,计数器变量i要尽量定义在for循环中:

int[] ns = { 1, 4, 9, 16, 25 };
int i;
for (i=0; i<ns.length; i++) {
    System.out.println(ns[i]);
}
// 仍然可以使用i
int n = i;
  • 如上述代码,退出for循环后,变量i仍然可以被访问,这就破坏了变量应该把访问范围缩到最小的原则,而且个人认为这个i本就应该用于循环,循环结束就没有了存在的意义,所以不应该在循环外面定义

简写

  • for循环还可以缺少初始化语句、循环条件和每次循环更新语句,注意在某些场景下可以使用,但是不推荐,万一出问题不好排查
// 不设置结束条件:
for (int i=0; ; i++) {
    ...
}
// 不设置结束条件和更新语句:
for (int i=0; ;) {
    ...
}
// 什么都不设置:
for (;;) {
    ...
}