Java基礎---物件導向(2)

來源:互聯網
上載者:User

標籤:代碼實現   資料格式   意義   void   ring   ...   物件導向   講解   強制   


Java基礎—物件導向(封裝概述)

1.物件導向封裝的基本概述和使用

(1).什麼是封裝的思想
定義一個基本的student類:
成員變數:name,age
成員方法:show()方法

測試類別:
StudentDemo
建立student對象,並使用裡面的方法


我們在定義這一個案例的過程中,我們發現一個問題:
通過對象去給成員變數賦值,可以賦值一些非法的資料,如年齡我們定義的是int類型,也就是說我們賦值200也是合理的,但是在實際當中,這一個是不合理的,我們應該需要做一個限制,應該是
這樣子,我們在進行資料賦值之前,應該先對資料進行一個判斷。但是這一個判斷應該在哪裡進行比較合理,在調用的時候,StudentDemo類已經是一個測試類別,這裡一般就是建立對象,並調用方法
所以我們應該在student類裡定義這一個資料的校正。那麼在Student類的哪一個位置進行這一個資料校正呢,因為做資料校正要依靠一些邏輯語句。邏輯語句應該在方法中定義,所以我們應該在
student的類中提供一個方法,來對資料進行校正。
我們給出了一個方法進行資料的校正,但是在使用的時候,它偏偏不調用方法來進行賦值,還是直接賦值了,也就是說我們所設定的校正方法沒有起到作用,我們就該強制的要求要使用我們的方法
而不是直接調用成員變數來進行賦值。那麼如何去強制要求不能直接使用成員變數呢?
正對著一種情況,我們可以使用java所提供的關鍵字private,使用private修飾成員變數,這樣成員變數就只能夠在本類中進行訪問,而對外提供該成員變數的相應的getXXX()方法和SetXX()方法。

綜上所述,我們這裡面其實講述的就是一個封裝的過程以及封裝的一個思想。


(2).封裝
封裝就是指隱藏對象的屬性和實現細節,僅僅對外提供公用的訪問方式。也即是把成員變數的屬性私人化(使用private修飾),再對外提供公用的訪問方式(也就是響應的getXXX()方法和SetXX()方法)


(3).封裝操作的基本代碼實現

public class Student {
//姓名
private String name;
//年齡
private int age;

/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}

/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
if(age>120||age<0){
System.out.println("年齡有問題");
}else{
this.age = age;
}
}
}

(4).封裝的好處和設計原則
A.好處:
掩藏實現細節,對外只提供公用的訪問方式
提高了代碼的複用性
提高安全性

B:原則
把不需要對外界提供的內容掩藏起來
把屬性掩藏起來(也即是成員變數),提供公用的存取方法。

 


2.this關鍵字
this:表示當前類的對象的引用。簡單的計,它就是代表當前類的一個對象。
注意:誰調用這一個方法,在該方法的內部的this就代表誰。

this的應用情境:
解決局部變數隱藏成員變數(由於使用的時候變數的使用遵循就近原則)

