《Android程序设计》一2.3 作用域

2.3 作用域

作用域决定了程序中的变量、方法和其他符号的可见范围。任何符号在其作用域外都是完全不可见的,不能被使用。在这一节我们将简要地介绍作用域的主要内容,从最高层开始。

2.3.1 Java包

Java包提供了一种机制,它把相关类型分组到一个全局唯一的命名空间。这种分组机制可以防止在一个包的命名空间内的标识符和其他开发人员在其他命名空间内创建和使用的标识符冲突。
一个典型的Java程序由很多Java包的代码组成。典型的Java运行时环境提供了如java.lang和java.util这样的包。此外,程序可能会依赖于其他通用的库,类似于org.apache树。传统上,应用代码(你所创建的代码)在你所创建的包内,包名是通过反转域名并附加程序名字生成的。因此,如果你的域名是androidhero.com,你的包所属的树的根是com.androidhero,则可以把代码放到如com.androidhero.awesomeprogram和com.androidhero.geohottness.service这样的包中。用于Android应用的典型的包在布局上会包含一个持久性包、UI包和负责应用逻辑和控制器代码的包。
包除了定义了全局唯一的命名空间外,包内对象的成员(成员变量和方法)之间的可见性也不同。类的内部变量对于在同一个包内的类是可见的,而对于其他包内的类则是不可见的。这个话题在后面还会进一步探讨。
声明一个类属于某个包的方法是,在定义类的文件的最上方,使用package这个关键字按照下面这个方式声明:
package your.qualifieddomainname.functionalgrouping
不要过分简化包名!因为一个快速、临时的实现方式可能需要使用很多年,如果不能保证包名唯一,那么以后一定会深受其困扰。
一些大型的项目通过使用完全不同的顶级域名来实现公有API包和这些API的实现之间的隔离。举个例子,Android API使用顶级包名android,这些API的实现则在com.android包内。Sun的Java源代码采用的机制也类似于此。公有API在Java包内,但是这些API的实现则放在了sun包内。在任意一种情况下,如果一个应用导入的是某个实现包,则这个应用会反复无常,因为它依赖于一些非公有的API。
虽然把代码添加到已有的包内是可以的,但通常认为这是一种不好的做法。通常情况下,除了名字空间,包通常是一棵源代码树,其至少和逆转的域名一样高。虽然这只是传统习惯,但是Java开发人员通常会期望com.brashandroid.coolapp.ui这个包中包含了CoolApp UI的所有源代码。如果另一棵树的某些地方也有CoolApp UI的一些代码,很多人会觉得很不习惯。
注意: Android应用框架中也有包的概念。但它不同于这里所说的包,在第3章会对Android应用框架的这种包进行专门说明。不要把它和Java的包相混淆。

2.3.2 访问修饰符和封装

前文提过,类的成员有特殊的可见性规则。大多数Java块中的定义是有作用域的:它们只在代码块本身及内嵌于其中的代码块中可见。然而,类中的定义在代码块外也可能是可见的。Java支持类将其顶级成员(其方法和成员变量)通过访问修饰符(access modifiers)发布给其他类的代码。访问修饰符关键字修改了声明的可见性。
在Java中有3个访问修饰符关键字:public、protected和private。共支持4种访问级别。访问修饰符影响的是类成员在类外面的访问性,但类内部的代码块遵循的是普通的作用域,不需要考虑访问修饰符的影响。
private修饰符的限制最高。带private关键字的声明在代码块外是不可见的。这种声明是最安全的,它会确保仅在类的内部会有指向这个声明的引用。private声明越多,类就越安全。
限制程度仅次于private修饰符的是默认的访问限制,即package访问。没有任何修饰符的声明属于默认情况,默认的访问可见性是指只能在同一个包中的其他类中可见。默认访问是创建对象共享的一种非常便捷的方式,Java的默认声明和C++中的friend声明
类似。
protected访问修饰符除了支持所有的默认访问权限之外,还允许访问子类。任何包含protected声明的类都能够访问这些声明。
public访问修饰符是限制条件最弱的修饰符,其允许从任何地方对它进行访问。
下面的这个例子对这些修饰符的使用方式进行了具体的演示。有4个类,分别属于两个不同的包over.here和over.there,这4个类都引用了其中类Accessible中声明的成员变量:



时间: 2024-10-24 18:03:58

《Android程序设计》一2.3 作用域的相关文章

Android程序设计之AIDL实例详解_Android

