什么是硬編碼
硬編碼是指將特定的值或參數(shù)直接寫入代碼中的做法。這樣的代碼缺乏靈活性,當(dāng)需要更改這些值或參數(shù)時(shí),開發(fā)人員必須手動(dòng)修改代碼。這種方法不僅浪費(fèi)時(shí)間,而且容易出錯(cuò),并且不利于維護(hù)。相反,通過使用配置文件或數(shù)據(jù)庫等外部資源,可以將這些值或參數(shù)作為參數(shù)傳遞給代碼,并使代碼更加靈活。
(相關(guān)資料圖)
在軟件開發(fā)中,硬編碼是一種常見的錯(cuò)誤實(shí)踐。它不僅會(huì)導(dǎo)致代碼變得難以維護(hù)和擴(kuò)展,還會(huì)降低代碼的可重用性。下面,我們將通過幾個(gè)示例來說明硬編碼的問題,并介紹如何避免它。
示例1:硬編碼的URL
假設(shè)我們正在開發(fā)一個(gè)Web應(yīng)用程序,該應(yīng)用程序需要向外部API發(fā)送HTTP請(qǐng)求以獲取數(shù)據(jù)。如果我們將API的URL硬編碼到我們的代碼中,代碼就會(huì)變得非常脆弱。任何時(shí)間,如果API的URL發(fā)生了變化,我們都必須手動(dòng)更改代碼中的URL。如果我們的代碼分散在多個(gè)地方,這個(gè)過程就會(huì)變得非常痛苦。
以下是一個(gè)使用硬編碼URL的示例:
public class ApiClient { private static final String API_URL = "https://api.example.com"; public ApiResponse callApi(String endpoint) { String url = API_URL + endpoint; // 發(fā)送HTTP請(qǐng)求并返回響應(yīng) }}
在這個(gè)例子中,API_URL 被硬編碼為字符串常量,而且作為一個(gè)私有的靜態(tài)常量,也就意味著該值在整個(gè)類中是可見的。如果我們要修改API的URL,我們需要手動(dòng)修改該常量的值。
為了避免硬編碼的URL,我們可以將URL作為參數(shù)傳遞給 callApi()
方法:
public class ApiClient { public ApiResponse callApi(String apiUrl, String endpoint) { String url = apiUrl + endpoint; // 發(fā)送HTTP請(qǐng)求并返回響應(yīng) }}
在這個(gè)例子中,我們將API_URL 變?yōu)榉椒ǖ膮?shù),并使用該參數(shù)構(gòu)建URL?,F(xiàn)在,我們可以通過將API_URL傳遞給該方法來調(diào)用該方法。
示例2:硬編碼的數(shù)據(jù)庫連接信息
在開發(fā)Web應(yīng)用程序時(shí),我們通常需要訪問數(shù)據(jù)庫以獲取或保存數(shù)據(jù)。為了訪問數(shù)據(jù)庫,我們需要連接到數(shù)據(jù)庫服務(wù)器并執(zhí)行SQL查詢。如果我們將數(shù)據(jù)庫連接信息硬編碼到代碼中,代碼就會(huì)變得非常脆弱。
以下是一個(gè)使用硬編碼數(shù)據(jù)庫連接信息的示例:
public class UserDao { private static final String DB_URL = "jdbc:mysql://localhost/mydb"; private static final String DB_USERNAME = "root"; private static final String DB_PASSWORD = "password"; public List getAllUsers() { List userList = new ArrayList<>(); try { Connection conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD); PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users"); ResultSet rs = stmt.executeQuery(); while (rs.next()) { User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setEmail(rs.getString("email")); userList.add(user); } rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } return userList; }}
在這個(gè)例子中,DB_URL、DB_USERNAME和DB_PASSWORD都被硬編碼為字符串常量。如果我們要連接到不同的數(shù)據(jù)庫或使用不同的用戶名和密碼,我們必須手動(dòng)更改這些常量的值。
為了避免硬編碼的數(shù)據(jù)庫連接信息,我們可以將這些信息存儲(chǔ)在配置文件中,并在運(yùn)行時(shí)從文件中讀取這些信息。下面是一個(gè)使用配置文件的示例:
public class UserDao { private static final String CONFIG_FILE = "/path/to/config.properties"; public List getAllUsers() { List userList = new ArrayList<>(); try { Properties props = new Properties(); props.load(new FileInputStream(CONFIG_FILE)); String url = props.getProperty("db.url"); String username = props.getProperty("db.username"); String password = props.getProperty("db.password"); Connection conn = DriverManager.getConnection(url, username, password); PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users"); ResultSet rs = stmt.executeQuery(); while (rs.next()) { User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setEmail(rs.getString("email")); userList.add(user); } rs.close(); stmt.close(); conn.close(); } catch (IOException | SQLException e) { e.printStackTrace(); } return userList; }}
在這個(gè)例子中,我們使用一個(gè)配置文件存儲(chǔ)數(shù)據(jù)庫連接信息。我們可以在運(yùn)行時(shí)讀取該文件,并從中獲取連接信息。這種方法使我們可以輕松地更改連接信息,而無需修改代碼。
關(guān)鍵詞:
- 個(gè)人護(hù)理小家電市場結(jié)構(gòu)迎變局 新興渠道規(guī)模不容小覷
- 廣州科技活動(dòng)周進(jìn)入預(yù)熱 明日正式啟動(dòng)300多場主題活動(dòng)接踵而來
- 深化重點(diǎn)領(lǐng)域信用建設(shè) 廣州正式出臺(tái)新型監(jiān)管機(jī)制實(shí)施方案
- 女童不慎掉入20米深井 18歲小姨三次下井成功營救
- 西安3個(gè)區(qū)域12月28日起每日開展全員核酸 官方提倡民眾居家健身
- 浙江樂清一核酸檢測結(jié)果異常人員 復(fù)采復(fù)檢為陰性
- 浙江本輪疫情報(bào)告確診病例490例 提倡“雙節(jié)”非必要不出省
- 西安警方通報(bào)6起涉疫違法案件
- 西安新一輪核酸篩查日檢測能力達(dá)160萬管
- 西安市累計(jì)報(bào)告本土確診病例811例
-
全球熱頭條丨【英雄之光】清明祭英雄:跨時(shí)空“重逢”
千里熱血山河,遍地英雄屹立。他們舍生忘死,用鮮血染紅旗幟,用身軀筑成圍墻;沒有人生來偉大,只是有人作出偉大犧牲;祖國不會(huì)
-
阿拉伯國家聯(lián)盟將就阿克薩清真寺沖突事件召開緊急會(huì)議 快訊
阿拉伯國家聯(lián)盟將就阿克薩清真寺沖突事件召開緊急會(huì)議
-
預(yù)售價(jià)區(qū)間43-54萬元 全新梅賽德斯-奔馳長軸距GLC SUV開啟預(yù)售
北京時(shí)間2023年3月31日,我們從官方渠道獲悉,全新梅賽德斯-奔馳長軸距GLCSUV正式在中國市場開啟預(yù)售,共推出八款車型,預(yù)售價(jià)格區(qū)間為人民幣4
-
他是內(nèi)蒙古出來的著名老戲骨,49歲再婚小妻子,50歲當(dāng)爸爸不敢老|天天即時(shí)
有生之年,欣喜相逢,點(diǎn)擊“關(guān)注”了解更多名人故事。01提起鄭曉寧的名字,或許會(huì)有人覺得陌生,但提到他出演的角色,你一定很熟悉。早一點(diǎn)的
-
基于點(diǎn)擊化學(xué)技術(shù)研發(fā)的變形抗生素可以愚弄并消滅耐藥細(xì)菌 環(huán)球快看
然而,耐藥性細(xì)菌的興起現(xiàn)在正描繪出一幅更加嚴(yán)峻的畫面,一些研究預(yù)測,到2050年,它可能會(huì)奪走多達(dá)1000萬人的生命。
-
焦點(diǎn)報(bào)道:公司年會(huì)場地布置方案_公司年會(huì)場地布置
1、為什么不找一家專業(yè)的活動(dòng)策劃公司去做呢。2、我本人就是做這個(gè)的。本文到此分享完畢,希望對(duì)大家有所幫助。
-
2023款“奧迪Q5”終于曝光,兼具實(shí)用和性價(jià)比
如今越來越多的人買車不僅僅只注重整車的大空間和實(shí)用性了,運(yùn)動(dòng)化的外觀和強(qiáng)勁的性能也是買車考量的標(biāo)準(zhǔn)。因此很多汽車品牌不僅在現(xiàn)有車型上
-
上海虛擬體育公開賽四月開幕 賽事周期長達(dá)7個(gè)月
【上海虛擬體育公開賽四月開幕】2023賽季SVS上海虛擬體育公開賽(ShanghaiVirtualSportsOp
-
為什么要過清明節(jié)?這也許是最好的回答-世界資訊
北京時(shí)間4月5日9時(shí)13分我們迎來“清明”節(jié)氣。清明,是春季的第五個(gè)節(jié)氣。農(nóng)歷書曰:“斗指丁為清明,時(shí)萬物潔顯而清明,蓋時(shí)當(dāng)氣清景明,萬物
-
七匹狼營利雙降,服裝行業(yè)靜待消費(fèi)復(fù)蘇
服裝企業(yè)年報(bào)開始陸續(xù)出爐,“夾克之王”和童裝巨頭業(yè)績都下滑了。對(duì)于今年的行業(yè)走勢(shì),企業(yè)到底怎么看?“夾克之王”七匹狼的年
X 關(guān)閉
X 關(guān)閉
西安警方完成研考安保工作 共出動(dòng)警力逾1.3萬人次
得知西安疫情防控“升級(jí)” 男子夜騎共享單車回咸陽淳化
中國醫(yī)生將任SIU主席背后:從追隨者同行者到引領(lǐng)者
海南省通報(bào)政法隊(duì)伍教育整頓成果