java中的構造方法,java構造方法的使用

本文目錄一覽:

什麼叫做JAVA的構造方法(含義)?

在Java中,每個類都需要至少一個的構造方法(可以有多個),它用於構造類的對象;在Java中構造方法必須與類名相同;構造方法可以不帶有參數、也可以帶有參數,不帶有參數的構造方法被稱為無參構造(no-arg)方法。

這裡大家可能會覺得奇怪,我們之前的MainClass好像就沒有構造方法。其實是這樣的,如果我們不給類提供構造方法,編譯器會自動提供一個無參構造方法。

定義構造方法的語法如下:

Java代碼

constructorName (listOfArguments) {

[constructor body]

}

其中constructorName必須和你定義的類的名字相同,listOfArgumengs是構造方法的參數列表,當然,這裡也可以不帶有任何參數。然後大括號內是我們的方法體。這裡提一下,構造方法也可以帶有訪問控制符,即public、protected、private和default(忽略情況下)。

下面的例子給出了一個構造方法的實例:

Java代碼

public class MainClass {

double radius;

// Class constructor

MainClass(double theRadius) {

radius = theRadius;

}

}

可以看出,我們給MainClass定義了一個構造方法,它的修飾符是默認的。後面的教程大家會學到這幾個訪問控制符的作用。我們的MainClass的構造方法帶有一個double參數,這裡大家也可以看出,構造方法的參數可以用於初始化類的屬性,其實強制要求帶參數的構造方法可以保持類的狀態的完整性,即保證構造出的對象是符合要求的。

默認構造方法

前面我講過,如果沒有提供構造方法,編譯器會提供一個默認的構造方法(沒有參數)。這裡其實也隱含着一個意思,即,如果我們提供了構造方法,那麼編譯器是不會提供默認的構造方法的。我們可以通過下面的代碼來驗證。

Java代碼

public class MainClass {

double radius;

// Class constructor

MainClass(double theRadius) {

radius = theRadius;

}

public static void main(String[] args) {

MainClass mc = new MainClass();

}

}

大家可以嘗試編譯上面的代碼,可以發現編譯會出錯,提示的錯誤信息為:

Java代碼

The constructor MainClass() is undefined

這個信息的意思是構造方法MainClass()沒有定義,即編譯器沒有給我們提供默認的構造方法。那麼如果我們還想繼續使用無參的構造方法的話,這就需要我們自己來提供了,如:

Java代碼

public class MainClass {

double radius;

MainClass() {

}

// Class constructor

MainClass(double theRadius) {

radius = theRadius;

}

}

上面的代碼我們自己手動的提供了一個無參的構造方法MainClass(),大家現在嘗試編譯代碼,會發現,代碼是可以通過編譯的。所以在自己實際的工作中,稍微注意這點。

多個構造方法

其實我們前面已經見過多構造方法的例子了,不過這裡給大家提示下,Java支持一個類中定義多個構造方法,如:

Java代碼

class Sphere {

int radius = 0;

Sphere() {

radius = 1;

}

Sphere(int radius) {

this.radius = radius;

}

}

這裡我們定義了球(Sphere)類,然後定義了它的半徑並提供了兩個構造方法。在默認的構造方法里,我們將半徑設置為1,然後在帶有半徑作為參數的構造方法中,我們設置了半徑為提供的值。

在一個構造方法中調用另一個方法

我們一直稱呼構造方法,那麼既然是方法,當然支持方法的調用。在Java中,我們可以從一個構造方法中調用另一個構造方法。要調用另一個方法,只要使用this關鍵字,然後後面跟着括號,如果要調用的構造方法中帶有參數,只要將參數放到對應的位置即可。如:

Java代碼

class Sphere {

int radius = 0;

double xCenter;

double yCenter;

double zCenter;

Sphere() {

radius = 1;

}

Sphere(double x, double y, double z) {

this();

xCenter = x;

yCenter = y;

zCenter = z;

}

Sphere(int theRadius, double x, double y, double z) {

this(x, y, z);

radius = theRadius;

}

}

在使用這種方式的時候,稍微注意下,不要引起循環調用。在出現循環調用的時候,編譯器會出現類似於如下的提示來阻止類編譯通過:

Java代碼

Recursive constructor invocation MainClass(int)

它的意思是遞歸的構造方法調用,大家遇到這個問題的時候,稍微檢查下自己的代碼,看看構造方法是否出現遞歸調用了。

JAVA構造方法

構造方法的方法名必須與類名一樣。

構造方法沒有返回類型,也不能定義為void,在方法名前面不聲明方法類型。

構造方法不能作用是完成對象的初始化工作,他能夠把定義對象時的參數傳遞給對象的域。

構造方法不能由編程人員調用,而要系統調用。

構造方法可以重載,以參數的個數,類型,或排序順序區分。

例子:

1;單個構造函數方法;』 

2;多個構造函數方法 

(例子為;帶參數與不帶參數) 

3;關於繼承類的構造方法的調用; 

先看事例; 

java類的構造方法是什麼?

構造方法和實例方法的區別

一、主要的區別在於三個方面:修飾符、返回值、命名

