『壹』 java 構造方法 函數
java的構造函數其實很簡單。
一個類 被實例化 也就是被new的時候 最先執行的是 構造函數,如果你有留心。你會發現很多類裡面根本沒有寫構造函數。
在java類中,如果不顯示聲明構造函數,JVM 會給該類一個默認的構造函數。一個類 可以有多個構造函數。構造函數的主要作用 一是用來實例化該類。二是 讓該類實例化的時候執行哪些方法,初始化哪些屬性。當一個類聲明了構造函數以後,JVM 是不會再給該類分配默認的構造函數。
比如一個實體類
public class entity{
private int id;
private String userName;
get...set..方法
}
如果這樣寫該類就是默認的構造函數。該類實例化的時候 id 和 username 就是默認值 即 id=0,username=null.
如果在裡面加入這樣一個方法
public entity(int id,String userName){
調用get..set..
}
如果這樣寫 該類實例化的時候 必須給出 id 和username參數。 JVM不會再給這個類默認構造函數
你也可以理解成 在沒有給構造函數的時候 JVM 給你的類加了一個這樣的函數
public entity(){
this.id=0;
this.userName=null;
}
其實構造函數是用來對一個類以及變數進行實例化。
『貳』 java語言的構造函數有什麼作用構造函數可以重載嗎舉例說明
構造函數是當你創建對象時,由系統調用的;
可以重載
例子
publicClassPerson{
Stringname=null;
publicPerson(){};//無參構造函數
publicPerson(Stringname){//有參構造函數,重載
this.name=name;
}
}
classTest{
publicstaticvoidmain(String[]args){
Personp1=newPerson();//創建名字為null的人對象,調用無參構造函數
Personp2=newPerson("小明");//創建名字為小明的對象,調用有參構造函數
}
}
『叄』 java類中的構造函數有什麼作用
什麼是構造函數,問的好。
開始的時候我也不理解為什麼要構造函數。因為那時候的設計思想還停留在面向過程編程。即我要干什麼事,這件事有幾個步驟,然後我決定怎麼干。
面向對象不是這么直接簡單,它的設計思想就是要代碼重用。即我以前干過類似的事,那麼我找出以前可以用到的代碼,完成一部分。以前沒有的我重新寫。這樣就有了類。
回到你提的問題。有了類,就是有了可以重用的代碼,但是我怎麼產生這個對象呢。必須要實例化這個類(當然這不是唯一產生對象的途徑,比如單例模式,但本質上說所有途徑都是一樣的)。那麼就要用到構造函數。即告訴程序我現在要實例化一個對象了,你給我馬上分配內存。將內存的首地址賦給我指定的類對象。而且有時候你需要傳遞參數到函數裡面,有了構造函數就方便了,構造函數可以有無數個。當然,傳遞參數到到對象裡面也可以其它方法,比如直接賦一個值給成員變數,舉例:
class point2{
int x,y;
point2(){
}
point2(int a,int b){//構造函數;含參的構造函數;構造方法必須要和類名一致
//且沒有返回值
x=a;
y=b;
}
void output(){
System.out.println(x);
System.out.println(y);
}
public static void main(String args[]){
point2 pt=new point2();//實例化對象,這時候x,y沒有賦值,默認初始值為0;
pt.output();
pt.x=3;pt.y=3;
pt.output();
}
}
『肆』 Java中構造函數的作用是什麼
當你new一個對象時,就是調用的構造函數,用來初始化成員變數的,希望對你有幫助
『伍』 java中什麼是構造方法及其作用
無意中翻到這條提問,看了很多回答,發現歧義較重,在這里解答一下,為了避免後邊來的朋友們踩雷
新手學習Java在構造方法這里很容易踩雷,構造方法是用來初始化的,這句勉強沒錯,可構造方法是用來創建對象的,這句就錯了,實際上,在構造方法執行之前,類的內存空間已經開辟完成了,意思就是說對象已經創建了,這步是由new關鍵字來完成的,而構造方法的作用是給類中的變數進行初始化賦值
假設,假設構造方法是用來創建對象用的,就無法解釋抽象類中為什麼允許構造方法的存在,抽象類無法實例化,不能被創建,但是抽象類中允許構造方法的存在,舉例從側面證明一下:
abstract class Animal{
String name;
public Animal() {
System.out.println("抽象父類的無參構造");
}
abstract void eat();
}
class Dog extends Animal{
public Dog() {
super();
System.out.println("子類的無參構造");
}
@Override
void eat(){
}
}
public class Test {
public static void main(String[] args) {
Dog d = new Dog();
System.out.println(d.name);
}
}
隨手敲的很簡陋的一段代碼,不要在意格式上的不嚴謹,領會精神,這段代碼執行後的結果為:
抽象父類的無參構造
子類的無參構造
null
當執行Dog d = new Dog()這句代碼時,大致會分兩步,一是載入類,開辟類的內存空間,這是由new完成的,第二步執行構造方法,為類中的變數初始化賦值,在執行Dog的無參構造時,系統會默認調用父類的無參構造,也就是super(),super關鍵字是對該類的父類進行的引用,它並不是一個對象,這也是個難點,感興趣的可以去查一下,而super()這句代碼可以簡單理解為調用這個類的父類的無參構造
在上述代碼中,父類Animal是一個抽象類,而抽象類不可被實例化,如果構造方法的作用是創建對象,在這一步上邏輯就無法自洽,而實際情況是:抽象類執行了構造方法,但卻沒有創建對象,同時成員變數name也有了初始值null