构造方法 与 方法重载
在上一章博文《Java 基礎(chǔ)講解》中,我們了解了JAVA編程語言的優(yōu)點、基本輸出方法、以及八大基本類型 和 類 的概念。那么,本人在這一篇博文中位同學(xué)們介紹兩個在JAVA語言中兩種十分常見的手段——構(gòu)造方法 和 方法重載。
首先,本人來講解一下方法: JAVA語言中的 方法,就相當(dāng)于我們在C語言中的 函數(shù)。
(在我們學(xué)習(xí)JAVA的前幾節(jié)課,我想聲明一點:我們學(xué)習(xí)C語言雖然有很多和JAVA語言是一致的,但是,我們要盡快將術(shù)語更正過來,不能一味地用在C語言中的習(xí)慣,只有不斷汲取優(yōu)良的知識,并改掉之前的略劣的思想,我們才能進步)
在了解了“方法”之后,我們現(xiàn)在就進入主題。
構(gòu)造方法:
什么是“構(gòu)造方法”呢?
在這里,本人通過一個例子來為同學(xué)們介紹。
還是上節(jié)課的屏幕點坐標(biāo)的處理,我們先將上節(jié)課的代碼拿出來:
SimplePoint.java:
class SimplePoint {
int row;
int col;
void showPoint() {
System.out.println("(" + row + "," + col + ")");
}
}
DemoSimplePoint.java:
class SimplePointDemo {
public static void main(String[] arg) {
SimplePoint b = new SimplePoint();
b.row = 10;
b.col = 20;
b.showPoint();
}
}
相信學(xué)習(xí)過上節(jié)課的同學(xué)們都不會對這里的代碼產(chǎn)生任何疑惑。
那么我現(xiàn)在來提出一個要求:
要求在我們定義一個類的實例時,就要對其的所有成員賦值。
這個要求,對于學(xué)到目前課程的同學(xué)們來說,幾乎是不可能完成的,那么,現(xiàn)在我來介紹一個方法,來解決這個問題——構(gòu)造方法
我先來介紹一下構(gòu)造方法的規(guī)則:
構(gòu)造方法的規(guī)則
1.構(gòu)造方法必須與類同名;
2.構(gòu)造方法不能聲明返回值(void也不行);
3.用戶不能調(diào)用構(gòu)造方法;
4.構(gòu)造方法在new時被調(diào)用;
5.構(gòu)造方法的主要目的,是初始化各成員的值( 若一個類如果沒有寫構(gòu)造方法的話,就默認(rèn)如下構(gòu)造方法: 對所有成員以此方式賦初值: 0(byte、char、short、int、long類型)
0.0(float、double類型) false(boolean類型) null(類類型,這里可以理解類類型的變量為“指針”) )
那么,我們現(xiàn)在來用代碼實現(xiàn)一下上面的要求:
SimplePoint.java:
public class SimplePoint{
private int row; //private表示這個變量只能在該類中被調(diào)用。用于防止外類修改該成員
private int col;
public MecPoint(int x, int y) { //這就是我們所謂的“構(gòu)造方法”
setRow(x);
setCol(y);
}
public void setRow(int x) {
if(x <= 1 || x > 25) { //對x范圍進行約束
x = 12;
}
row = x;
}
public void setCol(int y) {
if(y <= 1 || y > 80) { //對y范圍進行約束
y = 40;
}
col = y;
}
public void printPoint() {
System.out.println("(" + row + "," + col +")");
}
}
那么,以上就是構(gòu)造方法的例子和規(guī)則了。
現(xiàn)在我們來進入第二個課題——方法重載吧!
方法重載:
方法重載,這個知識點,真的讓我稍微理解到了一些“面向?qū)ο蟆钡母杏X,因為它可以讓你重復(fù)定義一個方法,對于重載的不同方法,也有不同的處理方式,這就意味著,我們要求用戶輸入的內(nèi)容不再單一,而是幾乎能滿足各種合法輸入內(nèi)容.
說了這么多,現(xiàn)在我來介紹下“方法重載”的規(guī)則吧:
方法重載的規(guī)則:
(1)方法的名稱相同;
(2)參數(shù)個數(shù) 和 參數(shù)類型 不同;
(3)返回值類型的差異并不是決定性因素; ((1)和(2)是決定性因素)
(4)只要滿足(1)和(2),構(gòu)造方法也可以重載。
好了,還是接上面的例子,我們現(xiàn)在要求用戶輸入一個參數(shù)還是兩個參數(shù),甚至無參或者參數(shù)是一個對象(類型是一個 類 的變量)也可以,那么相關(guān)代碼如下:
SimplePoint.java:
public class SimplePoint{
private int row; //private表示這個變量只能在該類中被調(diào)用。用于防止外類修改該成員
private int col;
public SimplePoint() { //無參構(gòu)造方法
System.out.println("This is none argument constructor!");
setRow(0);
setCol(0);
}
public SimplePoint(int x, int y) { //2個參數(shù)的構(gòu)造方法
System.out.println("This is 2 argument constructor!");
setRow(x);
setCol(y);
}
public SimplePoint(int x) { //一個參數(shù)的構(gòu)造方法
System.out.println("This is signle argument constructor!");
setRow(x);
setCol(0);
}
public SimplePoint(SimplePoint point) { //對象作為參數(shù)的構(gòu)造方法
System.out.println("This is object argument constructor!");
setRow(point.row);
setCol(point.col);
}
public void setPoint(int x, int y) {
setRow(x);
setCol(y);
}
public void setPoint(int x) {
setPoint(x, 0);
}
public void setPoint(SimplePoint source) {
setPoint(source.row, source.col);
}
public void setRow(int x) {
if(x <= 1 || x > 25) { //對x范圍進行約束
x = 12;
}
row = x;
}
public void setCol(int y) {
if(y <= 1 || y > 80) { //對y范圍進行約束
y = 40;
}
col = y;
}
public void printPoint() {
System.out.println("(" + row + "," + col +")");
}
}
由于本人在本人的《數(shù)據(jù)結(jié)構(gòu)與算法》專欄提到過,我們寫的代碼,要邏輯清晰,方法(函數(shù))功能單一,且總功能齊全,所以我們現(xiàn)在來優(yōu)化一下上述的兩個文件的代碼:
MecPoint.java:
(由于本人的技術(shù)都是微易碼教主傾囊相授,所以本人將該文件命名為MecPoint.java)
public class MecPoint{
private int row; //private表示這個變量只能在該類中被調(diào)用。用于防止外類修改該成員
private int col;
public final int MIN_ROW = 1;
public final int MAX_ROW = 25;
public final int DEFAULT_ROW = 12;
public final int MIN_COL = 1;
public final int MAX_COL = 80; //屏幕點坐標(biāo)范圍:共25行、80列
public final int DEFAULT_COL = 40; //默認(rèn)屏幕點坐標(biāo)錯誤時,設(shè)為中值
public MecPoint() {
System.out.println("This is none argument constructor!");
setRow(0);
setCol(0);
}
public MecPoint(int x, int y) {
System.out.println("This is 2 argument constructor!");
setRow(x);
setCol(y);
}
public MecPoint(int x) {
System.out.println("This is signle argument constructor!");
setRow(x);
setCol(0);
}
public MecPoint(MecPoint point) {
System.out.println("This is object argument constructor!");
setRow(point.row);
setCol(point.col);
}
public void setPoint(int x, int y) {
setRow(x);
setCol(y);
}
public void setPoint(int x) {
setPoint(x, 0);
}
public void setPoint(MecPoint source) {
setPoint(source.row, source.col);
}
public void setRow(int x) {
if(x <= MIN_ROW || x > MAX_ROW) { //對x范圍進行約束
x = DEFAULT_ROW;
}
row = x;
}
public int getRow() {
return row;
}
public void setCol(int y) {
if(y <= MIN_COL || y > MAX_COL) { //對y范圍進行約束
y = DEFAULT_COL;
}
col = y;
}
public int getCol() {
return col;
}
public void printPoint() {
System.out.println("(" + row + "," + col +")");
}
}
可以看到,我新加入了三個函數(shù):讀取橫坐標(biāo)、讀取縱坐標(biāo)、移動坐標(biāo)函數(shù),
并且編寫了好多類型為“public final int”的變量,對于這里的類型,可以理解為是int型的“宏”(這個知識點本人將在今后的博文中進行詳細(xì)講解),這樣我們的代碼邏輯就十分清晰了!
那么,現(xiàn)在,具體的兩個課題都已經(jīng)講解完成了,現(xiàn)在本人來展示下,具體怎么調(diào)用這些方法:
DemoMecPoint.java:
public class DemoMecPoint{
public static void main(String[] args) {
MecPoint pointFirst = new MecPoint();
System.out.println("演示 無參 構(gòu)造結(jié)果:");
pointFirst.printPoint();
MecPoint pointSecond = new MecPoint(5, -7);
System.out.println("演示 雙參 構(gòu)造結(jié)果:");
pointSecond.printPoint();
MecPoint pointThird = new MecPoint(20);
System.out.println("演示 單參 構(gòu)造結(jié)果:");
pointThird.printPoint();
MecPoint pointForth = new MecPoint(pointFirst);
System.out.println("演示 對象 構(gòu)造結(jié)果:");
pointForth.printPoint();
}
}
那么,現(xiàn)在本人來展示下代碼的運行結(jié)果:
那么,到目前為止,這篇博文的所有內(nèi)容就講解完成了。
JAVA語言,相對于剛接觸的同學(xué)來說,可能還會有些不適應(yīng),但是,隨著深入學(xué)習(xí),我敢保證,學(xué)懂了JAVA,同學(xué)們就會非常抵觸C語言,因為JAVA實在太自由、太方便了!
若是對本片博文中的 fianl 關(guān)鍵字和我們一直在使用的 static 關(guān)鍵字有疑問的同學(xué),請觀看本人的博文——《詳解 final 和 static》
總結(jié)
以上是生活随笔為你收集整理的构造方法 与 方法重载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开心消消乐隐藏关150怎么过
- 下一篇: reduce()方法