重温经典《Thinking in java》第四版之第六章 访问权限控制(三十六)

简介: 重温经典《Thinking in java》第四版之第六章 访问权限控制(三十六)

第6章讲到了类库设计的权限访问问题,主要是通过Java提供的访问权限修饰词,让类库的使用者明白哪些是可用的,那些事不可用的。访问权限控制等级,从最大权限到最小权限依次为:public、protected、包访问权限(没有关键词)和private。作为一名类库设计员,你会尽可能将一切方法都定义为private,而仅向客户端程序员公开你愿意让他们使用的方法。

“6.1 包:库单元”,包内包含一组类,它们在单一的名字空间下被组织在一起。例如,在Java的标准发布中有一个工具库,它被组织在java.util名字空间之下。java.util中有一个叫做ArrayList的类,使用ArrayList的一种方式是用其全名java.util.ArrayList来指定。

publicclassFullQualification { 
publicstaticvoidmain(String[] args) { 
java.util.ArrayListlist=newjava.util.ArrayList(); 
    } 
}

但是这会使得程序变得冗长,因此你可能向转而使用import关键字。如果你想要导入单个的类,可以在import语句中命名该类:

importjava.util.ArrayList; 
publicclassSingleImport { 
publicstaticvoidmain(String[] args) { 
ArrayListlist=newjava.util.ArrayList(); 
    } 
}

要想使用java.util中的其他类,只需要使用“*”,就可以了:import java.util.*; 这就是Java提供的一种管理名字空间的机制。为什么要有名字空间这么个概念呢?假设你编写一个Stack类并安装到了一台机器上,而该机器上已经有了一个别人写的Stack类,我们该如何解决呢?由于名字之间的潜在冲突,在Java中对名字空间进行完全控制并为每一个类创建唯一的标识组合就成为了非常重要的事情了。上面列举的一些类的例子虽然没有指定包名,其实他们已经位于包中了:即未命名包或者默认包。私用关键字package关键字,可以指定一个类的包名:package access;

6.2 创建独一无二的包名这一小节告诉我们如何给package起一个有效的名字里让我们的类减少可能的冲突。按照惯例,package名称的第一部分是类的创建者的反顺序的Internet域名。比如cn.com.domain。第二部分可以把package名称分解为你机器上的一个目录。比如:business.directory。举个具体的例子来理解这一点,以我的域名是MindView.net为例。顺序倒过来就是net.mindview。为了演示个简单的例子,我们再创进一个simple的目录,我们的类就放在这个目录下,那么完整的包名如下:package net.mindview.simple;现在这个包名就可以作为下面两个文件的名字空间保护伞了:

packagenet.mindview.simple; 
publicclassVector { 
publicVector() { 
System.out.println("net.mindview.simple.Vector"); 
    } 
} 
packagenet.mindview.simple; 
publicclassList { 
publicList() { 
System.out.println("net.mindview.simple.List"); 
    } 
}

下面就可以写一个例子引入我们的类库并且使用它们了:

importnet.mindview.simple.*; 
publicclassLibTest { 
publicstaticvoidmain(String[] args) { 
Vectorv=newVector(); 
Listl=newList(); 
    } 
}

有了上面的只是以后,我们就可以进入到“6.3 定制工具库”这一小节,创建自己的工具库来减少或消除重复的程序代码了。举个打印输出的例子:

packagenet.mindview.util; 
importjava.io.*; 
publicclassPrint { 
// Print with a newline: publicstaticvoidprint(Objectobj) { 
System.out.println(obj); 
    } 
// Print a newline by itself: publicstaticvoidprint() { 
System.out.println(); 
    } 
// Print with no line break: publicstaticvoidprintnb(Objectobj) { 
System.out.print(obj); 
    } 
// The new Java SE5 printf() (from C): publicstaticPrintStreamprintf(Stringformat, Object... args) { 
returnSystem.out.printf(format, args); 
    } 
} 
importstaticnet.mindview.util.Print.*; 
publicclassPrintTest { 
publicstaticvoidmain(String[] args) { 
print("Available from now on!"); 
print(100); 
print(100L); 
print(3.14159); 
    } 
}

/* Output:

Available from now on!

100

100

3.14159

*/

上面的例子只是为了说明包名空间的使用,以后我们有新的工具类,都可以放在net.mindview.util类库中。

目录
相关文章
|
6月前
|
存储 算法 安全
Java对象创建和访问
Java对象创建过程包括类加载检查、内存分配(指针碰撞或空闲列表)、内存初始化、对象头设置及初始化方法执行。访问方式有句柄和直接指针两种,前者稳定但需额外定位,后者速度快。对象创建涉及并发安全、垃圾回收等机制。
Java对象创建和访问
|
8月前
|
NoSQL JavaScript 前端开发
Java访问MongoDB
Java访问MongoDB
82 21
|
8月前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
934 1
|
11月前
|
存储 Java
深入理解java对象的访问定位
这篇文章深入探讨了Java对象的访问定位机制,比较了使用句柄和直接指针两种主流的对象访问方式,并指出了它们各自的优势,例如句柄访问在对象移动时的稳定性和直接指针访问的速度优势。
100 1
深入理解java对象的访问定位
|
10月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
166 3
|
10月前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
202 2
|
11月前
|
Java
Java访问外网图片地址时,如何添加代理?
【10月更文挑战第14天】Java访问外网图片地址时,如何添加代理?
239 2
|
11月前
|
小程序 Java
小程序访问java后台失败解决方案
小程序访问java后台失败解决方案
115 2
|
11月前
|
小程序 JavaScript Java
小程序访问java后台
小程序访问java后台
81 1

热门文章

最新文章