Class(類)
定義
計算機
是按照一系列成為程序的指令運行的機器。
Android設備
便是計算機。
應用
是使用Java語言編寫的程序。
設備內部是稱為
變量
的容器, 用于儲存數字或文字片段等值
。
對象
是變量,但在一下兩方面特殊:第一,對象中可包含更小的變量,及對象的
域
。例如,表示房屋的對象可能包含一個color域。
第二,我們可以像對象附加稱為方法的一系列指令,實際上是小程序。house對象可能具有一個setColor方法,用于將房屋設置為不同的顏色。
對象分為多種
類
(類型)。針對每個類,我們必須編寫定義:即屬于各個類對象的域和方法列表。每個給定類的對象
都有一組相同的域
和方法
。
例如:每個house對象必須具有稱為color的域和稱為setColor的方法。但是每個house對象都可在其color域中包含不同的值:一個房子可以是紅色,另一個房屋為藍色。
在Java文件中編寫類的定義。由于該定義包含關于該類的所有重要數據,因此圖例使用文件表示類。屬于
類的對象
成為類的實例
。每個實例都具有在類定義中列出的所有域
和方法
。
類名
對象有多個
類
,給定類的對象
都有一組相同的域和方法。
例如,TextView類的每個對象都具有用于在屏幕上顯示文本的域
和方法
。
與此同時,ImageView類的對象具有用于顯示圖像的另外一組域
和`方法。請注意,同一類的兩個對象的域中可能包含不同的值。例如,TextVeiw類的每個對象的域中都儲存一段文版。在一個TextView對象中,此域可能包含“Hello”;在另一個TextView中,此域可能包含“Goodbye”。
在Java中,類名的開頭是大些字幕,并且為駝峰式大小寫,因此很容易識別。
Code
由于Android設備尚未可靠地理解人類語言,因此必須以較簡單的語言(例如Java)編寫應用。
使用Java編寫的指令成為代碼
,并且能為設備所理解。
但是,采用Java描述的細小步驟編寫應用可能會相當榮昌,因此我們首先用人類語言勾繪出應用的輪廓。這種復述成為偽代碼
,只能為人類所理解。
Field (域)
對象是變量,但在以下兩個方面特殊。第一,對象中可包含更小的變量,即對象的域。
例如,在MediaPlayer對象中可能包含多個域,用于儲存正在播放的聲音文件的名稱、音量等級、文劍回防的當前位置以及指示是否采用無線循環方式播放文件。第二,我們可向對象附加稱為方法的一系列指令,實際上是小程序。我們的MediaPalyer對象可能具有play、pause和stop方法。
對象域在創建對象時創立,在銷毀對象時銷毀。在對象的生命周期中,對象方法中的指令可使用域。
findViewById
給定類的每個對象都附有相同的方法集。
例如,活動類的每個對象都具有創建用戶界面對象的方法:即ImageView、TextView、Button等用戶能夠在屏幕上看到的內容。
創建視圖對象后,還需要使用活動對象分別對這些對象進行配置。這就是每個視圖對象都有一個ID編號的原因。
這些編號使得應用中使用Java編寫的部分與使用XML編寫的部分之間能夠進行通訊。
具體的說,利用這些編號,使用Java創建的對象方法可以調用使用XML創建的對象方法。
各視圖的ID編號儲存在可傳遞至活動方法的Java變量中。該變量通過在布局文件的視圖對象描述中寫入變量名稱進行創建。例如,在代碼示例中創建名為R.id.today的變量,用于儲存TextView的ID編號。通過在布局文件的TextView描述中寫入屬性android:id=“@id+/today”,可完成創建。
(R代表“資源”)
每個活動都有一個名為findViewById的方法,用于查找已給出其ID編號的視圖對象。代碼示例會將變量R.id.today傳遞給次方法,用于查找TextView。如果運行正確,返回值(方法生成的結果)將引用TextView,即允許活動調用TextView方法的一條信息片段。為方便使用此引用,必須將其儲存于只能儲存“引用TextView”這一種類型值的特殊用途變量中。
由于調用findViewById可查找許多不同類(TextView、ImageView等)的視圖對象,因此其返回值為常規用途引用,可能引用這些類中任何一個對象。必須將返回值從常規轉換(轉變)至特殊后,才能將該返回值儲存到特殊用途變量中。此方向的轉換成為向下轉換,由括號中的命令TextView執行。
另一項要求是,findViewById必須在執行setContentView后執行,該方法用于創建TextView及布局文件中描述的其他視圖對象。
<TextView
android:id="@+id/today"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
// Excerpt from the file MainActivity.java.
// When the app is launched, put the current date (but not the time) into the TextView.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView today = (TextView) findViewById(R.id.today);
if (today != null) {
// The Date object also contains the current time.
Date todaysDate = new Date();
DateFormat justTheDate = DateFormat.getDateInstance();
String s = justTheDate.format(todaysDate);
today.setText(s);
}
}
只要對象存在,就必須牢記使用全局變量存儲的信息。Android 慣例是以小寫字母 m 為開頭命名全局變
量,其中 m 代表 成員,也是“域”的另一種說法。