首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

对复杂if-else代码块的优化方案

可能是最高频的代码关键字,毕竟,这也比较符合人们二维思考问题的方式,试想大部分问题的答案都是只有两个维度,要么true,要么false,那么通过if-else的方式是再好不过了。...当然,if-else固然好,但是在代码中过多的使用,或者反复的嵌套使用,那样就不好了。 前几天看到了下面这张图,固然这张图比较夸张,但是也说明了,多重嵌套的if-else的不可取之处。 ?...对象 }else if(in.readInt() == 5) { //转换为BulletNew对象 } 代码结构如上所示,现在需要在channel中对传入的第一个int字段进行判断,根据这个字段的值...责任链模式的链实际上是一个list对象,如果需要进入下一个嵌套,那么此处就不是写一个新的if-else,而是将这个新的if-else封装为一个对象,写在代码里面。...反正不难看出,对于if-else的处理,实际上有很多方式,但是我们需要注意的是避免对程序的过度设计,这样会造成代码的可读性变差。

1K20

代码重构:用工厂+策略模式优化过多的if else代码块

在工作中优化了一段冗余的if else代码块: 假如写一个针对员工上班不遵守制度做相应惩罚的程序,比如,上班迟到:罚100;上班睡觉:罚1000;上班早退:警告;上班玩游戏:严重警告;上班谈恋爱:开除等...("开除"); } } } 可以看到,每增加一种情况都要增加一个if else判断,这样会造成这段代码非常长,可读性差、不易维护。...下面就用静态工厂+策略模式来重构这段代码(对于静态工厂模式和策略模式不知道的同学请自行百度哈 先说说思路:1、定义一个处罚的接口 ,包含一个执行处罚的方法       2、每一种情况的处罚都抽象成一个具体处罚类并继承处罚接口...执行处罚逻辑 punish.exePunish(); } } 重构后的处罚逻辑简单、清晰,后续新增一种情况,只需定义一个相应的类即可,根本不需要修改处罚逻辑,完全解耦合,这大大提高了代码的可读性和可维护性...不过,运用静态工厂+策略模式,也存在弊端,那就是会增加很多类;但是,当每种情况的逻辑代码很多、很复杂的时候,那么这个弊端就可以忽略不计,其优势就完全展示出来了。