通常来说,AIDL这项技术在我们的应用开发过程中并不是很常用,虽然新浪微博提供了SSO登录,但是其原理就是使用AIDL.本文就以完整的实例形式讲述了AIDL的原理及实现方法. AIDL(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要在一个Activity中, 访问另一个Service中的某个对象, 需要先将对象转化成 AIDL可识别的参数(可能是多个参数), 然后使用AIDL来传递这些参数,

Android程序设计之AIDL实例详解

通常来说,AIDL这项技术在我们的应用开发过程中并不是很常用,虽然新浪微博提供了SSO登录,但是其原理就是使用AIDL.本文就以完整的实例形式讲述了AIDL的原理及实现方法. AIDL(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要在一个Activity中, 访问另一个Service中的某个对象, 需要先将对象转化成 AIDL可识别的参数(可能是多个参数), 然后使用AIDL来传递这些参数,

《Android程序设计》一3.4 静态应用资源和上下文

3.4 静态应用资源和上下文 应用可能需要存储大量的数据来控制其运行时的行为.其中有些数据描述了应用环境:应用名称.注册的intent和需要的许可条件等.这些数据存储在名为manifest的文件中.其他的数据也可能是要显示的图片或简单的文本字符串,以指出要使用什么样的背景颜色或字体.这些数据称为resources.所有这些信息一起构成了应用的context(上下文),在Android中对这些信息进行访问需要借助于类Context.类Activity和类Service都是对类Context的扩展,

《Android程序设计》一1.3 SDK的组件

1.3 SDK的组件 Android SDK的主体是通用组件,辅以一些专用组件.在很多情况下,配置.插件和扩展是这些组件在Android中的实现形式.Android SDK的开发是一个对现代化和完整的SDK进行高效开发的研究.Google为了能够快速地把Android推向市场采用了这种方式.在探索Android SDK的过程中,你会感受到这一点.Eclipse.Java语言.QEMU及其他已有的平台.工具和技术一起组成了Android SDK最重要的组成部分. 在创建简单的应用来确认SDK安装的

《Android程序设计》一1.1 Android SDK的安装和系统需求

1.1 Android SDK的安装和系统需求 要安装Android SDK,需要两个系统软件,它们不是Android SDK的一部分:即Java开发工具包(JDK)和Eclipse集成开发环境(IDE).这两个系统没有作为Android SDK的一部分进行提供是考虑到你可能已在非Android软件的开发中使用它们,或者你的系统中可能已经安装了这两个系统软件,而在一个系统上安装这两个软件的不同版本可能会导致版本冲突. Android SDK和最近发布的几个版本的JDK和Eclipse IDE都是

《Android程序设计》一1.2 小试牛刀:确认安装是否能够正常工作

1.2 小试牛刀:确认安装是否能够正常工作 如果遵循本章前面给出的步骤, Android SDK安装就完成了.但为了确保安装能够正常工作,创建一个简单的Android应用进行验证. 1.2.1 创建Android项目 创建简单的Android应用的第一步是创建Android项目(Android Project).Eclipse会把工作项组织成项目,当指定某项目为Android项目后,Eclipse就会自动关联该项目所需要使用的ADT插件和其他Android工具. 注意: 创建Android项目所

《Android程序设计》一1.4 保持版本最新

1.4 保持版本最新 JDK.Eclipse和Android SDK源于不同的供应商.用于开发Android软件的工具可能变化非常快.这是在本书(尤其是本章)中,建议你通过查看Android开发者网站来获取工具的最新兼容版本的相关信息的原因.即使在学会了开发Android软件之后,保持软件工具的及时更新和可兼容性也很有可能是一件必要的任务. Windows.Mac OS X和Linux等系统自身都带有自动更新机制,能够使你的软件版本保持最新.但是Android SDK的这种整合方式所带来的一个后

《Android程序设计》一3.8 Android应用打包:.apk文件

3.8 Android应用打包:.apk文件 Android提供了一个名为apkbuilder的应用,它能够生成可安装的Android应用文件,这些应用文件的扩展名是.apk..apk是一种ZIP文件格式,它和很多其他面向Java的应用类似,包含应用说明.已经编译的应用类和应用资源.Android还提供了aapt工具对文件进行打包,这些文件也是生成.apk文件,但是开发人员通常倾向于在其开发环境中使用该工具构建他们的应用.绝大多数用户只是简单地依赖其IDE来创建其.apk文件. 一旦开发人员创建

《Android程序设计》一3.5 Resources

3.5 Resources Android应用把图像.图标和用户界面布局文件都放在名为res的目录中.res目录通常至少包括4个子目录,如下所示: layout 包含Android用户界面XML文件,这个文件将在第7章详细介绍. drawable 包含绘制相关的工具,如之前所描述的应用图标. raw 保存了应用执行时可能以stream(流)方式读取的文件.原始文件是为运行的应用提供调试信息的一种很好的方式,不需要访问网络来检索数据. values 包含应用在执行中要读取的值,或应用在某些使用中的