java三大控制结构
顺序结构
不多说,就是从头到尾的执行,
分支结构
选择分支
- if else
面试题:if else一般不建议超过三层,否则会严重降低代码的可读性,怎么降低嵌套次数? - 把接口分为外部和内部接口,所有空值判断放在外部接口完成;而内部接口传入的变量由外部接口保证不为空,从而减少空值判断。
- 利用多态,把业务判断消除,各子类分别关注自己的实现,并实现子类的创建方法,避免用户了解过多的类。
- 把分支状态信息预先缓存在Map里,直接get获取具体值,消除分支。
参考链接(https://blog.youkuaiyun.com/xiaoxiaole0313/article/details/110913961),还没有接触复杂业务,理解不是很透彻。 - if else if else if else
- switch case a: 代码块 break;
面试题: 猜输出
int i = 9;
switch (i) {
default:
System.out.println("default");
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
case 2:
System.out.println("two");
}
正确输出结果为:
解析:switch并不是顺序执行,执行顺序应该事判断case后的常量,发现没有9,然后进入default分支,执行完并没有发现break语句,那么将继续执行,直到碰见break语句。也就是只要进了分支,不碰到break,会把所有分支执行完成
- 三目运算符
用法:
int a = 10,b = 20;
int c = (b>a)? b - a:b + a;
面试题:猜输出
Object o1 = true ? new Integer(1) : new Double(2);
System.out.println(o1);
正确输出
解析:执行顺序
1, true ? new Integer(1) : new Double(2);
2,Object o1 = 赋值操作
首先三目运算符的规则是,比较基本数据类型,首先拆箱为int double,然后要求2,3表达式是同一类型,所以在编译阶段自动提升,将int类型提升到double类型,然后2,3表达式得到一个int类型的1,然后赋值给Object,此时会自动装箱为Double,输出时调用Double里重写的toString方法。
循环结构
- while
- do-while
- for
- foreach