56021
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    静态代码块和非静态代码块区别

    静态代码块在第一次创建对象的时候执行一次,之后再也不执行。 非静态代码块每创建一次对象就执行一次。...("静态代码块"); } { System.out.println("非静态代码块"); } } public class TestStatic{ public...非静态代码块 构造代码块 ==========分隔符================ 非静态代码块 构造代码块 当调用一个类里面的静态方法的时候,静态代码块也会执行 例子 class...("测试静态代码块会不会执行"); } static { System.out.println("静态代码块"); } { System.out.println...Cat.f(); } } 执行结果 静态代码块 测试静态代码块会不会执行 注意程序的唯一入口main方法也是静态方法 它同样也遵循静态方法的规则,所以它由系统在创建对象之前就调用.

    1.2K50

    Java中静态代码块和构造代码块

    直接在类中定义且没有加static关键字的代码块称为{}构造代码块。     构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。...由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。 注意: 静态代码块不能存在于任何方法体内。 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。...普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”*/ public class Test { public static void main(String[]...第二构造块 构造方法 第一代码块 第二构造块 构造方法 第一代码块 第二构造块 构造方法 */ 静态代码块 /*静态代码块:在java中使用static关键字声明的代码块。...静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。

    1.2K10

    (转) Java 静态代码块和非静态代码块

    参考:http://uule.iteye.com/blog/1558891 Java中的静态代码块是在虚拟机加载类的时候,就执行的,而且只执行一次。...如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。 非静态代码块是在类new一个实例的时候执行,而且是每次new对象实例都会执行。...代码的执行顺序 主调类的静态代码块 对象父类的静态代码块 对象的静态代码块 对象父类的非静态代码块 对象父类的构造函数 对象的非静态代码块 对象的构造函数 示例代码 public class StaticBlockTest1...{ //主调类的非静态代码块 { System.out.println("StaticBlockTest1 not static block"); }...Parent static block //父类的静态代码块 Children static block //子类的静态代码块 Parent not static

    1.1K10

    使用PowerMockito如何阻止静态代码块的运行

    使用PowerMockito如何阻止静态代码块的运行一、前言在我进行单元测试mock静态类的时候,突然出现了这个异常我就很懵逼啊,无奈只能一步一步的进去查找问题结果发现问题出现在静态类当中,那是肯定的,...我是mock了这个使用到静态方法的地方才报错的二、简易代码复现首先,是我们的静态类package com.banmoon.utils;​import cn.hutool.core.util.RandomUtil...PowerMockitoUtil.class); when(PowerMockitoUtil.staticFinalMethod()).thenReturn("mock");​ // 运行测试...PowerMockitoUtil.java,当中的静态代码块虽然只是我的模拟。...但它在正常的容器下运行就是正常且必须的那么我们就得想办法绕过去了,正好PowerMockito提供了一个注解,可以帮助我们取消静态代码块的执行@SuppressStaticInitializationFor

    27910

    synchronized(修饰方法和代码块)

    synchronized(修饰方法和代码块) 1. 含义 synchronized 是同步锁,用来实现互斥同步。...在 Java 中,关键字 synchronized 可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块(主要是对方法或者代码块中存在共享数据的操作)。...而需要同步的代码又只有一小部分,如果直接对整个方法进行同步操作,可能会得不偿失,此时我们可以使用同步代码块的方法对需要同步的代码进行包裹,这样就无需对整个方法进行同步操作了。...如果同一个线程再次请求这个锁,计数将递增;每次占用线程退出同步块,计数器值将递减。直到计数器为0,锁被释放。 应用 synchronized 和 ReentrantLock 都是可重入锁。...ReentrantLock 表现为 API 层面的互斥锁(lock() 和 unlock() 方法配合 try/finally 语句块来完成),synchronized 表现为原生语法层面的互斥锁。

    3.6K30

    自己动手写编译器:实现else语句块的中间代码生成

    } }` 我们在代码中增加了else语句块,我们看看完成本节代码后的执行结果: 从结果看,e=2对应if大括号里面的代码,e=3对应else部分代码,与前面不同的是,编译器在实现if里面代码后...gen函数,它首先执行s.xpr.Jumping, e.stmt1.Gen生成条件判断语句和if成立时语句块的中间代码,最重要的是它在if语句块里面的代码完成生成后加入一条goto语句,这个goto语句的作用是越过...很显然当if语句判断成立后,我们执行了if内部代码就肯定不能再执行else部分代码,所以在if内部语句块的后面加上goto越过else部分指令是合理的。...里面包含的代码块 err = s.matchLexeme("}") if err !...else关键字的解析,我们解析完if部分后,接着判断是否有else关键字跟随其后,如果有我们则对else内部代码调用stmt来进行解析,完成上面代码后运行起来就能得到相应结果。

    44110

    改善代码块折叠和选中功能

    重写了 Hugo NexT 主题中有关于代码块渲染的所有代码,修复了拷贝代码内容时末尾出现换行和其他问题,同时也增加了代码块的折叠和展开功能,让阅读的体验变得更好。...对于技术类的分享文章而言,或多或少会需要使用到代码块的功能,Hugo NexT主题中默认也是支持代码块的展示,只不过无法支持代码块进行折叠和展开的操作,且在代码选中时的样式与背景也不太容易区分,同时也还发现其他的一些小问题...,那么此刻便是把它们全都整合到一起进行优化。...本以为只是需要给代码块增加个点击事件监听,然后进行相应的展开或折叠操作,但发现定位这个代码块的元素有些问题,原因是受限于之前实现代码块渲染功能时,使用的是内嵌入的样式来支持的,而Hugo生成的代码又是比较的混乱...警告 发现了很多网站的代码复制都会在末尾出现换行,这个还是有一定的风险的,特别是对于在系统终端下执行命令,万一复制的代码是有缺陷的话,而这个换行又会让复制的代码直接运行,很有可能会带来不可预知的风险,大家还是要对代码复制引起重视的

    6110

    static静态代码块加载和执行

    静态代码块,非静态代码块,无参构造,有参构造,这些代码片段分别在什么时候加载执行?...package com.java4all.test10; public class Father { static { System.out.println("father的静态代码块...son的静态代码块 father的非静态代码块 father的构造方法 son的非静态代码块 son的构造方法 创建son对象后 4.如果父类没有无参构造,只有有参构造 这种情况,子类需要在构造方法中显示的调用父类的有参构造...son的静态代码块 father的非静态代码块 father的带参构造方法 son的非静态代码块 son的构造方法 创建son对象后 5.如果父类没有无参构造,也没有有参构造 子类的构造只管自己就好,...6.总结 总的来说,按照如下的大顺序调用: 父类静态代码块 子类静态代码块 父类非静态代码块 父类构造函数 子类非静态代码块 子类构造函数

    58320

    Python if...else的语法和执行流程【代码详细】

    一、if...else语法 作用:条件成立执行if下方的代码,条件不成立执行else下方的代码。...if 条件 条件成立执行的代码1 条件成立执行的代码2     ...... else: 条件不成立执行的代码1 条件不成立执行的代码2     .........二、实用版:网吧上网 age = int(input('请输入您的年龄:')) if age >= 18: print(f'您的年龄是{age},已经成年,可以上网') else: print(f'...age = int(input('请输入您的年龄:')) if age >= 18: print(f'您的年龄是{age},已经成年,可以上网') else: print(f'您的年龄是{age},...我们输入年龄,输入一个大于18岁或和一个小于18岁的,当输入大于18的时候,按住Step Over单步调试看代码执行顺序,当输入小于18的时候重复上面的单步调试来观察代码执行顺序。

    51820

    静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑

    目录 前言 继承案例 case1:父类和子类有同名同类型的属性时 case2:父类和子类有同名但不同类型的属性时 case3:下面代码输出什么?...变种面试题 原因: 冷知识 case4:子类和父类有`同名同类型`的`静态`变量的时候 case5:静态代码块属于类的,并且优先于main方法执行(有难度) 注解对执行顺序的影响 继续补充:子类默认调用...所以你调用getAge()方法返回的100%是40喽 case2:父类和子类有同名但不同类型的属性时 结论同上。 case3:下面代码输出什么?...静态变量从上到下初始化,而st变量还没初始化完呢,所以b此时值为0 执行紧跟着的静态代码块。...(看到没,这个时候b变量的赋值语句还没有执行哦~~~) 而对象初始化的顺序为:成员变量 -> 普通代码块 -> 构造函数,因此这一波过后:a=110了。

    97750

    python中类的继承和类代码块

    ---- 本节知识视频教程 一、类代码块 在定义类的时候,使用了冒号: 而这个冒号在python中的表示一个代码块的开始。 代码块的读取默认是从上到下的,类代码块中的代码同样是从上到下读取的。...类代码块使用注意点: 1.实例化一个类后,如果在方法外写的代码会被直接运行。 2.类中写的变量名称,自动会被认为类的属性,这个属性可以被该类的方法调用。...二、类的继承 继承:子类可以继承父类的方法和属性。...继承的代码定义方式: Class 父类名称: 父类成员 Class 子类名称(父类名称):#这里体现了继承的定义 子类成员 注意:子类继承父类后,我们可以直接实例化子类,那么父类中的属性和方法都可以被子类调用...三、总结强调 1.类代码块,可以通过类的实例化就可以输出类中代码的效果,主要理解代码块的读取顺序。 2.类的继承。掌握类继承的定义以及类的调用方法,继承了哪些。

    1.8K20

    【小家java】类中静态代码块、构造代码块、静态变量、成员变量执行顺序和继承逻辑

    如果StaticDemo1没有new或者静态方法没有调用,静态代码块是不会被执行的哦,只有加载了才会执行,并且只执行一次 static块真正的执行时机。...如果了解JVM原理,我们知道,一个类的运行分为以下步骤:static代码块真正执行时机 下面我们看看执行static块的几种情况: 1、第一次new A()的过程会打印"";因为这个过程包括了初始化...不初始化则不会执行static块。 最后,附上两张图,大家可以明显发发现一些端倪,希望对大家能有记忆作用哈: 图一:构造代码块是在初始化对象属性(成员变量)之前执行的 ?...我们在做一些中间件想和spring一起启动,可以放在这里启动。比如获取到ApplicationContext上下文 onApplicationEvent属于应用层的事件,最后被执行,很容易理解。...我觉得脑子里应该浮现出一个这样的知识点: Java中赋值顺序: 1、父类的静态变量赋值 2、自身的静态变量赋值 3、父类成员变量赋值和父类块赋值 4、父类构造函数赋值 5、自身成员变量赋值和自身块赋值

    1.5K20

    ChatGPT协助我完成博客代码块添加复制代码和显示代码语言功能

    最近对博客做了一些改动,比如重新展示了文章页面的文档表单导航,风格参考了 vitepress 的显示效果,同时也给文章页面的代码块添加了复制代码和显示代码语言的功能,参考的显示效果是 ChatGPT 网页输出...需求分析 我的需求其实很明确,我需要给我的文章代码块添加复制功能,还有就是能显示代码块里面的语言类型,这两个功能在很多开源博客里面都有,比如 vitepress 里面,还有 ChatGPT 的输出代码块里面也有...在代码块上方新增的 div 标签里面再添加一个 span 标签,靠左显示,这里需要显示代码块的语言。...// 将新的 pre 元素和复制按钮添加到新的 div 元素中 wrapper.append(pre, copyButton); // 将新的 div 元素添加到代码块中 $(this...TocExtension(slugify=slugify), ]) 这个里面的 markdown.extensions.codehilite 扩展就是用来渲染和高亮代码块的

    1.6K10

    使用 Golang 和 Docker 运行 Python 代码

    本篇文章聊聊如何使用 Golang 来运行 Python 代码,用 Python 现成软件包来偷个懒儿,来少写一些代码。 写在前面 最近折腾了一些“陈年项目”,不少都是使用 Python 实现的。...而我在折腾的项目的代码主要是使用 Golang 实现的。改写这些项目中的基础逻辑并不麻烦,借助 ChatGPT ,都是分分钟的事情。...完整代码开源在 soulteary/docker-python-in-go,你可以自取。 在折腾之前,我们先聊聊原理和场景限制。...我们有更好的方案,直接基于 Python 和 Golang 的官方提供的镜像,来制作构建环境和运行环境,让 Docker 容器既小巧又可靠。 编程实战 好了,前置的相关知识,到这里就了解的差不多了。...Xavier de la Vega III (Doc Vega)").as_dict()) 将上面的代码保存为 app.py,然后使用 python app.py 执行这个程序,验证程序能够正常运行。

    59620

    和开发一起写代码,让测试左移起来

    我这里我想说的是在开发写代码的时候,我们也开始写用例级别代码,在开发定义了界面布局后,我们就可以完善具体代码,待开发提测时,我们就可以运行我们的用例来进行测试了。如何才能做到这一点呢?...,这两个在整个命令的运行周期内只在开始和结束的地方执行一次。...具体实现的代码我先不详细解释,我们先来看看使用这套框架后,之前实现同样功能代码写成了什么样子。 老代码 ? 新代码 ?...当然和之前的不同就是里面也借鉴了关键字驱动的思路,有兴趣可以看看代码。...上面的图是不是非常直观,当我们的用例出现异常错误的时候,直接通过log和日志即可定位到问题的所在。测试结果最终对接了内部的持续集成平台和结果展示平台后是这个样子: ?

    1.1K70
    领券