众所周知,Java的选择结构和循环结构是允许单行不加大括号的 有的资料上会提倡这种模式,因为可以缩减代码的行数 也有的不提倡,认为可能会在后期添加行数很麻烦以及出现意外的错误 下面略举3例加以阐释:
“空悬”的else引发问题
public class Test1 {
public static void main(String[] args) {
int x = 300;
if (x > 100)
System.out.println("大于100");
if (x > 400)
System.out.println("大于400");
else
System.out.println("??");
}
}
这个程序的输出是什么? 你可能会认为是:
大于100
因为会执行外层if不执行内层if,else的缩进对应着外层if… 很抱歉,真实的输出是这样的:
大于100
??
这里就涉及到一个“空悬”的else的“归属问题”了 Java不同于Python,Python是识别缩进的,Java认的是大括号,说的不好听点就是你不缩进写的一坨也许也没事(只要你和你的小伙伴忍受得了) 在没有指示的情况下,JVM会认为else对应着内层的if,所以就得到了“异常”的输出
“空悬”的if引发问题
public class Test2 {
public static void main(String[] args) {
int x = 200;
if (x > 100)
x++;
else
x--;
System.out.println(x);
}
}
这个程序特别简单,肯定没问题,输出:
201
但是如果我后续加代码成这样:
public class Test2 {
public static void main(String[] args) {
int x = 200;
if (x > 100)
x++;
if (x > 300)
x++;
else
x--;
System.out.println(x);
}
}
输出结果:
200
其实就是说else归属于第2个if了,先x++,后x–,就保持了200
这些问题就是说if后接单行代码,后续维护时没注意产生问题
打分号但不换行以为还是一行
public class Test3 {
public static void main(String[] args) {
int x = 3;
if (x > 2)
if (x > 3)
x++; x+=2;
System.out.println(x);
}
}
输出结果:
5
这是因为Java以;作为换行符,可能初学者认为自己没换行,实际上程序已经默认你换行了 x+=2;语句的条件已经不在if内了,所以会被执行
举的例子简单的不能再简单了,但是在实际的开发中如果有一点点的错误都可能产生很大的问题,我就体会过,所以建议读者养成良好的习惯,不应该省略的就不要省略 之前看网上写的:程序员总是喜欢假设他们自己是对的 人都希望自己是对的,这点我不否认,但是如果你是一个认真负责的人,就应该做好最坏的假设不是吗? 记得之前看有的学了半年多编程的人写的代码,一个简简单单的问月份算价格的程序 居然有这样的结构:
......
if(x>=4&&x
关注
打赏
- 【Linux】Ubuntu20.04安装和卸载MySQL8
- 【Linux】Ubuntu 20.04 报错 curl: (23) Failure writing output to destination 的解决方法
- 【Java】JUnit 4.13.2 警告 ‘assertEquals(double, double)‘ is deprecated 的解决方法
- 【JavaScript】处理 @parcel/transformer-js: Browser scripts cannot have imports or exports.
- 【Node.js】Windows环境安装配置NVM和Node.js
- 【Python】处理TypeError: Plain typing.NoReturn is not valid as type argument
- 【Python】Matplotlib可视化50例
- 【C语言】C语言修改MySQL数据库
- 【Java】从默认包导入类和对象报错的解决方法
- 【Java】panel.getGraphics()报错空指针异常的解决方法