知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷(xiāo)的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷(xiāo)工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 網(wǎng)站建設(shè) >
Java 學(xué)習(xí)筆記15:關(guān)于web開(kāi)發(fā)中,全局變量的一點(diǎn)想法
發(fā)表時(shí)間:2012-12-5
發(fā)布人:葵宇科技
瀏覽次數(shù):29
在PHP開(kāi)發(fā)中,我們經(jīng)常習(xí)慣于在php類(lèi)中定義很多變量。這是因?yàn)閜hp是解析型的語(yǔ)言,在做web開(kāi)發(fā)的時(shí)候,一次解析就釋放內(nèi)存。但是Java可能就有些不同,Java是編譯型的語(yǔ)言,web容器運(yùn)行后,類(lèi)的對(duì)象就會(huì)常駐在內(nèi)存中,這個(gè)時(shí)候如果類(lèi)的對(duì)象中有定義公用變量,那么就會(huì)不同的人訪問(wèn)web程序?qū)е逻@個(gè)變量造成沖突。
可以看一個(gè)簡(jiǎn)單的例子:
public int i = 0; //定義一個(gè)初始化變量 /** * 列表 * @return */ @RequestMapping(value="/list") public ModelAndView list() { ModelAndView modelAndView = new ModelAndView(); List<GuestbookDo> lists = guestbookService.findGuestbooks(); modelAndView.setViewName("test/list"); modelAndView.addObject("userList", lists); this.i++; //i自增 System.out.print(i); //控制臺(tái)輸出i return modelAndView; }
我們定義了一個(gè)i的變量。常規(guī)模式下PHP中,我們?cè)跒g覽器中請(qǐng)求一下http://127.0.0.1:8090/test/list/地址,則控制臺(tái)會(huì)輸出1,然后再請(qǐng)求一次還是1。但是在Java中,我們可以看到結(jié)果:
所以,對(duì)于Java來(lái)說(shuō),i的變量是在內(nèi)存中常駐的,如果定義在類(lèi)中,那么就會(huì)變成共享變量,如果你的程序中需要用到這個(gè)共享變量,那么可能就會(huì)造成另外一個(gè)人的訪問(wèn)覆蓋你這個(gè)人的i變量的結(jié)果。
那么如果,這個(gè)i在方法內(nèi)呢?方法內(nèi)是局部變量,方法調(diào)用結(jié)束就會(huì)釋放內(nèi)存,我們還是看下實(shí)例:
/** * 列表 * @return */ @RequestMapping(value="/list") public ModelAndView list() { ModelAndView modelAndView = new ModelAndView(); List<GuestbookDo> lists = guestbookService.findGuestbooks(); modelAndView.setViewName("test/list"); modelAndView.addObject("userList", lists); int i = 0; //局部變量 i++; //i自增 System.out.print(i + "\r\n"); //控制臺(tái)輸出i return modelAndView; }
結(jié)果:
結(jié)果顯而易見(jiàn),每次請(qǐng)求,局部變量都會(huì)自動(dòng)釋放內(nèi)存。
我們?cè)僮鰓eb開(kāi)發(fā),都會(huì)定義一些數(shù)據(jù)結(jié)構(gòu)的對(duì)象用于存儲(chǔ)傳遞進(jìn)來(lái)的數(shù)據(jù)或者要經(jīng)常使用的數(shù)據(jù),例如:
/** * guest_book 數(shù)據(jù)結(jié)構(gòu) * @author zhuli */ public class GuestbookDo { private String title; private String content; private String username; private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getDtime() { return dtime; } public void setDtime(int dtime) { this.dtime = dtime; } private int dtime; }
其實(shí)這個(gè)類(lèi)不能做成像Service一樣的單例,一旦單例了,數(shù)據(jù)就變成共享數(shù)據(jù),不同的數(shù)據(jù)進(jìn)來(lái)都會(huì)互相覆蓋。所以都是需要的地方new一個(gè)數(shù)據(jù)結(jié)構(gòu)對(duì)象,反正也是局部變量,運(yùn)行完畢就釋放了。
相關(guān)案例查看更多
相關(guān)閱讀
- painter
- 保山小程序開(kāi)發(fā)
- 國(guó)內(nèi)知名網(wǎng)站建設(shè)公司排名
- 云南小程序被騙
- 開(kāi)發(fā)制作小程序
- 報(bào)廢車(chē)回收
- 小程序開(kāi)發(fā)費(fèi)用
- 昆明小程序代建
- 云南軟件定制
- 花農(nóng)小程序
- 網(wǎng)站開(kāi)發(fā)哪家好
- 云南網(wǎng)站建設(shè)公司
- 汽車(chē)拆解系統(tǒng)
- uniapp開(kāi)發(fā)小程序
- 云南小程序開(kāi)發(fā)哪家好
- 云南網(wǎng)站優(yōu)化公司
- 云南網(wǎng)站建設(shè)一條龍
- 小程序被騙退款成功
- 買(mǎi)小程序被騙
- 報(bào)廢車(chē)拆解系統(tǒng)
- 區(qū)塊鏈
- 網(wǎng)站沒(méi)排名
- 退款
- 報(bào)廢車(chē)拆解管理系統(tǒng)
- 生成海報(bào)
- 網(wǎng)站開(kāi)發(fā)
- 做網(wǎng)站
- 云南省建設(shè)廳官方網(wǎng)站
- 昆明小程序哪家好
- 云南網(wǎng)站建設(shè)公司地址