Java和c++構造函數的區別是什麼?

如果你是一個c++程序員,現在正在學習Java,你會發現這兩種流行的面向對象編程語言有很多相似之處。這兩種語言都支持抽象、封裝、類、對象和其他OOP概念。但是,也有一些細微的差別。Java和c++都有構造函數,它們在Java中的工作方式與在c++中的工作方式相同。但是,他們的名字是不一樣的。

例如,在Java中,必須使用new()操作符調用構造函數。在創建對象時沒有其他方法顯式地調用構造函數,但是在c++中,您可以在不使用新運算符的情況下調用它。對於同時瞭解Java和c++的程序員來說,這也是一個很好的面試問題。

現在,在c++和Java之間切換上下文並不容易,尤其是在面試過程中,但這也是測試應聘者經驗的一個完美方法。一個在Java工作了幾年的有經驗的c++程序員應該知道他們頭腦中的區別。

如果你有c++背景,正在尋找一本學習Java的好書,那麼看看Cay S. Horstmann的《Core Java》第一卷。Horstmann在引入Java新概念時將c++引入了一個新的視角。因此,您將發現Java中的泛型與c++中的模板的比較,這有助於快速理解這個概念。

Java和c++構造函數的區別是什麼

正如我所說的,c++和Java都支持構造函數,但是調用它們的方式不同。沒有new()操作符就不能調用Java構造函數。當您使用new()操作符時,JVM會隱式地調用它們,但是您可以在c++中調用構造函數而不使用新的操作符。

事實上,這是c++程序員在進行Java編程時經常犯的錯誤之一;下面的代碼在c++中可以很好地工作,但是在Java中不行:

Course scala("Scala", 2, 300);

在Java中,它應該看起來像:

Course scala = new Course("Scala", 2, 300);

此外,Java對象總是在堆中構造,即使您在方法或塊中創建它。

下面是c++和Java的一些更明顯的區別:

  • c++支持指針運算,但Java不支持。
  • c++支持多重繼承,但Java不支持。
  • c++沒有垃圾收集器,內存管理是開發人員的責任;但是Java有GC。
  • c++不是平臺獨立的,但是Java是。

C++ vs. Java 構造器

在構造函數方面,c++和Java還有一個更重要的區別。c++有構造函數和析構函數,而Java只有構造函數。

Java中沒有析構函數。一旦對象有資格進行垃圾收集,也就是說,一旦它的工作完成,並且沒有指向它的活動引用,垃圾收集器就會從對象中回收內存。垃圾收集器是JVM的一部分。

看起來可能有點混亂,Java確實提供了finalize()方法,c++開發人員常常將其誤認爲析構函數,這是不正確的。finalize()方法不回收內存;當垃圾收集器回收內存時,JVM甚至不能保證調用它。

它的規範說,它可以在對象被垃圾收集之前調用,並給對象最後一次機會來清理它所持有的資源。雖然不建議調用finalize方法或進行一些清理,但這並不能保證。要了解更多信息,請查看Joshua Bloch在他的《高效Java》一書中關於最終敲定的建議。

除了使用finalize之外,谷歌本身還發現了以下信息:

如果您依賴finalize()來釋放系統資源,例如數據庫連接、文件句柄等,那麼您的程序很可能會出現資源泄漏。

這就是c++和Java構造函數的區別。它們的工作方式類似,並且兩者都用於創建對象並初始化它們,但細微的區別在於如何調用它們。您可以在c++中調用構造函數,而無需使用new關鍵字,這在Java中是不可能的。因此,如果您是在c++背景下學習Java的,請確保您總是在Java的構造函數中使用new關鍵字。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章