中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中構造器和方法有哪些區別

發布時間:2022-01-06 09:15:21 來源:億速云 閱讀:470 作者:小新 欄目:編程語言

小編給大家分享一下Java中構造器和方法有哪些區別,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!





要學習Java,你必須理解構造器。因為構造器可以提供許多特殊的方法,這個對于初學者經常混淆。但是,構造器和方法又有很多重要的區別。

我們說構造器是一種方法,就象講澳大利亞的鴨嘴獸是一種哺育動物。(按:老外喜歡打比喻,我也就照著翻譯)。要理解鴨嘴獸,那么先必須理解它和其他哺育動物的區別。同樣地,要理解構造器,那么就要了解構造器和方法的區別。所有學習java的人,尤其是對那些要認證考試的,理解構造器是非常重要的。下面將簡單介紹一下 ,最后用一個表作了些簡單的總結。

功能和作用的不同

構造器是為了創建一個類的實例。這個過程也可以在創建一個對象的時候用到:Platypus p1 = new Platypus();

相反,方法的作用是為了執行java代碼。

修飾符,返回值和命名的不同

構造器和方法在下面三個方便的區別:修飾符,返回值,命名。和方法一樣,構造器可以有任何訪問的修飾: public, protected, private或者沒有修飾(通常被package 和 friendly調用). 不同于方法的是,構造器不能有以下非訪問性質的修飾: abstract, final, native, static, 或者 synchronized。

返回類型也是非常重要的。方法能返回任何類型的值或者無返回值(void),構造器沒有返回值,也不需要void。

最后,談談兩者的命名。構造器使用和類相同的名字,而方法則不同。按照習慣,方法通常用小寫字母開始,而構造器通常用大寫字母開始。構造器通常是一個名詞,因為它和類名相同;而方法通常更接近動詞,因為它說明一個操作。

"this"的用法

構造器和方法使用關鍵字this有很大的區別。方法引用this指向正在執行方法的類的實例。靜態方法不能使用this關鍵字,因為靜態方法不屬于類的實例,所以this也就沒有什么東西去指向。構造器的this指向同一個類中,不同參數列表的另外一個構造器,我們看看下面的代碼:


public class Platypus { String name; Platypus(String input) { name = input; } Platypus() { this("John/Mary Doe"); } public static void main(String args[]) { Platypus p1 = new Platypus("digger"); Platypus p2 = new Platypus(); } }


在上面的代碼中,有2個不同參數列表的構造器。第一個構造器,給類的成員name賦值,第二個構造器,調用第一個構造器,給成員變量name一個初始值 "John/Mary Doe".

在構造器中,如果要使用關鍵字this,那么,必須放在第一行,如果不這樣,將導致一個編譯錯誤。
"super"的用法

構造器和方法,都用關鍵字super指向超類,但是用的方法不一樣。方法用這個關鍵字去執行被重載的超類中的方法。看下面的例子:

class Mammal { void getBirthInfo() { System.out.println("born alive."); } } class Platypus extends Mammal { void getBirthInfo() { System.out.println("hatch from eggs"); System.out.print("a mammal normally is "); super.getBirthInfo(); } }

在上面的例子中,使用super.getBirthInfo()去調用超類Mammal中被重載的方法。
構造器使用super去調用超類中的構造器。而且這行代碼必須放在第一行,否則編譯將出錯。看下面的例子:

public class SuperClassDemo { SuperClassDemo() {} } class Child extends SuperClassDemo { Child() { super(); } }

在上面這個沒有什么實際意義的例子中,構造器 Child()包含了 super,它的作用就是將超類中的構造器SuperClassDemo實例化,并加到 Child類中。

編譯器自動加入代碼

編譯器自動加入代碼到構造器,對于這個,java程序員新手可能比較混淆。當我們寫一個沒有構造器的類,編譯的時候,編譯器會自動加上一個不帶參數的構造器,例如:public class Example {}

編譯后將如下代碼:

public class Example { Example() {} }

在構造器的第一行,沒有使用super,那么編譯器也會自動加上,例如:

public class TestConstructors { TestConstructors() {} }

編譯器會加上代碼,如下:

public class TestConstructors { TestConstructors() { super; } }

仔細想一下,就知道下面的代碼

public class Example {}

經過會被編譯器加代碼形如:

public class Example { Example() { super; } }

繼承

構造器是不能被繼承的。子類可以繼承超類的任何方法。看看下面的代碼:

public class Example { public void sayHi { system.out.println("Hi"); } Example() {} } public class SubClass extends Example { }

類 SubClass 自動繼承了父類中的sayHi方法,但是,父類中的構造器 Example()卻不能被繼承。

看完了這篇文章,相信你對“Java中構造器和方法有哪些區別”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

白山市| 安平县| 襄城县| 抚远县| 水城县| 沾益县| 卢氏县| 灯塔市| 靖远县| 侯马市| 连山| 广东省| 宁河县| 文昌市| 鄂尔多斯市| 山东| 额敏县| 曲松县| 罗山县| 阿克苏市| 全南县| 旺苍县| 博湖县| 犍为县| 渭源县| 迁西县| 大兴区| 多伦县| 安泽县| 天镇县| 平凉市| 华坪县| 临清市| 怀仁县| 佛坪县| 泾川县| 鹿邑县| 河曲县| 布拖县| 兖州市| 亳州市|