共同點:
都是實例化對象,初始化數據的
默認構造是說全部的類都從祖先object那繼承了空參的構造方法,你不寫與寫空參構造都存在,而有參數的構造通常是本身寫的,寫就有不寫就沒有,它的做用和空參的同樣,只是它裏面能夠有參數,給你個例子來講明吧
有一個類Monitor它有屬性String height;String
width
public Monitor(){}
public Monitor(String height,String width){}
有一個空參的一個有參的構造的方法
在main方法裏我作初始化動做
Monitor monitor=new Monitor();
這個構造只是把顯示器這個對象創造出來了,它的屬性就沒有值,也能夠再手動給它賦上值
如:monitor.height=100;
monitor.width=200;
用有參的就不同了,少不少事
Monitor monitor2=new Monitor("100","200");
在這裏我只要把想放進去的參數直接放進去就能給個人屬性賦上值,是否是省了不少事?
這就是它的優點!
回答完結!
構造函數 是一種特殊的方法 主要用來在建立對象時初始化對象 即爲對象成員變量賦初始值
總與new運算符一塊兒使用在建立對象的語句中 特別的一個類能夠有多個構造函數 可根據其參數個數的不一樣或參數類型的不一樣來區分它們 即構造函數的重載
構造函數與其餘方法的區別
1.構造函數的命名必須和類名徹底相同;而通常方法則不能和類名相同.
2.構造函數的功能主要用於在類的對象建立時定義初始化的狀態.它沒有返回值,也不能用void來修飾.這就保證了它不只什麼也不用自動返回,並且根本不能有任何選擇.而其餘方法都有返回值.即便是void返回值,儘管方法體自己不會自動返回什麼,但仍然可讓它返回一些東西,而這些東西多是不安全的.
3.構造函數不能被直接調用,必須經過new運算符在建立對象時纔會自動調用,通常方法在程序執行到它的時候被調用.
4.當定義一個類的時候,一般狀況下都會顯示該類的構造函數,並在函數中指定初始化的工做也可省略不去Java編譯器會提供一個默認的構造函數.此默認構造函數是不帶參數的.而通常方法不存在這一特色
簡單的來講構造函數就是用來建立對象用的,說的專業些叫實例化對象。
定義:
class A
{
public A(){}
}
使用:
A a=new A();//在這裏,A()就是就是構造函數。
須要注意的一點是,若是類裏面沒有定義構造函數,編譯器也會自動生產一個空構造函數,類的各個成員都賦上默認值。
可是若是在類裏面只定義了一個私有的構造函數的時候,那麼這個類將不能被實例化。
class A
{
string a;
private A() { }//這個類不能被實例化
}
若是咱們定義了帶參數的構造函數,而沒有定義不帶參數的構造函數,那麼在實例化這個類的對象的時候必須提供參數。
class A
{
string a;
public A(string str) {a=str; }
}
不能這麼實例化對象 A a=new A();
構造函數分爲動態構造函數和靜態構造函數。
動態構造函數是類或結構實例化時,爲其分配內存空間,完成類或結構當中成員變量的初始化工做。動態構造函數能夠重載,即相同構造函數名稱擁有不一樣類型和數目的多個構造函數。帶參數的構造函數和不帶參數的構造函數沒有本質區別,帶參數的構造函數能夠經過傳入的變量控制或者直接初始化其中的成員變量,在構造函數中能夠爲成員變量初始化默認值。
靜態構造函數不容許攜帶參數,即一個類中只容許有一個靜態構造函數。它在第一次訪問靜態成員或者第一次實例化動態該類的對象以前調用。