java對象的生命周期
1. java spring和springMVC生命周期 能簡單的說一下嘛
Bean的生命周期:
(1)實例化(必須的)構造函數構造對象
(2)裝配(可選的)為屬性賦值
(3)回調(可選的)(容器-控制類和組件-回調類)
(4)初始化(init-method=" ")
(5)就緒
(6)銷毀(destroy-method=" ")
2. 不同范圍的javabean的生命周期有什麼不同
JavaBean的生命周期存在於4中范圍之中,分別為page、request、session、application,它們通過<jsp:userBean>標簽的sope屬性進行設置,與jsp頁面中的page、request、session、application范圍相對應。
1、page 范圍:與當前頁面相對應,JavaBean的生命周期存在於一個頁面之中,當頁面關閉時javaBean被銷毀
2、request 范圍:與JSP的request生命周期相對應,JavaBean的生命周期存在於request對象之中,當request對象銷毀時JavaBean也被銷毀
3、session范圍:與JSP的session生命周期相對應,JavaBean的生命周期存在於session回話之中,當session超時或回話結束時JavaBean被銷毀
4、application范圍:與JSP的application生命周期相對應,在各用戶與伺服器之間共享,只有當伺服器關閉時JavaBean才被銷毀
當JavaBean被創建後,通過<jsp:setProperty>標簽與<jsp:getProperty>標簽調用時,將會按照page、request、session、application的順序來查找這個JavaBean實例,直到找到一個實例對象為止,如果都找不到,則拋出異常。
3. java局部內部類的生命周期是怎樣的,跟方法的生命周期有關系嗎
沒有類的生命周期和方法的生命周期這一講法。對象和變數才有生命周期,因為對象分配在堆中,它的生命周期由垃圾回收機制決定,因此是不確定的。
4. java中變數的生命周期是怎樣的
這個要從作用域開始說起。
像局部變數的作用域就是他的生命周期。
比如if ,for ,switch等等這些。
出了這個結構就銷毀了。
方法里的局部變數,在方法調用完就銷毀。
如果是類的成員變數,在類的相應的對象銷毀的時候銷毀。
上面說的是普通變數,如果是靜態變數的時候,從程序開始,到程序結束。
5. java中靜態變數和實例變數的生命周期有什麼區別
1.存儲區域不同:靜態變數存儲在靜態存儲區,普通變數存儲在堆中;
2.靜態變數與類相關,普通變數則與實例相關,說細一點:
class Demo {
public static String a;
public String b;
public static void main(String[] args) {
Demo d = new Demo();
d.a; // 警告,雖然可以通過編譯,但沒有意義
d.b; // 正確
Demo.a; // 對static變數的正確引用
Demo.b; // 錯誤
}
3.內存分配方式不同。static欄位對每個類來說都只有一份,無論你創建多少對象,該static區域都只有一份,它對於這些對象來說是共享的;而非static欄位,因為其從屬於對象,因此每有一個對象,就會為該變數申請一個存儲空間;
4.生命周期不同。從程序運行開始,static域就已經確定下來,因此在沒有創建對象之前,就可以引用該區域變數及函數,而非static域的變數及函數,必須等實例化之後才可以通過對象來調用。
5.理解了this之後,更能體會到static的含義。static方法就是沒有this的方法,這也就是為什麼在static方法中不能引用非static變數,因為該方法內沒有隱含的this,編譯器無從知道這個變數是屬於哪一個類的。
6. java中new的用法 new 出的對象或變數,的生存周期是...在類中和方法體中有何不同
對象的生命周期一般來就是看他是否沒有被任何一個引用所引用了,那他就是生命終結了。這個就是比如一些方法中定義的對象在走出大括弧有效作用范圍,或者是走出方法,或者是你把唯一的引用賦值給其他對象了,那對應的對象生命周期就到了,注意這只是說一般情況,就是這個對象的finalize方法沒有讓自己這個對象起死回生的的時候他就死了。
finalize這個方法是可以讓這個已經要死的對象重新活過來的。就是給一個對象一次反悔的機會,但是如果你放棄了那就是真的死了。
對象的生存周期就是當這個對象沒有被任何引用指向的時候,他就是孤兒了,那他就到了一個關口,如果finalize方法也不復活,那就認為他死了。關鍵是這個對象有沒有沒人認領,要是沒人認領,而且自己不找個干媽乾爸,那他就是真活到頭了。一些匿名對象是new完就立刻死了,因為匿名對象出生的目的就是之用一次就丟掉的,所以這個匿名是java所有對象里最悲劇的一個角色,用之即棄。而最尊貴的對象就是常量對象,這個是一生只伺候一個主人,也是用情專一的對象啊,一輩子就這一個。
7. java中好多東西都有生命周期的,比如session的生命周期servlet的工作原理和生命周期
session:存在於一個用戶的使用過程,你可以設定他的時限,他的最長生命周期就是瀏覽器的打開到瀏覽器的關閉。
servlet:它的作用就是一個連接橋梁的作用,相當於mvc結構中的c→control控制層,它可以獲得前台數據,並調用後台方法對數據進行處理之後再將結果發回給前台。
在容器tomcat啟動之後,servlet不會立即被訪問,除非在配置文件中加上了啟動即初始化,否則,servlet將會在第一次被訪問的時候被初始化,然後用這個初始化對象響應用戶請求,當該請求結束了,servlet將不會被銷毀,等到第二次,第三次....之後所有的請求都將是同一個servlet對象在處理,知道tomcat容器關閉,servlet被銷毀。
綜上:
session的最長生命周期存在於瀏覽器的開閉之間
servlet的最長生命周期存在於容器tomcat的開閉之間
8. java中所有的生命周期有哪些
新建-就緒-(阻塞)-運行--死亡
其中當用new 創建完一個線程對象後,該線程處於新建狀態
當線程對象調用了start()後,該線程處於就緒狀態
如果處於就緒狀態的線程獲得CPU時間片,開始執行run方法的線程執行體,該線程處於運行狀態
如果線程調用了sleep()或者調用了一個阻塞式IO方法等,該線程處於阻塞狀態
如果線程的run()執行完成或者拋出一個未捕獲的異常等原因,該線程處於死亡狀態
9. Java類的生命周期包括哪幾個階段
載入:查找並載入類的二進制數據
連接:分為三個小階段:
驗證:確保被載入的類的正確性
准備:為類的靜態變數分配內存,並將其初始 化為默認值
解析:把類中的符號引用轉換為直接引用
初始化:為類的靜態變數賦予正確的初始值
使用:又分為主動使用和被動使用。
卸載:由JVM自帶的類載入器所載入的類,在JVM的生命周期中,始終不會被卸載。但是由用戶自定義的類載入器所載入的類是可以被卸載的。
以上只是做部分說明。 要細說的話,內容還是很多的。
10. java線程的生命周期有哪些
生命周期的五種狀態
新建(new Thread)
當創建Thread類的一個實例(對象)時,此線程進入新建狀態(未被啟動)。
例如:Thread t1=new Thread();
就緒(runnable)
線程已經被啟動,正在等待被分配給CPU時間片,也就是說此時線程正在就緒隊列中排隊等候得到CPU資源。例如:t1.start();
運行(running)
線程獲得CPU資源正在執行任務(run()方法),此時除非此線程自動放棄CPU資源或者有優先順序更高的線程進入,線程將一直運行到結束。
死亡(dead)
當線程執行完畢或被其它線程殺死,線程就進入死亡狀態,這時線程不可能再進入就緒狀態等待執行。
自然終止:正常運行run()方法後終止
異常終止:調用stop()方法讓一個線程終止運行
堵塞(blocked)
由於某種原因導致正在運行的線程讓出CPU並暫停自己的執行,即進入堵塞狀態。
正在睡眠:用sleep(long t) 方法可使線程進入睡眠方式。一個睡眠著的線程在指定的時間過去可進入就緒狀態。
正在等待:調用wait()方法。(調用motify()方法回到就緒狀態)
被另一個線程所阻塞:調用suspend()方法。(調用resume()方法恢復)