欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

Java 學(xué)習(xí)筆記15:關(guān)于web開發(fā)中,全局變量的一點想法 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當(dāng)前位置>首頁 » 新聞資訊 » 網(wǎng)站建設(shè) >

Java 學(xué)習(xí)筆記15:關(guān)于web開發(fā)中,全局變量的一點想法

發(fā)表時間:2012-12-5

發(fā)布人:葵宇科技

瀏覽次數(shù):29

在PHP開發(fā)中,我們經(jīng)常習(xí)慣于在php類中定義很多變量。這是因為php是解析型的語言,在做web開發(fā)的時候,一次解析就釋放內(nèi)存。但是Java可能就有些不同,Java是編譯型的語言,web容器運行后,類的對象就會常駐在內(nèi)存中,這個時候如果類的對象中有定義公用變量,那么就會不同的人訪問web程序?qū)е逻@個變量造成沖突。


可以看一個簡單的例子:

	public int i = 0; //定義一個初始化變量
	
	/**
	 * 列表
	 * @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); //控制臺輸出i
		return modelAndView;
	}

我們定義了一個i的變量。常規(guī)模式下PHP中,我們在瀏覽器中請求一下http://127.0.0.1:8090/test/list/地址,則控制臺會輸出1,然后再請求一次還是1。

但是在Java中,我們可以看到結(jié)果:

所以,對于Java來說,i的變量是在內(nèi)存中常駐的,如果定義在類中,那么就會變成共享變量,如果你的程序中需要用到這個共享變量,那么可能就會造成另外一個人的訪問覆蓋你這個人的i變量的結(jié)果。

那么如果,這個i在方法內(nèi)呢?方法內(nèi)是局部變量,方法調(diào)用結(jié)束就會釋放內(nèi)存,我們還是看下實例:

	/**
	 * 列表
	 * @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"); //控制臺輸出i
		return modelAndView;
	}

結(jié)果:

結(jié)果顯而易見,每次請求,局部變量都會自動釋放內(nèi)存。

我們再做web開發(fā),都會定義一些數(shù)據(jù)結(jié)構(gòu)的對象用于存儲傳遞進來的數(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;
}

其實這個類不能做成像Service一樣的單例,一旦單例了,數(shù)據(jù)就變成共享數(shù)據(jù),不同的數(shù)據(jù)進來都會互相覆蓋。

所以都是需要的地方new一個數(shù)據(jù)結(jié)構(gòu)對象,反正也是局部變量,運行完畢就釋放了。


相關(guān)案例查看更多