六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

JAVA/JSP學習系列之9

[摘要]解構造器 構造器和方法的區(qū)別 摘要要學習Java,你必須理解構造器。因為構造器可以提供許多特殊的方法,這個對于初學者經(jīng)�;煜�。但是,構造器和方法又有很多重要的區(qū)別。原作者:Robert Nielsen 原站:www.javaworld.com 我們說構造器是一種方法,就象講澳大利亞的鴨嘴獸是一種哺...
解構造器

構造器和方法的區(qū)別
摘要
要學習Java,你必須理解構造器。因為構造器可以提供許多特殊的方法,這個對于初學者經(jīng)常混淆。但是,構造器和方法又有很多重要的區(qū)別。
原作者:Robert Nielsen 原站:www.javaworld.com

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

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

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

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

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

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

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

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個不同參數(shù)列表的構造器。第一個構造器,給類的成員name賦值,第二個構造器,調用第一個構造器,給成員變量name一個初始值 "John/Mary Doe".

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

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

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程序員新手可能比較混淆。當我們寫一個沒有構造器的類,編譯的時候,編譯器會自動加上一個不帶參數(shù)的構造器,例如:public class Example {}
編譯后將如下代碼:

public class Example {
Example() {}
}


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

public class TestConstructors {
TestConstructors() {}
}

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

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

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

public class Example {}

經(jīng)過會被編譯器加代碼形如:

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

繼承

構造器是不能被繼承的。子類可以繼承超類的任何方法�?纯聪旅娴拇a:

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

Example() {}
}

public class SubClass extends Example {
}

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

總結

主題構造器方法
功能建立一個類的實例java功能語句
修飾不能用bstract, final, native, static, or synchronized
返回類型沒有返回值,沒有void有返回值,或者void
命名和類名相同;通常為名詞,大寫開頭通常代表一個動詞的意思,小寫開頭
this指向同一個類中另外一個構造器,在第一行指向當前類的一個實例,不能用于靜態(tài)方法
super調用父類的構造器,在第一行調用父類中一個重載的方法
繼承構造器不能被繼承方法可以被繼承
編譯器自動加入一個缺省的構造器自動加入(如果沒有)不支持
編譯器自動加入一個缺省的調用到超類的構造器自動加入(如果沒有)不支持





主站蜘蛛池模板: 日韩在线视频线视频免费网站 | 天堂资源bt在线官网 | 思思99re66在线精品免费观看 | 青春草在线视频免费观看 | 羞羞影院男女午夜爽爽影视 | 亚洲高清视频在线观看 | 天天综合久久久网 | 天天尻逼 | 色综合久久综合欧美综合图片 | 日产精品卡二卡三卡四卡乱码视频 | 性欧美大战久久久久久久 | 日韩毛片视频 | 日本高清视频在线观看 | 天天舔天天爱 | 特别黄的免费视频大片 | 欧美视频区 | 青青草狠狠操 | 香蕉视频在线免费播放 | 午夜精品久久久久久久2023 | 欧美视频在线第一页 | 色中文在线| 日韩精品导航 | 天堂a在线 | 四虎影院官网 | 日本视频不卡 | 日本视频中文字幕 | 亚洲人成高清 | 日本三级视频在线观看 | 在线观看亚洲 | 一二三四社区在线高清3 | 四虎影院国产精品 | 亚洲第一页视频 | 青青草人人 | 天天射天天摸 | 天天影视色香欲综合网天天录日日录 | 揉美女胸的黄网站 | 亚州综合网 | 午夜久久久久久 | 四虎影院在线视频 | 人人爽天天爽 | 四虎永久在线免费观看 |