「java面试ifelse」java面试题高级工程师
本篇文章给大家谈谈java面试ifelse,以及java面试题高级工程师对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
Java面试题if语句请教讲解?
答案就是B
int m=0,n=3; --初始化m为0 n也为0
if(m0) --判断m是否大于0
if(n2) --判断n是否大于2
System.out.println("A"); --条件满足打印“A”
else
System.out.println("B");--条件不满足打印“B”
}
java中if,elseif判断和双if判断一样吗?
不能,两者是不一样的。两个if判断的话那么这两个if块里面的语句都有可能被执行,但是else
if这种语句只能是一个执行。假设现在有个int
a
=
10;如果使用else
if判断,那么if(a5){
System.out.println("大于5");
}else
if(a0){
System.out.println("小于0");
}
如果说if语句的条件成立了,那么else
if就不会得到执行。但是如果是两个if,那么两个语句块都会被执行。
面试官:你写的if、else太多啦
在代码编写初期,我们写出来的代码,脉络清晰,结构简单。可随着bug或者新需求的出现,状态变得越来越多,只能不停地加else来区分,久而久之,判断的次数越来越多,嵌套的层数也越来越深,变得难以维护。
当我们狠下心来决定改造时,有哪些方法能够优化if else结构呢?
优化前:
优化后:
这个做法,将可以return的状态提到if中,直接干掉了else!
优化前:
优化后:
这种方式局限性比较大,但对于那些依据状态直接返回某个值的情况非常适用,优化后代码非常简洁。如果三目运算符中还嵌套一层三目运算符,建议就不要使用这种方式了。
我们在代码中,经常需要判断某个对象是否为null,不为null后才会进行接下来的操作,好在java8为我们提供了Optional类。
优化前:
优化后:
Optional让非空校验更加有优雅,代码层面减少了if判断,其实Optional在底层为我们封装好了if null判断而已。
优化前:
同样,我们可以借鉴方式一提前return,来代替else
如果这里面的情况很多,我们可能依然要判断多次,那我们用switch改写。
优化后:
如果单从效率来看,之前的时间复杂度为O(n),switch的复杂度为O(1),本质上swicth是通过比对String的哈希码来实现的。
如果上一例中的student、teacher是常量的话,最好是定义在枚举里。
最后这样调用即可:
表驱动法是指我们可以将信息存在于表中,从表中取,而不必用if else逻辑去寻找,大可以将这里的“表”理解为一种容器。
例如我们可以将每月的天数存在数组中,需要时,直接从数组中获取,而不是用if else输出。
或者依据不同的字符串,执行不同的处理逻辑。if else版本如下:
在这种情况下,使用表驱动法后,可以让Student、Teacher等类实现某一个共同的接口,在实现方法里,书写各自的逻辑。然后利用Spring强大的自动注入,会注入到Map组件名称,组件实例的map里,之后直接根据组件名称来获取到对应的实例,最后调用各自的逻辑。
这个例子可以先异步到我的另外一篇文章【SpringBoot】使用不同的策略动态地调用某个接口的实现类
首先给定以下的一个场景,传入一个职业,输出职业的主要工作
一般我们会这么写:
那么,每增加一种职业,就会增加一个if else判断,代码可读性差,日后难以维护。
现在使用策略模式+工厂模式来改造它。
职业接口:
实现类:
工厂类:
优化后:
之后每增加一种职业,只要实现Profession接口就好,并在ProfessionFactory中注册自己。使用策略模式+工厂模式,再也不需要为日益增长的if else头疼了。
当然,这里的key值,可以设置为常量。
过多的if else严重降低可读性与可维护性,所以在一开始,就要依据实际情况,灵活地选择处理方式。
关于java面试ifelse和java面试题高级工程师的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。