導航:首頁 > 安裝方法 > 構造方法在哪裡定義

構造方法在哪裡定義

發布時間:2023-02-21 21:17:44

1. java中什麼叫構造方法

構造方法是一種特殊的方法,與一般的方法不同是: 1.構造方法的名字必須與定義他的類名完全相同,沒有返回類型,甚至連void也沒有。 2.構造方法的調用是在創建一個對象時使用new操作進行的。構造方法的作用是初始化對象。 3.不能被static、final、synchronized、abstract和native修飾。構造方法不能被子類繼承。class RectConstructor{ double length; double width; double area(){ return length*width; } //下面這個方法就是所謂的構造方法,沒有返回值,方法名與類名相同~~~ RectConstructor(double width,double length){//帶參數的構造方法 this.length=length; this.width=width; } }其實構造方法就是為了給類中成員賦初值~~~~~~~~~~~~~

2. 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

3. java的方法和構造方法,還有類方法的區別和定義格式

構造方法:分有參和無參構造,在創建類對象時自動調用(即new對象時),該方法沒有返回值,也不能加void 例:
無參構造:public Person(){}
有參構造:public Person(String name,int age){
this.name = name;
this.age = age;
}
類方法:供類的對象(實例)使用,可用可不用 ,格式如下:
public void print(){
System.out.println("Hello");
}

4. JAVA的構造函數是怎麼寫的。萬分感謝。路過的請不要嘲笑%>_<%

JAVA的構造函數是:SetLocal EnableDelayedExpansion

set classpath=.

for %%c in (lib*.jar) do set classpath=!classpath!;%%c

set classpath=%classpath%;./classes;

java com.ham.server.Server。

1、無參構造方法

無參構造方法又分為隱式無參構造方法和顯示無參構造方法。

隱式無參構造方法

在定義類的時候,如果沒有給類定義一個構造方法,Java編譯器在編譯時會默認提供一個隱式的構造方法,它沒有任何參數,並且有一個空的方法體。例如,Person類中隱含一個無參構造方法,在main方法中可以通過new關鍵字來調用此默認的構造方法,代碼如下:

5. java類的構造方法是什麼

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

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

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

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

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

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

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

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

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

publicclassSample{

privateintx;

publicSample(){//不帶參數的構造方法
this(1);
}

publicSample(intx){//帶參數的構造方法
this.x=x;
}

publicintSample(intx){//不是構造方法
returnx++;
}

}

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

publicclassMystery{
privateStrings;

publicvoidMystery(){//不是構造方法
s="constructor";
}

voidgo(){
System.out.println(s);
}

publicstaticvoidmain(String[]args){
Mysterym=newMystery();
m.go();
}
}

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


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

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

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

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

publicclassSample1{}

publicclassSample2{
publicSample2(inta){System.out.println("MyConstructor");}
}

publicclassSample3{
publicSample3(){System.out.println("MyDefaultConstructor");}
}

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

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

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

6. 什麼是構造方法構造方法和普通方法有什麼區別

1樓在胡說吧?創建類會調構造方法?構造方法實在new對象的時候被調用的,是被系統自動調用的,而且一定會被調用,構造方法一般用來給對象的屬性做初始化的,構造方法沒有返回值,普通方法必須有返回值,就算不返回也得寫個
void,這就是他們的區別

7. 什麼叫做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)
它的意思是遞歸的構造方法調用,大家遇到這個問題的時候,稍微檢查下自己的代碼,看看構造方法是否出現遞歸調用了。

8. 基類的構造方法什麼意思

構造方法是一種特殊的方法,具有以下特點。
(1)構造方法的方法名必須與類名相同。
(2)構造方法沒有返回類型,也不能定義為void,在方法名前面不聲明方法類型。
(3)構造方法的主要作用是完成對象的初始化工作,它能夠把定義對象時的參數傳給對象的域。
(4)一個類可以定義多個構造方法,如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無參數的默認構造器,這個構造器不執行任何代碼。
(5)構造方法可以重載,以參數的個數,類型,順序。

9. 在JAVA變程中,什麼是構造方法,它能用public修飾嗎

