【Java零基礎(chǔ)入門篇】第 ③ 期 - 面向?qū)ο缶幊蹋ㄒ唬?/h2>
博主:命運之光
專欄:Java零基礎(chǔ)入門
博主:命運之光
專欄:Java零基礎(chǔ)入門
理解面向?qū)ο笕笾饕卣鳎?br> 掌握類與對象的區(qū)別與使用;
掌握類中構(gòu)造方法以及構(gòu)造方法重載的概念及使用;
掌握包的定義、包的作用等;
掌握方法的參數(shù)傳遞規(guī)則。
方 法
方法的定義
????方法在很多地方被稱為函數(shù)(在Java中英文單詞是Method,而在其他語言中為function),方法是一段可以被重復(fù)調(diào)用的代碼塊,實現(xiàn)一個功能,一個動作或一種行為。
方法定義語法如下:
修飾符 返回值類型 方法名稱( [ 參數(shù)類型 參數(shù)變量, ... ]) {
方法體(本方法要執(zhí)行的若干操作) ;
[ return [返回值] ; ]
}
-
修飾符 :public static ;
-
返回值類型:方法執(zhí)行結(jié)果的數(shù)據(jù)類型;
-
方法名: 符合標(biāo)識符命名規(guī)則;
-
參數(shù)列表:方法執(zhí)行需要的條件;
- 參數(shù)類型: 可以是基本數(shù)據(jù)類型,也可以是引用類型;
- 參數(shù)名: 即變量名;
-
方法體語句: 完成特定功能的代碼;
-
return: 返回,用來返回一個值或結(jié)束方法;
-
返回值: 方法執(zhí)行之后的結(jié)果,返回給方法的使用者,若方法沒有返回值,則返回值類型為void。
主方法
????Java的每一個應(yīng)用程序都必須包含一個main()方法,稱為主方法。主方法是程序開始執(zhí)行的位置,語法格式如下:
publlic static void main(String[ ] args){
//方法體
}
說明:
1、主方法是靜態(tài)的(static),所以如要直接在主方法中調(diào)用其他方法,則該方法必須也是靜態(tài)的;
2、主方法沒有返回值;
3、主方法的形參為字符串?dāng)?shù)組。其中args[0]~args[n]分別代表程序的第一個參數(shù)到第n個參數(shù)。(可以通過args.length獲取參數(shù)的個數(shù))
方法的調(diào)用
定義:使用方法的過程稱為方法的調(diào)用。
格式: 方法名([實參列表]);
- 方法需先定義,后使用;
- 若方法無參數(shù),調(diào)用時括號里什么都不寫,但括號不能省略。
無參數(shù)無返回值的方法
????例1:定義一個沒有參數(shù)沒有返回值的方法。
public class text1 {
public static void main(String args[]) {
printInfo(); // 直接調(diào)用方法
printInfo(); // 直接調(diào)用方法
}
public static void printInfo() { // 定義沒有參數(shù),沒有返回值的方法
System.out.println("*********************");
System.out.println("* www.yootk.com *");
System.out.println("*********************");
}
}
有參數(shù)無返回值的方法
形參:全稱形式參數(shù),是指方法定義中的參數(shù);
實參:全稱實際參數(shù),方法調(diào)用中的參數(shù);
????例2:定義一個有參數(shù)無返回值的方法。
public class text1 {
public static void main(String args[]) {
pay(10.0); // 調(diào)用方法
pay(-10.0); // 調(diào)用方法
}
//定義一個支付的操作方法,如果支付金額大于0則正常支付,否則會輸出錯誤提示信息
public static void pay(double money) { // 購買支付操作
if (money > 0.0) { // 現(xiàn)在已經(jīng)給錢
System.out.println("可以進(jìn)行支付!");
} else { // 不能夠支付
System.out.println("沒錢還買東西!");
}
}
}
帶返回值的方法
????我們經(jīng)常會根據(jù)一個方法產(chǎn)生的結(jié)果,去組織另外一段代碼邏輯,為了獲得該方法產(chǎn)生的結(jié)果,就需要方法能夠?qū)⒔Y(jié)果返回。
????例3:定義一個有返回值有參數(shù)的方法(比較兩個整數(shù)是否相等)。
public class text1 {
public static void main(String args[])
{
boolean is;
is = compare(40,40);
System.out.println("比較的結(jié)果是:"+is);
}
public static boolean compare(int x,int y){
return x==y;
}
}
通過賦值語句來保存調(diào)用方法后得到的返回值,并且,變量類型要和返回值類型一致
return后的數(shù)據(jù)類型需和方法返回值的類型匹配
注意事項
- 方法不能嵌套定義
- 方法的返回值類型為void,表示該方法沒有返回值,沒有返回值的方法可以省略return語句不寫,如果要編寫return,后面不能跟具體的數(shù)據(jù)。
- return語句下面,不能編寫代碼,因為永遠(yuǎn)執(zhí)行不到,屬于無效的代碼。
方法重載
在同一個類中的多個方法,它們的方法名相同,參數(shù)列表不同,這樣的情況,稱為方法重載。方法重載與修飾符和返回值類型無關(guān)。
參數(shù)列表不同:個數(shù)不同、類型不同或順序不同
調(diào)用方法的時候,Java虛擬機(jī)會通過參數(shù)的不同來區(qū)分同名的方法。
????例:觀察方法重載。
public class text1 {
public static void main(String args[]) {
// 方法重載之后執(zhí)行時會根據(jù)傳入?yún)?shù)的類型或個數(shù)的不同調(diào)用不同的方法體
System.out.println("兩個整型參數(shù):" + add(10, 20));
System.out.println("三個整型參數(shù):" + add(10, 20, 30));
System.out.println("兩個浮點型參數(shù):" + add(10.2, 20.3));
}
public static int add(int x, int y) { // add()方法一共被重載三次
return x + y;
}
public static int add(int x, int y, int z) { // 與之前的add()方法的參數(shù)個數(shù)不一樣
return x + y + z;
}
public static double add(double x, double y) {// 與之前的add()方法的參數(shù)類型不一樣
return x + y;
}
}
面向?qū)ο蠛喗?/h3>
面向過程(POP) 與 面向?qū)ο?OOP)
面向?qū)ο螅?/font>Object Oriented Programming
面向過程:Procedure Oriented Programming
面向?qū)ο螅?/font>Object Oriented Programming
面向過程:Procedure Oriented Programming
二者都是一種思想,面向?qū)ο笫?font color="red">相對于面向過程而言的。
面向過程,強(qiáng)調(diào)的是功能行為,以函數(shù)為最小單位,考慮怎么做。
面向?qū)ο?/font>,將功能封裝進(jìn)對象,強(qiáng)調(diào)具備了功能的對象,以類/對象為最小單位,考慮誰來做。
面向?qū)ο蠛兔嫦蜻^程的區(qū)別:
主要在于做事方式的不同,一個關(guān)注事物(對象),另一個關(guān)注于過程(步驟)。
面向?qū)ο蟮乃枷敫攀?/h4>
-
面向?qū)ο笏枷胩攸c
- 是一種更符合人們思考習(xí)慣的思想;
- 把復(fù)雜的事情簡單化;
- 把人們從執(zhí)行者變成了指揮者;
-
面向?qū)ο蟮某绦蜷_發(fā)
- 即不斷的找對象,使用對象,指揮對象做事情的過程。若沒有對象? 創(chuàng)建一個!
-
面向?qū)ο笏枷胩卣?/p>
- 封裝;
- 繼承;
- 多態(tài);
面向?qū)ο蟮闹饕卣?/h4>
-
繼承性
主要描述的是類與類之間的關(guān)系,通過繼承,可以在無需重新編寫原有類的情況下,對原有類的功能進(jìn)行擴(kuò)展。
-
多態(tài)性
指的是在程序中允許出現(xiàn)重名現(xiàn)象,它指在一個類中定義的屬性和方法被其它類繼承后,它們可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為,這使得同一個屬性和方法在不同的類中具有不同的語義。
-
封裝性
封裝是面向?qū)ο蟮姆椒ㄋ鶓?yīng)遵循的一個重要原則。它有兩個含義:一是指把對象的屬性和行為看成一個密不可分的整體,將這兩者“封裝”在一個不可分割的獨立單位(即對象)中。另一層含義指“信息隱蔽”,把不需要讓外界知道的信息隱藏起來,有些對象的屬性及行為允許外界用戶知道或使用,但不允許更改,而另一些屬性或行為,則不允許外界知曉;或只允許使用對象的功能,而盡可能隱蔽對象的功能實現(xiàn)細(xì)節(jié)。
類與對象
- 面向?qū)ο蠓治龇椒ǚ治鰡栴}的思路和步驟:
- 根據(jù)問題需要,選擇問題所針對的現(xiàn)實世界中的實體(一種事物)。
- 從實體中尋找解決問題相關(guān)的屬性和功能,這些屬性和功能就形成了概念世界中的類。
- 把抽象的實體用計算機(jī)語言進(jìn)行描述,形成計算機(jī)世界中類的定義。即借助某種程序語言,把類構(gòu)造成計算機(jī)能夠識別和處理的數(shù)據(jù)結(jié)構(gòu)。
- 將類實例化成計算機(jī)世界中的對象,對象是計算機(jī)世界中解決問題的最終工具。
類
面向?qū)ο笏枷胩攸c
- 是一種更符合人們思考習(xí)慣的思想;
- 把復(fù)雜的事情簡單化;
- 把人們從執(zhí)行者變成了指揮者;
面向?qū)ο蟮某绦蜷_發(fā)
- 即不斷的找對象,使用對象,指揮對象做事情的過程。若沒有對象? 創(chuàng)建一個!
面向?qū)ο笏枷胩卣?/p>
- 封裝;
- 繼承;
- 多態(tài);
-
繼承性
主要描述的是類與類之間的關(guān)系,通過繼承,可以在無需重新編寫原有類的情況下,對原有類的功能進(jìn)行擴(kuò)展。 -
多態(tài)性
指的是在程序中允許出現(xiàn)重名現(xiàn)象,它指在一個類中定義的屬性和方法被其它類繼承后,它們可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為,這使得同一個屬性和方法在不同的類中具有不同的語義。 -
封裝性
封裝是面向?qū)ο蟮姆椒ㄋ鶓?yīng)遵循的一個重要原則。它有兩個含義:一是指把對象的屬性和行為看成一個密不可分的整體,將這兩者“封裝”在一個不可分割的獨立單位(即對象)中。另一層含義指“信息隱蔽”,把不需要讓外界知道的信息隱藏起來,有些對象的屬性及行為允許外界用戶知道或使用,但不允許更改,而另一些屬性或行為,則不允許外界知曉;或只允許使用對象的功能,而盡可能隱蔽對象的功能實現(xiàn)細(xì)節(jié)。
類與對象
- 面向?qū)ο蠓治龇椒ǚ治鰡栴}的思路和步驟:
- 根據(jù)問題需要,選擇問題所針對的現(xiàn)實世界中的實體(一種事物)。
- 從實體中尋找解決問題相關(guān)的屬性和功能,這些屬性和功能就形成了概念世界中的類。
- 把抽象的實體用計算機(jī)語言進(jìn)行描述,形成計算機(jī)世界中類的定義。即借助某種程序語言,把類構(gòu)造成計算機(jī)能夠識別和處理的數(shù)據(jù)結(jié)構(gòu)。
- 將類實例化成計算機(jī)世界中的對象,對象是計算機(jī)世界中解決問題的最終工具。
類
Java中如何描述一個事物?
Java中通過“類”來描述事物,類主要由屬性和行為構(gòu)成。
類是一系列具有相同屬性和行為的事物的統(tǒng)稱。
我們在現(xiàn)實世界中看到的其實都是對象。
對象
現(xiàn)實世界中,萬事萬物皆對象,對象是某一類事物的某個具體存在,如張三、小明的書桌、教室的計算機(jī)、王五的汽車等,所以對象表示的是一個個獨立的個體。
通常都會將對象劃分為兩個部分,即動態(tài)部分與靜態(tài)部分。
靜態(tài)部分,顧名思義就是不能動的部分,這個部分被稱為“屬性”,任何對象都會具備其自身屬性,如一個人,它包括高矮、胖瘦、性別、年齡等屬性。
然而具有這些屬性的人會執(zhí)行哪些動作也是一個值得探討的部分,這個人可以哭泣、微笑、說話、行走,這些是這個人具備的行為即動態(tài)部分。
通過探討對象的屬性和觀察對象的行為了解對象。
類和對象
面向?qū)ο蟪绦蛟O(shè)計的重點是類的設(shè)計
類的設(shè)計,其實就是類的成員的設(shè)計
類:用來描述特征信息及功能等,不能實際使用。
對象:根據(jù)類的描述創(chuàng)造出來的,可以實際使用。
類的定義
定義類的過程,就是把一系列相關(guān)事物共同的屬性和行為抽取出來的過程。
事物的屬性,在類中叫成員變量;
事物的行為,在類中叫成員方法;
語法格式:
【修飾符】 class 類名稱{
成員變量定義; //屬性
成員方法定義; //行為
}
- 對于類(class)的權(quán)限修飾:可以用public和default(缺省)
- public類可以在任意地方被訪問;
- default類只可以被同一個包內(nèi)部的類訪問。
- 類的名稱符合合法的標(biāo)識符定義。
類的成員——屬性
屬性 = 成員變量 = field = 域、字段
語法格式:修飾符 數(shù)據(jù)類型 屬性名 ;
或 修飾符 數(shù)據(jù)類型 屬性名 = 初始化值 ;
說明1: 修飾符
常用的權(quán)限修飾符有:private、缺省、protected、public
說明2:數(shù)據(jù)類型
任何基本數(shù)據(jù)類型(如int、Boolean) 或 任何引用數(shù)據(jù)類型。
說明3:屬性名
屬于標(biāo)識符,符合命名規(guī)則和規(guī)范即可。
類的成員——方法
成員方法 = 函數(shù) = method
語法格式:
權(quán)限修飾符 返回值類型 方法名([參數(shù)類型 參數(shù)名1, 參數(shù)類型 參數(shù)名2……]){
//方法體語句
[ return 返回值;]
}
成員方法的格式說明 :
除了權(quán)限修飾符不加Static以外,其他同一般方法。
????舉例:定義一個person類
class Person{//定義成員變量(屬性)
String name; //姓名
int age; //年齡
boolean isMale; //性別
public void sleep(){
System.out.println(“人能睡覺”);
}
public void walk(){//定義成員方法(行為)
System.out.println(“人能走路……”);
}
}
????舉例:定義一個Book類
class Book { // 定義一個Book類
String title; // 書的名字
double price; // 書的價格
//輸出對象完整信息
public void getInfo() { // 此方法將由對象調(diào)用
System.out.println("圖書名稱:" + title + ",價格:" + price);
}
}
關(guān)于public class與class聲明類的區(qū)別:
-
public class:文件名稱必須與類名稱保持一致,在一個*.java文件里面只能夠有一個public class聲明,稱為主類,如果一個類需要被不同的包所訪問,那么一定要定義為public class;
- class:文件名稱可以與類名稱不一致,并且一個*.java文件里面可以有多個class定義,編譯后會形成多個*.class文件,這個類只能夠被本包所訪問。
對象的創(chuàng)建和使用
-
對象定義格式
格式一:聲明并實例化對象
類名稱 對象名稱 = new 類名稱 () ;
格式二:分步完成
聲明對象:類名稱 對象名稱 = null ;
實例化對象:對象名稱 = new 類名稱 () ; -
操作類結(jié)構(gòu):
- 對象.屬性:表示要操作類中的屬性內(nèi)容;
- 對象.方法():表示要調(diào)用類中的方法。
????案例: 使用類 —— 在主類中使用Book類。文章來源:http://www.zghlxwxcb.cn/news/detail-442386.html
class Book { // 定義一個新的類
String title; // 書的名字
double price; // 書的價格
public String getInfo() { // 此方法將由對象調(diào)用
return "圖書名稱:" + title + ",價格:" + price);
}
}
public class text1 {
public static void main(String args[]) {
Book bk = new Book() ; // 聲明并實例化對象
bk.title = "Java開發(fā)" ; // 操作屬性內(nèi)容
bk.price = 89.9 ; // 操作屬性內(nèi)容
System.out.println (bk.getInfo()) ; // 調(diào)用類中的getInfo()方法
}
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-442386.html
對象內(nèi)存分配
- 類本身屬于引用數(shù)據(jù)類型,對于引用數(shù)據(jù)類型的執(zhí)行分析就必須結(jié)合內(nèi)存操作來看:
- 堆內(nèi)存(heap):保存每一個對象的屬性內(nèi)容,堆內(nèi)存需要用關(guān)鍵字new才可以開辟,如果一個對象沒有對應(yīng)的堆內(nèi)存指向,那么將無法使用;
- 棧內(nèi)存(stack):保存的是一塊堆內(nèi)存的地址數(shù)值,可以把它想象成一個int型變量(每一個int型變量只能存放一個數(shù)值),所以每一塊棧內(nèi)存只能夠保留一塊堆內(nèi)存地址;
到了這里,關(guān)于【Java零基礎(chǔ)入門篇】第 ③ 期 - 面向?qū)ο缶幊蹋ㄒ唬┑奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!