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 代表 成员,也是“域”的另一种说法。