JAVA学习笔记--初始化与清理
編寫程序時,常會由于變量沒有初始化而產生各種錯誤;用完一個元素,如果不將其占用的內存資源釋放,則會導致資源耗盡,這也很嚴重,為此,C++引入了構造器的概念,這是一個在創建對象時被自動調用的特殊方法,以保證變量被初始化。JAVA中也采用了構造器用于強制程序員進行初始化工作,同時,JAVA還提供了“垃圾回收器”,來釋放不用的內存,這里做一下簡單的筆記。
一、構造器
JAVA通過提供構造器保證每個對象都會被初始化,構造器采用與類完全相同的名稱。一個類可以有多個構造器,這些構造器的名稱都與類名一樣,但是參數列表不同,即重載;每個構造器都有一個獨一無二的參數列表。重載同樣可以應用于其他方法。
構造器是一種特殊類型的方法,因為它沒有返回值。這與返回值為空(void)明顯不同,對于空返回值,盡管方法本身不會自動返回什么,但仍可選擇讓它返回別的東西;構造器則不會返回任何東西。
構造器可以帶形參,也可以不帶形參,這是區分不同構造器的最重要的一點。其中不接受任何參數的構造器叫做默認構造器或無參構造器。默認構造器沒有形參,它的作用是創建一個“默認對象”。如果你寫的類中沒有構造器,則編譯器會自動幫你創建一個默認構造器。但如果你已經定義了一個構造器(無論有參還是無參),編譯器就不會幫你自動創建默認構造器。
如:
class Circle{}
?
public class Shape{
public static void main(String[] args){
Circle circle1 = new Circle(); // 編譯器自動創建了一個默認構造器
}
}
這樣是可以編譯成功的,因為編譯器自動為你創建了一個Circle類的默認構造器。
class Circle{
Circle(int i){} // 創建一個帶參的構造器
Circle(int i,int j){}
}
?
public class Shape{
public static void main(String[] args){
Circle circle1 = new Circle(); // 這句話是錯誤的,因為在Circle類中并沒有定義這個構造器,而編譯器此時并不會自動創建默認構造器,編譯器報錯
Circle circle2 = new Circle(1); // 調用帶參構造器,并提供實參
Circle circle3 = new Circle(1,2);
}
}
可以在一個構造器中調用另一個構造器,這需要用到 this 關鍵字。在構造器中,如果為 this 添加了參數列表,那么將產生對符合此參數列表的某個構造器的明確調用,這樣即可實現在一個構造器中調用另一個構造器。另外,盡管可以用 this 調用一個構造器,但是卻不能調用兩個,此外,必須將構造器的調用放到構造器的最起始處,否則編譯器會報錯。
?
二、JAVA的垃圾回收機制
JAVA提供垃圾回收器負責回收無用對象占據的內存資源,因此編寫JAVA程序不必像C++那樣擔心內存泄漏;但是垃圾回收器不同于析構函數,是不可靠的,JAVA里的對象并非總是被垃圾回收,即:
1)對象可能不被垃圾回收
2)對象回收不等于析構
3)垃圾回收只與內存有關
垃圾回收器只知道釋放那些經由 new 分配的內存, 并不知道該如何釋放那些并沒有經由 new 分配的內存。對于這種情況,JAVA允許在類中定義 finalize() 方法來清理內存,但是,finalize()方法也是不可靠的,而且使用起來有危險;finalize()一般只用于清理那些使用“本地方法”的地方。
?
轉載于:https://www.cnblogs.com/tongye/p/6596127.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的JAVA学习笔记--初始化与清理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts2(三) 输入校验和拦截器
- 下一篇: 郑州尚学堂:JAVA常用4种排序方法