所以我正在學習java。我有一個月的時間,我剛剛瞭解了建設者。但我沒有看到創建一個整體的目的。爲什麼和什麼時候我會想要使用一個?我認爲它沒有一個主要的方法,你可以從你的主類調用一個構造函數。任何人都可以在這個話題上給我啓發,這對我有很大的幫助。java構造函數有什麼意義?
回答
構造函數是你用來初始化/設置你的類的實例。
如果你有一個對象在它可用之前需要一些處理(例如初始化成員),你應該在構造函數中這樣做。理想情況下,您不應該擁有「部分構建」的對象(即您持有引用的「活」對象,但這些對象不可用)。沒有構造函數,你會永久創建部分構建的對象,而且這很容易出錯。 (理論和實踐並不總是相匹配,但要牢記這一點)
它用於創建對象。對象是面向對象的主要概念,因此創建它們是重要的一步。主類方法只是您程序的入口點。如果你不創建對象,你的程序將是程序化的而不是面向對象的。這就是爲什麼使用的構造函數。
爲什麼要創建構造函數 - 有時您需要構造一個具有一些必需參數的對象。還有一個默認的無參數構造函數,但是如果您想用其他參數初始化對象 - 您可以創建一個構造函數來獲取這些參數。
您使用構造函數來創建新對象。是的,你可以可以只是使用靜態方法編寫Java - 但是你真的沒有編寫面向對象的代碼,你也很難使用大部分的標準庫。
你的大部分時間,你應該與合作,並在對象的角度思考 - 他們需要建設可以使用之前......而這就是構造函數來在他們創建一個對象,往往與。指定初始狀態或關於對象的其他重要信息的參數。
說實話,如果你還沒有看到這一點,那麼它可能不值得擔心它們。很有可能當你學到更多東西的時候,你會自然而然地開始使用更多的對象(例如,也許會從集合開始),然後你就會掌握它。請放心,它是在Java中有構造函數很重要,但我相信你會明白爲什麼在時間的過程中。 (當然,如果這個答案已經幫助你瞭解它們的價值,我很高興 - 但是如果沒有,請不要擔心:)
我會給你一個例子,想象你有一個汽車類..當你打電話給汽車類的構造函數時,你有一輛汽車目的。在這個汽車對象上可以使用不同的方法。你可以創建任意數量的汽車物件。
不回答問題。你不需要寫一個構造函數來獲取任何這個。 – EJP
構造函數用於初始化一個類並給一個類提供參數。重要的是他們讓你在創建時設置類的狀態。這允許您使用具有不同數據字段值的類的特定實例,而不是依賴純靜態信息。採取下面的例子:
class Obj {
private int state = 0;
public Obj(int state) {
this.state = state;
}
public Obj() {
state = 1;
}
}
現在main
(或任何)可以具有:
Obj obj1 = new Obj();
Obj obj2 = new Obj(2);
兩個對象具有不同的狀態(一個處於狀態1,另一種是在狀態2) 。如果你依賴靜態方法和成員,這些對象將共享一個狀態,並且不會彼此獨立。
重要的是要注意構造函數(特別是new
關鍵字)在內部爲給定對象分配內存,因此您不必擔心使用malloc
和其他內存管理。所以它們在這個意義上也很重要。
看起來好像您無法理解對象和麪向對象編程的基本概念。以身作則解釋;此類表示類型的東西,即一輛車:
public class Car{
// Licence plate number. This is private, so it can
// not be accessed directly from outside the class.
private String hiddenRegNr = "";
private static String description = "This is a car".
// The constructor, which sets the value of hiddenRegNr
public Car(String regNr){
hiddenRegNr = regNr;
}
// Method for reading hiddenRegNr, the only
// way to access it after instantiation.
public String getRegNr(){
return hiddenRegNr;
}
// A static method. Can be used withouth instantiation.
public static String getDesc(){
return description;
}
}
從一些其他類,你可以調用這個類,使它的實例;不同車輛的實際表示。它們代表不同的汽車,但是基於相同的「模型」,即Car類。
Car myFirstCar = new Car("SR12345");
Car myOtherCar = new Car("XZ54321");
現在你有兩個不同的汽車,有兩個不同的註冊號碼。這些是獨立的實例的類型汽車。它們存在於內存中,可能包含不同的值(在這種情況下,不同的註冊號)。
myFirstCar.getRegNr(); // Will return SR12345
mySecondCar.getRegNr(); // will return xz54321
這裏要注意的第一件事,就是你只能指定一次註冊號每車,即在創建。這是構造函數的要點:它設置值,並在創建對象(實例)時執行其他需要完成的操作。
現在,請注意getRegNr()和getDesc()之間的區別:關鍵字「Static」意味着第二個方法直接與類相關,而不是與每個實例相關。這意味着:
呼叫至getDesc()是在該類製成,而不是一個實例:
Car.getDesc();
呼叫至getDesc()將返回該類車的所有實例相同的值
變量描述(這也是靜態的)將是相同的所有實例汽車
靜態方法getDesc()不能訪問變量hiddenRegNr,因爲該變量相關的SP獨特的實例。嘗試在靜態上下文中引用實例中的變量(如getDesc())將導致拋出異常。您可能會說hiddenRegNr在您撥打電話時不會設置爲
Car.getDesc();
因爲構造函數從未被調用,所以它從來沒有被賦予任何值。
實際上,需要構造函數如果您需要爲類的實例指定唯一的初始狀態。在Java中,我只是剛剛意識到(我的朋友)我們可以這樣做:
public class MyClass1 {
private class MyClass2 {}
private MyClass2 myobj2 = new MyClass2();
}
所以不需要隱式構造函數。 但是如果像下面這樣,你需要構造函數。
public class MyClass1 {
private class MyClass2 {
private int id_ = 0;
public MyClass2(int id) { id_ = id; } // how to reach this?
}
private MyClass2 myobj2 = new MyClass2(1); // (this doesn't work. Not unique)
public MyClass1(int id) { myobj2 = new MyClass2(id); } // by this!
}
MyClass1 obj1 = new MyClass1(100);
MyClass1 obj2 = new MyClass1(200);
- 1. Java:通過構造函數調用構造函數,有什麼意義?
- 2. 在構造函數中使用「this」有什麼意義?
- 3. 在Java中聲明默認構造函數有什麼意義嗎?
- 4. 在Java的抽象類中使用構造函數有什麼意義?
- 5. 虛擬拷貝構造函數(克隆函數)有什麼意義?
- 6. Java的文件構造函數是什麼意思?
- 7. 構造函數定義中的「:base」是什麼意思?
- 8. 移動構造函數採用constans rvalue的意義是什麼?
- 9. 爲什麼JAVA需要構造函數?
- 10. 爲什麼構造函數未定義?
- 11. 「構造函數沒有被繼承」究竟意味着什麼?
- 12. 爲什麼System.Data.SqlClient.SqlDataReader沒有構造函數
- 13. 函數構造函數和原型構造函數有什麼區別?
- 14. 什麼類型的java構造函數是這些?構造函數鏈接?
- 15. 空的構造函數和沒有構造函數有什麼區別
- 16. $ {$}構造是什麼意思?
- 17. 爲什麼構造函數不是構造函數?
- 18. javascript navigator.javaEnabled函數有什麼意義?
- 19. PHP的stripslashes函數有什麼意義?
- 20. 什麼使合法的構造函數,什麼會使構造函數非法?
- 21. 爲什麼Java字符串有複製構造函數?
- 22. Java:爲什麼構造函數具有訪問修飾符?
- 23. java 8中的構造函數引用有什麼用法
- 24. 我的XChartPanel構造函數(Java Swing)有什麼問題?
- 25. 爲什麼Java中的抽象類有構造函數?
- 26. java中私有構造函數的用法是什麼?
- 27. 在java中我的構造函數有什麼問題?
- 28. 這個構造函數定義有什麼好處
- 29. 這個代碼在構造函數中有什麼含義
- 30. 構造函數GeoPoint(double,double)未定義。那有什麼問題?
構造函數讓你在對象的成員上進行初始化和設置值,並且它們創建一個類的實例。你有沒有讀過這部分教程? http://download.oracle.com/javase/tutorial/java/javaOO/constructors.html – birryree