//使用舉例:
public class Student {
//姓名
private String name;
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

//代碼使用詳解
setName()這一個方法中,存在著倆個name,一個是成員方法裡面的name,另一個是形式參數裡面的name,那麼在使用的時候是如何進行區分和參數的傳遞的呢?
由於參數的使用存在著就近原則,也就是說誰離我近,我就會把值賦給它,使用的時候參數的傳遞是這樣的:
如:
Student s =new Student();
s.setName("小明");
參數的傳遞過程中,變數值小明先是傳遞給了setName(String name)中的name,之後,這一個name是this.name=name中的右側name,由於this關鍵字表示的是當前類對象的使用,即
this.name=Student.name;也就是說傳遞給的是成員變數的:private String name中的name,這樣我們在外部調用該類的時候就可以把我們需要的參數賦值給學生類對象中的成員變數。

3.程式碼解析:Student s=new Student();在記憶體中做了哪一些事情
(1).把方法區裡面的Student.class載入到記憶體中
(2).在棧記憶體中為變數S開闢一個空間
(3).在堆記憶體中為學生對象申請一個空間
(4).給成員變數進行預設初始化--null,0
(5).給成員變數進行顯示初始化--具體的參數進行賦值(小明-18)
(6).通過構造方法,給成員變數進行初始化,就是進行新的賦值(null,0--->小明,18)
(7).這一個時候如果你要訪問記憶體中存在的值的話就是:小明,18
(8).然後就把堆記憶體中儲存變數的地址賦值給棧中的Student s,初始化資料完畢。


4.static關鍵字

(1).基本概述
我們的定義一個學生類,由于姓名和年齡都是變化的,所以我們需要定義一個變數來接受,但是我們在使用的時候所有的學生的國際都是中國的,使用一樣的國籍,我們在使用的時候每一次都還要
建立一個新的國籍,賦予相同的值,在堆記憶體中開闢空間,這樣的話就會浪費資源。
針對多個對象有共同的成員變數的時候,也即是說可以共同使用同一個變數的時候,java提供了關鍵字static

(2).static關鍵字的特點
A:隨著類的載入而載入(main方法也是static方法)
B:優先於對象存在
C:被類的所有對象所共用
如:一個班級公用一個編輯的編號
其實:這一個特點也就是告訴我們什麼時候使用靜態
如果說某一個成員變數是被所有的對象所共用的,那麼它就該被定義為靜態。
實際舉例:
飲水機(是一個班公用一個飲水機,應該使用靜態修飾)
水杯 (每一個人需要有一個水杯,所以不應該被定義為靜態修飾)
D:可以通過類名來調用
其實它本身也可以通過對象名來調用,這是因為它本身就是屬於一個類的內部變數,而且還是公用的。


(3).static關鍵字的注意事項
A:在靜態方法中是沒有關鍵字this的
如何理解呢?
靜態是隨著類的載入而載入,this是隨著對象的建立而存在。
靜態比對象先存在。所以前面進來的東西是不能夠訪問後面進來的東西。

B:靜態方法只能夠訪問靜態成員變數和靜態成員方法
靜態方法
成員變數:只能夠訪問靜態變數
成員方法:只能夠訪問成員方法

非靜態方法:
成員變數:可以是靜態,也可以是非靜態
成員方法:可以是靜態,也可以是非靜態成員方法

簡單的記:
靜態只能夠訪問靜態。


(4).靜態變數和一般成員變數的區別
A:所屬不同
靜態變數:靜態變數屬於類,所以也被稱為類變數
成員變數:成員變數屬於對象,所以也被稱為執行個體變數(物件變數)

B:在記憶體中的位置不同
靜態變數儲存於方法區的靜態區
成員變數儲存於堆記憶體內

C:記憶體中出現的時間不同
靜態變數隨著類的載入而載入,隨著累的消失而消失
成員變數隨著對象的建立而建立,隨著對象的消失而消失

D:調用不同
靜態變數可以通過類名調用,也可以通過對象調用
成員變數只能夠通過對象來調用。


5.main方法講解
puclic static void main(String[] args){......}

詳解:
public:公用的,訪問的許可權是最大的,由於main()方法是被jvm調用,所以許可權要夠大。
static:靜態,不需要建立對象,通過類名即可調用,方便jvm調用。
void :因為我們曾經說過,方法的傳回值是返回給調用者,而main方法是被jvm所調用,返回給jvm是沒有意義的。
main:是一個常見的方法入口。大多數的語言都是以main()方法作為入口。
String[] args:這是一個字串數組。值到哪裡去了?這個東西到底如何使用?怎麼給值?
最開始的時候這一個東西是為了接受鍵盤錄入而是用的,其資料格式是:
java MainDemo hello world java

 

Java基礎---物件導向(2)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.