有下面一道题:
关于包的描述错误的是 B
(A)包可以将相关的类和接口组织在一起,便于识别和管理
(B)包中的类可以访问同一包的其它类的私有成员
(C)不同包中的相同命名,不会产生冲突
(D)用public修饰的顶级类和接口对包外代码可见
初学java很多不懂,于是我去找资料,对包进行扩展一下。
1.包(package)的概念:
包(package)是Java提供的一种区别类的名字空间的机制,是类的组织方式,是一组相关类和接口的集合,它提供了访问权限和命名的管理机制。
Java中提供的包主要有以下3种用途:
1) 将功能相近的类放在同一个包中,可以方便查找与使用。
2) 由于在不同包中可以存在同名类,所以使用包在一定程度上可以避免命名冲突。
3) 在Java中,某次访问权限是以包为单位的。
2.定义包package myblog;//它必须在第一行(它之前除了注释和空白什么都不能有)注意:(1)定义了包之后,这个包内的所有类的全名就是:包名.类名(2)如果不加package语句,则指定为缺省包或无名包。(3)包对应着文件系统的目录层次。(4)在package语句中,用“.”来指明包(目录)的层次。(5)因为我们自定义的包要对应文件系统中的一个目录名,在这个目录名下面存放的是一个类,我们需要建立相应的文件夹,作为包。但是有一个问题,如果我们有成千上万的类是不是我们要手动建立成千上万的包呢?这样繁琐的事情我们还是交给java编译器吧,也就是我们在编译的时候让它自动生成包对应的系统目录,具体做法:javac -d . Test.java(-d指定在什么位置生成包。"."表示在当前目录下生成class文件)javac -d D:/ Test.java(表示在d盘的根目录下生成包;)javac -d . *.java(表示编译当前目录下所有后缀名为.java的文件。)(6)多包(多层次)大包与小包还有类的层次结构:大包.小包.类名
3.import语句(1)引入包中的类(如果我们只想引入某个包中的类)import java.io.File;(2)引入整个包import java.io.*;(①这样虽然方便,但是当我们导入包中所有的类时,java编译器就会用额外的内存来存储包中类和方法的名字,以便跟踪这个包中所有的元素,这在我们的pc机上没有太大的性能差异。然而当我们在手持设备上,一般的手持设备内存都比较小,这种方式就不太好了,更适合第一种方式想引用哪个类就具体引用哪个②当我们通过网络远程加载一个类时,如果它导入了一包中所有的类,那么在加载的时候就会把所有的类和方法加载到本地来,这就会造成java程序执行时间上的延迟。所以只有当我们需要导入这个包中很多类的时候,再用这种方式。)(3)在同一包中的类可以互相引用,无需import语句注意:java.lang包是自动引入的,不需要我们显式的加import引入。因此我们可以直接引用System、String
4.类的访问说明符:级别
5.类的其它修饰符:(1)final(表明这个类是一个最终的类,不能由这个类派生出其他的子类比如我们熟知的String类)
6.方法的访问说明符:级别
新闻热点
疑难解答