新聞中心
目錄
方法
對(duì)方法的一些理解
設(shè)計(jì)方法的建議
方法的定義
面向?qū)ο蠛兔嫦蜻^(guò)程的區(qū)別
面向過(guò)程
面向?qū)ο?/p>
類和對(duì)象
類的構(gòu)造器(類的構(gòu)造函數(shù))
修飾詞:this
用于修飾屬性
用于修飾方法
this用于修飾構(gòu)造器
方法的重載
什么是方法的重載
方法重載的例子
第一個(gè)例子,重載是依靠不同的參數(shù)來(lái)區(qū)別而不是依靠不同類型的返回值來(lái)區(qū)別
第二個(gè)例子,參數(shù)個(gè)數(shù)不同情況下的重載
第三個(gè)例子,參數(shù)類型不同情況下的重載
第四個(gè)例子,參數(shù)位置不同情況下的重載
形參和實(shí)參
形參(形式參數(shù))
實(shí)參(實(shí)際參數(shù))
可變個(gè)數(shù)的形參(傳遞的參數(shù)個(gè)數(shù)是可變的)
基本格式
使用說(shuō)明
舉個(gè)栗子
權(quán)限修飾符(public、protected、default、private)
封裝
封裝的目的
封裝的作用
一個(gè)封裝例子
方法 對(duì)方法的一些理解
- 方法是解決一類問(wèn)題的步驟的有序結(jié)合
- 方法包含在類和對(duì)象之中
- 方法在一個(gè)類中被創(chuàng)建,在其他地方被調(diào)用
- 盡可能地使每一個(gè)方法實(shí)現(xiàn)一個(gè)功能,這樣一來(lái)可以方便進(jìn)行擴(kuò)展
[訪問(wèn)修飾符] 方法的返回值類型 方法名([參數(shù)類型 參數(shù)名]){
...
方法體
...
[return 返回值;]
}
- 訪問(wèn)修飾符表明了該方法的訪問(wèn)類型,訪問(wèn)修飾符可以是public、private、protected、default中的任意一種。
- 訪問(wèn)修飾符可以不寫(xiě),當(dāng)沒(méi)有寫(xiě)訪問(wèn)修飾符時(shí),默認(rèn)使用default作為訪問(wèn)修飾符。例如下面的代碼使用的便是default訪問(wèn)修飾符。
public class class1{ void fun1(){ System.out.println("這是一個(gè)方法"); } }
- 方法的返回值類型表明該方法最后將數(shù)據(jù)以什么數(shù)據(jù)類型返回給該方法的調(diào)用者。
- 方法名用于標(biāo)識(shí)一個(gè)方法,調(diào)用時(shí)通過(guò)方法名來(lái)選擇所要調(diào)用的方法。
- 參數(shù)部分用于定義該方法傳遞的參數(shù),一個(gè)方法可以有多個(gè)傳遞參數(shù),也可以沒(méi)有傳遞參數(shù)。
- 方法體:方法中需要執(zhí)行操作的部分。
- 返回值:返回一個(gè)值給該方法的調(diào)用者。
- 需要注意的是,當(dāng)返回值類型為void時(shí),方法不需要也不可以擁有返回值。
- 面向過(guò)程實(shí)現(xiàn)了一種解決問(wèn)題的步驟
- 使用函數(shù)實(shí)現(xiàn)解決問(wèn)題的步驟
- 在需要時(shí)通過(guò)函數(shù)調(diào)用來(lái)實(shí)現(xiàn)這些步驟,最終解決問(wèn)題
- 面向過(guò)程的性能比較高
- 比較注重解決問(wèn)題的過(guò)程
- 在內(nèi)容上,類是對(duì)象的一些屬性以及對(duì)象的一些行為方法
- 在定義上,類是某一類事物的整體描述(或者是定義)
- 面向?qū)ο髮?shí)際上就是以類的方式組織代碼,以對(duì)象的方式組織(或者是封裝)數(shù)據(jù)
- 對(duì)象就是類的具體化
- 類的抽象層級(jí)比較高,對(duì)象的抽象層級(jí)比較低
- 下面看一個(gè)簡(jiǎn)單的類和對(duì)象的關(guān)系:
//class1.java
public class class1{
//以人類為例
//定義一些屬性
private String country;//國(guó)家
private String area;//地區(qū)
private String city;//城市
private String address;//住址
private int age;//年齡
private String sex;//性別
private String name;//姓名
private String phone;//電話
//定義一些方法
//告訴別人自己的國(guó)家
public String getCountry() {
return country;
}
//告訴別人自己的地區(qū)
public String getArea() {
return area;
}
}
//class2.java
public class class2{
public static void main(String[] args) {
//創(chuàng)建一個(gè)對(duì)象(實(shí)例化一個(gè)類)
class1 c1 = new class1();
//輸出
System.out.println(c1.getCountry());
}
}
類的構(gòu)造器(類的構(gòu)造函數(shù))- 在創(chuàng)建一個(gè)對(duì)象時(shí),會(huì)調(diào)用該類的構(gòu)造函數(shù)
- 在沒(méi)有重寫(xiě)類的構(gòu)造函數(shù)時(shí),類默認(rèn)地會(huì)有一個(gè)構(gòu)造函數(shù),也就是說(shuō),即使一個(gè)類中一片空白,也會(huì)隱式地有一個(gè)方法,這個(gè)方法就是類的構(gòu)造函數(shù)。例如下面這個(gè)例子:
//class1.java
public class class1{
}
//class2.java
public class class2{
public static void main(String[] args){
class1 c1 = new class1();
//類class1中,什么內(nèi)容都沒(méi)有,但是在此處創(chuàng)建class1的對(duì)象可以成功地創(chuàng)建,這就是調(diào)用了隱式存在的類的構(gòu)造函數(shù)
}
}
- 類的構(gòu)造器有兩個(gè)特點(diǎn):①構(gòu)造器的名稱和類名是相同的;②類的構(gòu)造器沒(méi)有返回值。
- 類的構(gòu)造器的作用:在使用new關(guān)鍵字創(chuàng)建對(duì)象時(shí),實(shí)際上就是在調(diào)用類的構(gòu)造器
- 默認(rèn)地,類會(huì)有一個(gè)隱式的沒(méi)有任何傳遞參數(shù)的構(gòu)造器
- 如果定義了有傳遞參數(shù)的類的構(gòu)造器,那么便需要一并將沒(méi)有參數(shù)傳遞的類的構(gòu)造器顯示定義。例如:
//class1.java public calss class1{ int age; public class1(int i){ this.age = i; } //上面定義了有參構(gòu)造函數(shù),此處便需要一并顯式定義無(wú)參構(gòu)造函數(shù) public class1(){ this.age = 1; } }
- 在一個(gè)類中,如果要訪問(wèn)的內(nèi)容是類中的屬性,那么最好在屬性前加上this修飾詞。例如:
//this修飾屬性時(shí)的用法 this.屬性名 = 值或者是變量名;
- 為什么上面說(shuō)“最好加上this修飾詞”而不是“一定需要加上this修飾詞”,因?yàn)椴⒉皇撬星闆r下不加this修飾詞都會(huì)得到錯(cuò)誤的結(jié)果
- 當(dāng)沒(méi)有發(fā)生重名時(shí),即等式左邊的屬性名和等式右邊的變量名不重名時(shí),this修飾詞可以省略不寫(xiě),此時(shí)帶有this修飾詞和不帶有this修飾詞的效果相同。例如:
//class1.java public class class1{ int age; public void setAge(int num){ age = num; this.age = num; //上面兩種寫(xiě)法的效果相同,兩種寫(xiě)法屬性age都可以獲得num的值 } }
- 但是發(fā)生重名時(shí),即等式左邊的屬性名和等式右邊的變量名重名時(shí),this修飾詞不可以省略,當(dāng)this修飾詞省略時(shí),會(huì)獲得預(yù)期之外的效果。例如:
//class1.java public class class1{ int age; public void setName1(int age){ age = age; //當(dāng)發(fā)生重名并且不使用this修飾符的情況下,屬性的賦值會(huì)遵守“就近原則” //也就是說(shuō),此處等式左邊的age獲得的值,并不是setName1函數(shù)中傳遞進(jìn)來(lái)的參數(shù)age的值,而是這一個(gè)類中屬性age的值,因此執(zhí)行完這一句后,屬性age的值為0(相當(dāng)于把自己賦值給自己,什么都不會(huì)被改變) } public void setName2(int age){ this.age = age; //執(zhí)行完這一句后,屬性age的值為setName2函數(shù)中傳遞進(jìn)來(lái)的參數(shù)age的值 } }
- 在同一個(gè)類中,方法和方法之間可以互相調(diào)用
- 在這種情況下,調(diào)用時(shí),方法名前面的this可以有也可以沒(méi)有,不會(huì)影響最終的效果。例如:
//class1.java public class class1{ //計(jì)算兩數(shù)的和 public int add(int a,int b){ return a + b; } //計(jì)算一組數(shù)字的和 public int addArr(int[] nums){ int sum = 0; for(int i:nums){ sum = add(sum,i);//此處無(wú)論寫(xiě)不寫(xiě)this,調(diào)用的都是類class1下的add()方法,因此在方法調(diào)用時(shí),this是可以省略的 } return sum; } }
- 在同一個(gè)類中,構(gòu)造器之間可以互相調(diào)用
- 構(gòu)造器調(diào)用構(gòu)造器時(shí),需要用this修飾符對(duì)調(diào)用的構(gòu)造器進(jìn)行修飾
- 調(diào)用構(gòu)造器時(shí),調(diào)用語(yǔ)句需要放在構(gòu)造器的第一行
- 調(diào)用方法為:this(需要傳遞的參數(shù))
- 下面是一個(gè)構(gòu)造器調(diào)用構(gòu)造器的例子:
//class1.java public class class1 { int age; String name; //該類的無(wú)參構(gòu)造器 public class1() { //調(diào)用了一個(gè)該類的有參構(gòu)造器 this("張三"); age = 10; } public class1(String name) { this.name = name; } }
- 但是需要注意的是,在構(gòu)造器中可以調(diào)用該類的方法,但是在方法中不能調(diào)用該類的構(gòu)造器
- 在一個(gè)類中,允許存在多個(gè)同名方法,但是這些同名方法的傳遞參數(shù)是不同的
- 傳遞參數(shù)不同可以有這些情況:①參數(shù)的個(gè)數(shù)不同;②參數(shù)的類型不同;③參數(shù)的位置不同(這一種情況并不是在所有場(chǎng)合下都通用的)
//class1.java
public calss class1{
//有如下兩個(gè)同名方法,它們的參數(shù)相同但是方法的返回值不同
public int add(int a,int b){}
public double add(int a,int b){}
//如果將上面的代碼復(fù)制到IDE中,則編譯器會(huì)報(bào)錯(cuò),因?yàn)榉椒ǖ姆祷刂挡⒉蛔鳛榉椒ㄖ剌d的依據(jù)
}
第二個(gè)例子,參數(shù)個(gè)數(shù)不同情況下的重載//class1.java
public class class1{
//有以下兩個(gè)函數(shù),這兩個(gè)函數(shù)是重載的,它們的參數(shù)個(gè)數(shù)不同
public int add(int a,int b){}
public int add(int a,int b,int c){}
}
第三個(gè)例子,參數(shù)類型不同情況下的重載//class1.java
public class class1{
//下面幾種方法都是重載的,它們的參數(shù)類型不同
public double add(int a,int b){}
public double add(int a,double b){}
public double add(double a,int b){}
public double add(double a,double b){}
}
第四個(gè)例子,參數(shù)位置不同情況下的重載//class1.java
public class class1{
//參數(shù)位置不同情況下的重載
//這種情況需要特別注意,因?yàn)椴皇呛?jiǎn)單粗暴地交換參數(shù)的位置就是重載了
//先來(lái)看下面幾種是重載的情況
public void show(int a,int b,String c){}
public void show(int a,String c,int b){}
public void show(String c,int a,int b){}
//這幾種寫(xiě)法是可以成功重載的,簡(jiǎn)單地說(shuō),它們也是屬于參數(shù)類型不同的情況
//將上面三個(gè)重載函數(shù)保留,那么下面這些寫(xiě)法便不是重載,并且編譯器會(huì)報(bào)錯(cuò)
public void show(int b,int a,String c){}
public void show(String c,int b,int a){}
//上面兩個(gè)函數(shù)不能構(gòu)成重載,簡(jiǎn)單地說(shuō),它們的參數(shù)類型和已經(jīng)存在的同名函數(shù)的參數(shù)類型相同
//因此嚴(yán)格地說(shuō)來(lái),只有兩種情況構(gòu)成函數(shù)的重載
//1.參數(shù)的個(gè)數(shù)不同
//2.參數(shù)的位置不同
//用另一種方法分析,可能更容易看出上面函數(shù)不能重載的原因
//從函數(shù)的聲明來(lái)看,上面的函數(shù)聲明依次是這樣的
public void show(int,int,String);
public void show(int,String,int);
public void show(String,int,int);
public void show(int,int,String);
public void show(String,int,int);
//這樣便很容易可以發(fā)現(xiàn),有幾個(gè)函數(shù)在聲明時(shí)的參數(shù)類型順序是重復(fù)的,折舊造成這些參數(shù)類型順序重復(fù)的函數(shù)無(wú)法構(gòu)成重載
}
形參和實(shí)參
形參(形式參數(shù))- 在定義函數(shù)名和函數(shù)體的時(shí)候使用的參數(shù)
- 形參的目的是用來(lái)接收調(diào)用該函數(shù)時(shí)傳入的參數(shù)
- 在調(diào)用有參函數(shù)時(shí),主函數(shù)和被調(diào)函數(shù)之間存在的數(shù)據(jù)傳輸
- 實(shí)參才是調(diào)用有參函數(shù)時(shí)真正傳遞的內(nèi)容
- 下面是一個(gè)例子:
//class1.java public class class1{ public static void main(String[] args){ show("111");//這邊傳遞的參數(shù)便是實(shí)參 } public static void show(String str){//這邊的str便是形參 System.out.println(str); } }
數(shù)據(jù)類型...變量名
使用說(shuō)明- 可變個(gè)數(shù)的形參的聲明只能放在形參部分的末尾
- 一個(gè)函數(shù)的形參聲明部分只能有一個(gè)可變個(gè)數(shù)的形參
//class1.java
public class class1 {
public static void main(String[] args) {
show(1, "12", "34", "56");
}
public static void show(int i, String... str) {
for (String s : str) {
System.out.println(s);
}
}
}
權(quán)限修飾符(public、protected、default、private)權(quán)限修飾符 | 在類內(nèi)部的訪問(wèn)權(quán)限 | 在同一個(gè)包中的訪問(wèn)權(quán)限 | 在不同的包中的訪問(wèn)權(quán)限 | 在同一個(gè)項(xiàng)目中的訪問(wèn)權(quán)限 |
private | 可以被訪問(wèn) | 不可以被訪問(wèn) | 不可以被訪問(wèn) | 不可以被訪問(wèn) |
default | 可以被訪問(wèn) | 可以被訪問(wèn) | 不可以被訪問(wèn) | 不可以被訪問(wèn) |
protected | 可以被訪問(wèn) | 可以被訪問(wèn) | 可以被訪問(wèn) | 不可以被訪問(wèn) |
public | 可以被訪問(wèn) | 可以被訪問(wèn) | 可以被訪問(wèn) | 可以被訪問(wèn) |
封裝應(yīng)該將類中的一些內(nèi)容隱藏掉,只允許在類內(nèi)部被直接訪問(wèn),而在類外部只能通過(guò)方法調(diào)用的方式被訪問(wèn)
封裝的作用- 提高程序的安全性,保護(hù)數(shù)據(jù)
- 隱藏代碼的實(shí)現(xiàn)細(xì)節(jié)
- 統(tǒng)一接口
- 增加系統(tǒng)的可維護(hù)性
//class1.java
public class class1 {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//class2.java
public class class2 {
public static void main(String[] args) {
class1 c1 = new class1();
c1.setAge(20);
System.out.println(c1.getAge());
//若是通過(guò)c1.age直接訪問(wèn)類的成員變量,編譯器便會(huì)報(bào)錯(cuò),因?yàn)槌蓡T變量age是private類型,無(wú)法直接被外部訪問(wèn)
}
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享文章:java面向?qū)ο?part01-創(chuàng)新互聯(lián)
URL標(biāo)題:http://fisionsoft.com.cn/article/deopjs.html