黑馬程序員——java第五天:面向對象(類、對象、變量、封裝、構造、this)

------- android培訓java培訓、期待與您交流! ---------- 

類與對象的關係:

面向對象三個特徵:封裝、繼、多態

開發無非就是找對象用,沒有對象就見對象再用,並維護對象之間的關係。

類與對象的關係

類就是對現實生活中事物的描述。對象就是這類事物,事實存在的個體。

映射到java中,描述就是class定義的類,具體對象就是對應java在堆內存中用new建立的實體。

class  c = new class();c爲引用型變量,爲類類型變量,類類型變量指向對象。

對象的特點在於封裝數據。

成員變量和局部變量:

類、成員、實例、局部、靜態、全局區別?

首先:類變量和靜態變量是一回事,你可以認爲是一個人的大名和小名。
之所以叫類變量是因爲這類變量是隨着類的加載而存在,隨着類的釋放而消失。
之所以叫靜態變量可能是因爲它前面是被static(靜態的)所修飾。
第二:成員變量和實例變量也是一回事,你可以認爲是一個人的大名和小名。
之所以叫成員變量是因爲它作用範圍是在這個類中,成員變量和局部變量是相對的。
之所以叫實例變量是因爲它是隨着對象(實例)的創建而存在,隨着對象的消失而消失
局部變量是存在於函數中的變量,作用範圍只在這個函數中有效。
還有至於你說的那個全局變量應是在C語言中的,在java中沒有全局變量一說。

public class Car{

String color;//成員變量、實例變量

static int num;//靜態變量、類變量

Car(){

num=4;

color="red";

}

public static void main(String args[]){

Car ca=new Car();

run(ca); 

}

static void run(Car a){

       int jubu=8;                       //局部變量

System.out.print(a.num+","+a.color+","+jubu);

}

}


 

作用域和在內存中的位置:

成員變量:作用於其所在的整個類中。在堆內存中,因爲對象的存在,纔在內存中存在。

局部變量:作用於函數和語句中。存在於棧內存中。

注意:如果有一個類,創建了這個類的兩個對象a。用a調用這個類的屬性並改變屬性的值(a.屬性=123;),其實在這個類中並沒有改變它的值,只是改變了這個對象a在堆中創建的實體中的這個屬性的值,準確的說就是改變的是這個對象屬性的值。再創建這個類的另一個對象b。那麼b.屬性並不是被a所改變,還是原來類中定義的那個值。(把類看做是圖紙,把對象看做根據圖紙建造的建築物。根據實際一棟建築物改造並不影響另一棟建築物按照圖紙所建成型的樣式。)。

匿名對象的應用:

例子:

class  car{

new car();//此就是創建的匿名對象。

}

匿名對象使用方式一:當對對象的方法只調用一次時,可以用匿名對象來完成,這樣寫比較簡化。

如果對一個對象進行多個成員調用,必須給合格對象起個名字。

class demo1{

 /*static*/int a;//此處不可一是static類型的,因爲static是放在方法內存中的,他是所有對象共享的。

 /*static*/ String b;

 void run(){

 System.out.print("a="+a+",b="+b);

 }

}

public class demo{

 public static void main(String[] args){

 new demo1().a=5;        

 new demo1().b="kess";  

 new demo1().run();

 }

}匿名對象使用方法二:可以將匿名對象作爲實際參數進行傳遞。

例如:

publicclass Car{

intnum=4;

String color="red";

publicstaticvoid main(String args[]){

run(new Car());

}

staticvoid run(Car a){

    a.color="blue";

    a.num=5;

System.out.print(a.num+","+a.color);

}

}

封裝概述:

封裝:是指隱藏對象的屬性和和實現細節,只對外提供公共訪問方式。

好處:將變化隔離,便於使用,提高重用性,提高安全性。

封裝原則:講不需要對外提供的內容隱藏起來。(把屬性都隱藏,提供公共方法供訪問)

函數、類、包、等都是封裝體,函數是最小的封裝體。

修飾符:

public:公有,權限無限大;

private:私有,權限最小。