1、和實例方法一樣,構造器可以有任何訪問的修飾符,public、private、protected或者沒有修飾符   ,都可以對構造方法進行修飾。不同於實例方法的是構造方法不能有任何非訪問性質的修飾符修飾,例如static、final、synchronized、abstract等都不能修飾構造方法。

解釋:構造方法用於初始化一個實例對象,所以static修飾是沒有任何意義的;多個線程不會同時創建內存地址相同的同一個對象,所以synchronized修飾沒有意義;

構造方法不能被子類繼承,所以final和abstract修飾沒有意義。

2、返回類型是非常重要的,實例方法可以返回任何類型的值或者是無返回值(void),而構造方法是沒有返回類型的,void也不行。

3、至於命名就是構造方法與類名相同,當然了實例方法也可以與類名相同,但是習慣上我們為實例方法命名的時候通常是小寫的,另一方面也是與構造方法區分開。

而構造方法與類名相同,所以首字母一般大寫。

下面看幾個例子熟悉一下:

public class Sample {  

      

    private int x;  

  

    public Sample() { // 不帶參數的構造方法  

        this(1);  

    }  

      

    public Sample(int x) { //帶參數的構造方法  

        this.x=x;  

    }  

      

    public int Sample(int x) { //不是構造方法  

        return x++;  

    }  

  

}

上面的例子即使不通過注釋我們也很容易能區分開的,再看下面一個例子

public class Mystery {  

    private String s;  

      

    public void Mystery() { //不是構造方法  

    s = “constructor”;  

    }  

      

    void go() {  

    System.out.println(s);  

    }  

      

    public static void main(String[] args) {  

    Mystery m = new Mystery();  

    m.go();  

    }  

}

程序執行的結果為null,雖然說Mystery m = new Mystery();調用了Mystery 類的構造方法,但是public void Mystery()並不是構造方法,他只是一個普通的實例方法而已,那該類的構造方法哪去了呢?

二、說到這就得說一下java的默認構造方法

我們知道,java語言中規定每個類至少要有一個構造方法,為了保證這一點,當用戶沒有給java類定義明確的構造方法的時候,java為我們提供了一個默認的構造方法,這個構造方法沒有參數,修飾符是public並且方法體為空。如果用戶有定義構造方法,就不會有默認構造方法!!!

其實默認的構造方法還分為兩種,一種就是剛剛說過的隱藏的構造方法,另一種就是顯示定義的默認構造方法.

如果一個類中定義了一個或者多個構造方法,並且每一個構造方法都是帶有參數形式的,那麼這個類就沒有默認的構造方法,看下面的例子。

public class Sample1{}  

  

public class Sample2{  

    public Sample2(int a){System.out.println(“My Constructor”);}  

}  

  

public class Sample3{  

    public Sample3(){System.out.println(“My Default Constructor”);}  

}

上面的三個類中Sample1有一個隱式的默認構造方法,下列語句Sample1 s1=new Sample()合法;

Sample2沒有默認的構造方法,下列語句Sample2 s2=new Sample2()不合法,執行會編譯錯誤

Sample3有一個顯示的默認構造方法,所以以下語句Sample3  s3=new Sample3();合法。

請問java中,構造方法是什麼? 能通俗的講講嗎?

首先要搞清楚什麼是類方法,什麼是構造方法

一個類中的方法分為三類:

1)全局方法 2) 成員方法 3)構造方法

例:

123456789101112public class Test{private int age; //這是成員變量public Test(int age){ //這是構造方法this.age = age;}public void setAge(int age){ //這是成員方法this.age = age;}public static int getAge(){ //這是全局方法,加了static ,成員方法就會變成全局方法return this.age;}}

成員方法和構造方法沒啥關係,區別在於成員方法必須用類的實例化對象進行訪問,而全局方法是用類直接訪問的,而構造方法是實例化對象時進行初始化的

先解釋構造方法:

Test t = new Test(34);

這裡的new Test(34) 括號代表了構造方法,一般的構造的方法是默認的,可以不用寫,如果上面的構造方法不寫,這裡就應該這樣實例化對象:

Test t = new Test();

成員方法:

Test t = new Test(34);

t.setAge(35);

用實例化對象調用普通方法即可

普通成員變量:

Test t = new Test(34);

因為變量age加了private 不能這樣調用:t.age = 35; 這樣是錯的,只能通過方法來進行修改

全局方法:

Test.getAge();

直接這樣調用就可以了,當然如果沒有實例化過,這裡的Test.getAge()為0

java中什麼是構造方法及其作用

java中構造方法的含義:一個與當前類同名的方法成為構造方法。

(為了方便你的理解,我這裡再說下構造方法的特點:1、與當前類同名;2、沒有返回值;3、其中不能使用return語句返回任何值;4、一旦自定義構造方法後,系統將不再自動生成無參數的構造方法;5、其中不能加void定義類型,它的無返回值與void不同,若用void定義類型,則系統不會將其認定為構造方法,即不會再需要時自動調用)

構造方法的作用:在類的實例對象剛產生時,該類中的構造方法將會被自動調用,我們可以再該構造方法中加入需要完成初始化工作的代碼。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/185269.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-26 12:17
下一篇 2024-11-26 12:17

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29

發表回復

登錄後才能評論