面像对象(上)
一、面向?qū)ο?#xff08;OOP):
Object Oriented Programming? ? ? ? (Oriented:['??r?ent?d])
面向?qū)ο蟮娜筇匦?#xff1a;封裝、繼承、多肽。
?
?
二、類和對象:
類和對象是面向?qū)ο缶幊讨袃蓚€重要概念;
類(class)和對象(object,也被稱為實例,instance),類用于描述客觀世界里某一類對象的共同特性,而對象則是類的具體存在;
類可被認為是一種自定義的數(shù)據(jù)類型,可以使用類來定義變量,所有使用類定義的變量都是引用變量,它們將會引用類的對象;
?
1、類:
?
類包含三種常見的成員:構(gòu)造器、成員變量和方法;
構(gòu)造器:用于構(gòu)造該類的實例,java通過new關(guān)鍵字來調(diào)用構(gòu)造器,從而返回該類的實例;
成員變量:狀態(tài)數(shù)據(jù);
方法:該類或者該類實例的行為特征或者功能實現(xiàn);
?
1.1 成員變量:
語法格式:
[修飾符] 類型 成員變量名 [=默認值];
?
修飾符:可以省略,也可以是public、protected、private、static、final,其中public、protected、private只能出現(xiàn)其中的一個,可以與static、final組合起來修飾成員變量;
static:static修飾的成員表明它屬于這個類本身,而不屬于這個類的單個實例,通常把static修飾的成員變量和成員方法稱為類變量和類方法。不使用static修飾的成員變量和方法稱為實例變量,實例方法。靜態(tài)成員不能直接訪問非靜態(tài)成員。
?
1.2 成員方法:
? ? ? ? 語法格式:
[修飾符]? 方法返回值類型 方法名(形參列表)
{
? ? //方法體
}
?
1.3?構(gòu)造器:
語法格式:
[修飾符]? 構(gòu)造器名(形參列表)
{
? ? //方法體
}
?
構(gòu)造器名必須和類名相同;
類中沒有定義構(gòu)造器,系統(tǒng)將會為它提供一個默認的無參構(gòu)造器;
?
2、對象的產(chǎn)生與使用
?
2.1 創(chuàng)建對象
創(chuàng)建對象的根本途徑是構(gòu)造器,通過new關(guān)鍵字來調(diào)用某個類的構(gòu)造器來創(chuàng)建這個類的實例;
?
//調(diào)用Person的構(gòu)造器創(chuàng)建了一個Person實例
//將Person實例賦值給p變量
Person p = new Person();
?
在這行代碼中實際產(chǎn)生了兩個東西:一個是p變量(引用變量),一個是Person對象,p變量存放在棧內(nèi)存中,指向?qū)嶋H的Person對象,而真正的Person對象則存放在堆(heap)內(nèi)存中。從這個角度來看,引用變量和c語言里的指針很像,它們都是存儲一個地址值,通過這個地址來引用到實際對象。
?
java程序不允許直接訪問堆內(nèi)存中的對象,只能通過該對象的引用操作該對象。當訪問p引用變量的成員變量和方法時,實際上是訪問p所引用的對象的成員變量和方法。
?
//堆內(nèi)存里的對象可以有多個引用
//將p變量的值賦值給p1變量
Person p1 = p;
?
上面代碼把p變量的值賦予給p1變量,就是將p變量保存的地址賦值給p1變量,這樣p1和p就指向了同一個Person對象。p1和p訪問Person對象的成員變量和方法時,將返回同樣的結(jié)果。
?
如果堆內(nèi)存里的對象沒有任何變量指向該Person對象,那么程序?qū)o法訪問到該對象,這個對象也就變成了垃圾,java的垃圾回收機制將回收該對象,釋放該對象占所占用的內(nèi)存區(qū)。
?
?
2.2 對象的使用:
?
static修飾的成員變量和方法,可以通過類來調(diào)用,也可以通過實例來調(diào)用;沒有static修改的成員變量和方法必須通過實例來調(diào)用。?
?
類.成員變量|方法
實例.成員變量|方法
?
3、this關(guān)鍵字的使用?
?
this關(guān)鍵字總是指向調(diào)用該方法的對象;
this關(guān)鍵字的最大作用就是讓類中的一個方法,訪問該類中的另外一個方法或者實例變量;
static修飾的方法中不能使用this關(guān)鍵字,static修飾的方法不能訪問不使用static修飾的普通成員;
?
示例:定義一個Dog類,這個Dog對象的run()方法需要調(diào)用它的jump()方法,該如何實現(xiàn)
?
Dog類:
public class Dog {public void jump(){System.out.println("jump");}public void run(){Dog d = new Dog();d.jump();System.out.println("run");}}?
DogTest:
public class DogTest {public static void main(String[] args) {Dog dog = new Dog();dog.run();}}?
使用this關(guān)鍵字,簡化代碼:
?
this可以代表任何對象,當this出現(xiàn)在某個方法體中時,它所代表的對象是不確定的,但它所代表的類型是確定的,它所代表的對象只能是當前類,只有當這個方法調(diào)用時,它所代表的對象才被確定下來,誰在調(diào)用這個方法,this就代表誰。
?
Dog類:
?
DogTest(不需要做修改):
public class DogTest {public static void main(String[] args) {Dog dog = new Dog();dog.run();}}?
4、方法詳解:
?
4.1 方法的傳參機制:值傳遞
public class PrimitiveTransferTest {public static void swap(int a,int b){int temp = a;a = b;b = temp;System.out.println("swap方法里,a的值是"+a+";b的值是"+b);}public static void main(String[] args) {int a = 6;int b = 9;swap(a,b); // swap方法里,a的值是9;b的值是6System.out.println("交換結(jié)束后,變量a的值是"+a+";b的值是:"+b); // 交換結(jié)束后,變量a的值是6;b的值是:9 } }?
4.2 遞歸方法
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/aibaiyang/p/9191484.html
總結(jié)
- 上一篇: 「PKUSC2018」星际穿越 (70
- 下一篇: HTML-文字标签