封裝privateprivate僅僅爲封裝的一種表象形式)

private:私有修飾符。權限修飾符中的一種。用於修飾類中的成員(成員變量、成員方法),私有隻有在本類中有效。

每個屬性都可以被私有化,都可能有get方法和set方法。

成員私有化以後之所以對外提供訪問方發,就是因爲可以在訪問方法中加入裸機判斷等語句,對訪問的數據進行操作,提高代碼的健壯性。

構造函數:

當一個類沒有定義構造函數時,那麼系統會默認給該類加入一個空參數的構造函數。

如:class demo{

demo(){}    //如果沒有構造函數系統默認的構造函數就是這樣。

}

構造函數的特點1、函數名與類名相同。

                                     2、不用定義返回值類型。  //void也是一種返回值類型

                                     3、不可以寫retrurn語句。

作用:給對象初始化。

注意:1可以有多個構造函數,他們是以方法的重載的形式存在的。

           2當對象已建立(class c=newclass();)就執行了與之對應的構造函數。和一般函數不同的是一般函數是對象調用才執行,給對象添加對象具備的功能。

           3一個對象建立,構造方法只運行一次,也就是說這個對象只初始化一次。而一般函數可以被調用多次。

什麼時候定義構造函數?

        當分析事物時,該事物存在具備一些特徵或者行爲,那麼將這些內容定義在構造方法中。

例子:轎車有四個輪子,紅顏色。

publicclass Car{

intnum;

String color;

Car(){

num=4;

color="red";

}

publicstaticvoid main(String args[]){

Car ca=new Car();

run(ca);

}

staticvoid run(Car a){

System.out.print(a.num+","+a.color);

}

}

靜態成員等程序運行完隨着類的釋放而釋放。你再用其他主函數調用 run方法就會變成初始值了。

靜態成員應該也是存儲在堆內存的。

構造代碼塊:

class people{

{

   System.out.println(“你好”)//在這個代碼塊中的爲構造代碼塊

}

public static void mainString[] args{

 

}

}

作用:給對象進行初始化,應有於所有隻要建立的對象中(相當於對象的構造方法,只是他應用於所有對象),先於構造方法執行。對象已一建立就運行。

和構造方法的區別:構造代碼塊是給所有對象進行統一初始值,而構造方法是給對應的對象初始化(因爲構造函數可以有幾個(方法的重載形式存在))。

構造代碼塊中是所有對象的共有特性,構造代碼塊中定義的是不同對象共性的初始化內容。

關鍵字——this

(在方法中,局部有用局部的屬性,局部沒有到成員裏找。局部有的屬性成員裏也有,沒有特殊說明用的就是局部的屬性,要想用成員的屬性就在屬性前加this.this.屬性))

this代表本類的對象(此對象爲this所在函數所屬對象的引用(也就是哪個對象調用this所在的方法,就代表哪個對象))

例:

class Car{

private int num;

public setNum(int number){

this.num=number;

}

Car ben=new Car();

ben.setNum(8);

}

this的應用:

當定義類中功能時,該函數內部要用到調用該函數的對像時,這是用this來表達這個對象。

(但凡本類功能內部使用了本類對象都用this表示)

this在構造函數間的調用:

構造函數間調用不同於一般函數間的調用。

classdemo{

demoString a.int b{

this();     //此處就是調用下面demo(){System.out.pringt(“那就好”)}構造方法。

}

demo(){

System.out.print(“那就好”)

}

publicstatic void mainString[] args{

demop=new demo(“str”,123);    //此處建對象是就會用到上面demoString a.int b)構造方法,在執行時this();又用到了demo()構造方法,其this就代表p這個對象,因爲是它讓demo()運行的。

}

}

注意:1this語句只能定義在構造函數的第一行,因爲初始化要先執行,在執行自己的,如有重複的初始值,就把調用的那個構造函數的初始值覆蓋掉,用自己的初始值。

     2一般函數說不能調用構造函數的,因爲this語句不能用在一般函數中。

 ------- android培訓java培訓、期待與您交流! ----------詳細請查看:http://edu.csdn.net

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章