什么是hardcode编码

什么是hardcode编码所谓 hardcode 即硬编码 1 把一个本来应该 可以 写到配置信息中的信息直接在程序代码中写死了 2 程序代码中出现了魔法值 对于情况 1 例如我们写了一个收发邮件的程序 用户名 密码 服务器地址等这些配置信息写成外部配置 在程序代码中读取配置信息 但是如果我们直接写死在程序代码中 每次改信息时都需要重新编译 且如果多处程序代码中出现了这种配置信息 修改起来也比较麻烦 这种程序不易于维护 大部分程序语言里 可以将一个固定数值定义为一个标记 然后用这个特殊标记来取代变量名称 当标记名称改变时 变


所谓hardcode,即硬编码:
1、把一个本来应该(可以)写到配置信息中的信息直接在程序代码中写死了;
2、程序代码中出现了魔法值。







对于情况1,例如我们写了一个收发邮件的程序,用户名、密码,服务器地址等这些配置信息写成外部配置,在程序代码中读取配置信息;但是如果我们直接写死在程序代码中,每次改信息时都需要重新编译,且如果多处程序代码中出现了这种配置信息,修改起来也比较麻烦…这种程序不易于维护。
大部分程序语言里,可以将一个固定数值定义为一个标记,然后用这个特殊标记来取代变量名称。当标记名称改变时,变量名不变,这样,当重新编译整个程序时,所有变量都不再是固定值,这样就更容易的实现了改变变量的目的。
尽管通过编辑器的查找替换功能也能实现整个变量名称的替换,但也有可能出现多换或者少换的情况,而且计算机程序中,任何小错误的出现都可能带来很大的问题。
最好的办法是单独为变量名划分空间,来实现这种变化。将需要改变的变量名暂时用一个定义好的标记名称来代替。

对于情况2,所谓魔法值,就是在代码中直接出现的数值,只有在数值记述的那部分代码中才能明确这个数值代表的含义。










int [] array = new int[20]; for (int i = 0; i < 20; i++){ 
    System.out.print(array[i]); } 


上面的例子中,如果数组的声明与for循环间隔较远,就很难知道for循环里面的控制条件i<20中的20是什么含义。是数组的长度还是根据需求定义的界限值呢?可能含义就比较模糊。
魔法值使代码的可读性大大下降。而且,如果同样的数值多次出现时,到底这些数值是不是带有同样的含义呢,谁也说不清楚。另一方面,如果本来应该使用相同数值的地方,一旦用错了,也很难发现。因此,我们应极力避免使用魔法数值,使用static final 定义常量或者使用enum值




static final int LENGTH_OF_ARRAY= 20; int [] array = new int[LENGTH_OF_ARRAY]; for (int i = 0; i < LENGTH_OF_ARRAY; i++){ 
    System.out.print(array[i]); } 


上述代码就使用static final 定义常量 LENGTH_OF_ARRAY= 20; 直接看for循环里面的控制条件 i < LENGTH_OF_ARRAY; 可以完全理解LENGTH_OF_ARRAY代表什么意思(当然,变量的命名也要清楚,符合规范,不然别人还是看不懂)。这里还涉及到一个问题,为什么 i = 0 语句中可以直接使用常量 0,这是因为 0 作为数组最小下标是大家的共识,这样写大家都可以理解,就没有必要再去声明它。

ps:注:使用static final 声明常量,可以方便以后维护更新。修改变量的值时只用修改一处,还不用担心修改了其他不该修改的常量。

hardcode就是固化的代码,通常情况下,都应该避免使用hardcode方法。有的代码不能写死,不然维护起来比较麻烦。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202999.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午10:49
下一篇 2026年3月19日 下午10:49


相关推荐

  • UML学习入门就这一篇文章

    1.1UML基础知识扫盲UML这三个字母的全称是UnifiedModelingLanguage,直接翻译就是统一建模语言,简单地说就是一种有特殊用途的语言。你可能会问:这明明是一种图形,为什么说是语言呢?伟大的汉字还不是从图形(象形文字)开始的吗?语言是包括文字和图形的!其实有很多内容文字是无法表达的,你见过建筑设计图纸吗?里面还不是很多图形,光用文字能表达清楚建筑设计吗?在建筑界,…

    2022年4月13日
    82
  • 超好玩的vbs代码 (恶作剧代码)

    超好玩的vbs代码 (恶作剧代码)VBScript是VisualBasicScript的简称微软公司可视化BASIC脚本版),即VisualBasic脚本语言,有时也被缩写为VBS。它是一种微软环境下的轻量级的解释型语言,它使用COM组件、WMI、WSH、ADSI访问系统中的元素,对系统进行管理。同时它又是asp动态网页默认的编程语言,配合asp内建对象和ADO对象,用户很快就能掌握访问数据库的as…

    2022年6月14日
    52
  • 官场之风流人生简介

    官场之风流人生简介简介  平民子弟意外身亡,突然成为官场豪门子弟的他,  是换一种人生,还是继续风流放纵的生涯?  纯真的妹妹、冷艳的女上司、受伤的旧情人,  本该是两个人的人生线索,从此都交错在他一人的身上…女性主角千娇百媚  说起更俗的都市文,就不得不提及女性角色,新书《官场之风流人生》的几个女性觉得就设置的很有感觉哦,小黎(妹控啊),陈丹(堂嫂),周裕(丈夫瘫痪的美女秘书长,这个

    2022年4月29日
    64
  • 腾讯元宝怎么收藏对话

    腾讯元宝怎么收藏对话

    2026年3月13日
    3
  • pycharm中彻底删除一个工程的步骤

    pycharm中彻底删除一个工程的步骤具体出现的问题是,你已经删除的工程反复出现在pycharm里面。解决步骤:1,打开pycharm,点击File——>CloseProjects(有的是CloseProjectsinCurrentWindow);2,然后会出现一个小窗口,左边一列为你的工程项目,选择想删除的项目,点击右上角的叉号;3,最后打开你想删除的工程项目的文件路径,左键点击选中该项目,然后按…

    2022年8月29日
    8
  • 简单的反编译class文件并重新编译的方法

    简单的反编译class文件并重新编译的方法在没有 java 源码的情况下 如果想修改一个 class 文件 可以通过以下步骤实现 修改前的 class 文件 1 反编译 class 文件成 java 文件 可以使用 JavaDecompil 这个工具 直接打开对应的 class 文件 然后点击菜单 File SaveSource 将文件保存成 java 文件 如下 PS JavaDecompil 工具还可以用来反编译

    2025年8月14日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号