構造方法是一種特殊的方法,與一般的方法不同是: 1.構造方法的名字必須與定義他的類名完全相同,沒有返回類型,甚至連void也沒有。 2.構造方法的調用是在創建一個對象時使用new操作進行的。構造方法的作用是初始化對象。 3.不能被static、final、synchronized、abstract和native修飾。構造方法不能被子類繼承。 構造方法可以被重載。沒有參數的構造方法稱為默認構造方法,與一般的方法一樣,構造方法可以進行任何活動,但是經常將他設計為進行各種初始化活動,比如初始化對象的屬性。 在Java中,任何變數在被使用前都必須先設置初值.Java提供了為類的成員變數賦初值的專門功能:構造方法(constructor)構造方法是一種特殊的成員方法,它的特殊性反映在如下幾個方面: (1)構造方法名與類名相同. (2)構造方法不返回任何值,也沒有返回類型. (3)每個類可以有零個或多個構造方法. (4)構造方法在創建對象時自動執行,一般不能顯式地直接調用.

至於如果你做個private類而裡面是public方法,這樣設計沒人攔著你,你的類存在是為了什麼要先搞清楚,如果你做個封裝不想讓別人看到類內部結構可以全私有,如果你要子類能看到就用protected,如果隨便無所謂就用public

10. JAVA構造方法

構造方法必須滿足以下語法規則:

(1) 方法名必須與類名相同。

(2)不要聲明返回類型。

(3)不能被static、final、synchronized、abstract和native修飾。構造方法不能被子類繼承,所以用final和

abstract修飾沒有意義。構造方法用於初始化一個新建的對象,所以用static修飾沒有意義。多個線程不會同時創建內存地址相同的同一個對象,因此用synchronized修飾沒有必要。此外,Java語言不支持native類型的構造方法。

例:

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、protected、默認和private這四種訪問級別之一。本節著重介紹構造方法處於private級別的意義。

當構造方法為private級別,意味著只能在當前類中訪問它:在當前類的其他構造方法中可以通過this語句調用它,此外還可以在當前類的成員方法中通過new語句調用它。

在以下場合之一,可以把類的所有構造方法都聲明為private類型。

(1)在這個類中僅僅包含了一些供其他程序調用的靜態方法,沒有任何實例方法。其他程序無需創建該類的實例,就能訪問類的靜態方法。例如 java.lang.Math類就符合這種情況,在Math類中提供了一系列用於數學運算的公共靜態方法,為了禁止外部程序創建Math類的實例, Math類的惟一的構造方法是private類型的:

private Math(){}

abstract類型的類也不允許實例化。也許你會問,把Math類定義為如下abstract類型,不是也能禁止Math類被實例化嗎?

public abstract class Math{…}

如果一個類是抽象類,意味著它是專門用於被繼承的類,可以擁有子類,而且可以創建具體子類的實例。而JDK並不希望用戶創建Math類的子類,在這種情況下,把類的構造方法定義為private類型更合適。

(2)禁止這個類被繼承。當一個類的所有構造方法都是private類型,假如定義了它的子類,那麼子類的構造方法無法調用父類的任何構造方法,因此會導致編譯錯誤。把一個類聲明為final類型,也能禁止這個類被繼承。這兩者的區別是:

1)如果一個類允許其他程序用new語句構造它的實例,但不允許擁有子類,那就把類聲明為final類型。

2)如果一個類既不允許其他程序用new語句構造它的實例,又不允許擁有子類,那就把類的所有構造方法聲明為private類型。

由於大多數類都允許其他程序用new語句構造它的實例,因此用final修飾符來禁止類被繼承的做法更常見。

(3)這個類需要把構造自身實例的細節封裝起來,不允許其他程序通過new語句創建這個類的實例,這個類向其他程序提供了獲得自身實例的靜態方法,這種方法稱為靜態工廠方法。

參考資料:java 構造函數

閱讀全文

與構造方法在哪裡定義相關的資料

熱點內容
以聚類分析為基礎的統計分析方法 瀏覽:553
游樂園封頂的方法有哪些 瀏覽:369
原料葯鑒別的方法有 瀏覽:999
學科網讀後感的寫作方法和技巧 瀏覽:730
定損公平的最佳方法 瀏覽:573
如何自測酒糟鼻的方法 瀏覽:897
有什麼方法可以治痛經i 瀏覽:905
檢測尿酸的化學方法 瀏覽:384
金立手機同步在哪裡設置方法 瀏覽:556
你用過哪些記筆記的方法 瀏覽:193
快速套厚被套的簡易方法 瀏覽:783
唐氏綜合征計算方法 瀏覽:672
黑棗如何製作方法 瀏覽:598
有什麼方法可以促排好受孕 瀏覽:518
臨床上常用的哪種方法止血 瀏覽:458
投籃技巧教學方法 瀏覽:664
今天台風如何說明方法 瀏覽:471
如何禁毒最有效的方法 瀏覽:397
水的時間計算方法 瀏覽:803
痘痘的類型和解決方法 瀏覽:631