Java中的包
名称冲突问题
C语言中所有的函数都是全局的,因此在多人合作的大型项目开发中,容易出现两个函数同名的情况
如 A完成的.c文件中有一个名字为compare的函数,B完成的.c文件中有名为compare的函数
C语言中一般是通过在函数名上加上前缀来解决名称冲突问题
JAVA中是不是也有类似的情况?
在JAVA里面也是有这个问题的
JAVA字节码文件
JAVA中的基本程序单元是类
每个类在经过编译之后将生成一个对应的.class文件
.calss是JAVA虚拟机上的字节码文件,是Java虚拟机上的可执行文件
Java源文件在经过编译之后会在其目录下生成源文件中每个类的字节码文件
JAVA中的包
包是JAVA中组织类和管理类名空间的方式
位于不同包中的类即使同名也不会冲突
包实际上是类的容器并且提供了类的可见性限制机制
Package关键字用于将文件中对应类的名字码文件装入包中
从操作系统的概念来看,每个PACKAGE对应一个逻辑文件夹
例子1:
//我们来读第一行,其他的我们基本都可以读得懂
//这个程序想打包,把我文件中的所有class A,B,C,Test这四个class
//放到这个包里面去 mypackage.myclass.test放到那个包里面去
//我们可以这么理解为放到这个目录下,放到mypackage这个文件夹,这个文件夹下面的myclass文件夹
//myclass下面的test文件夹下去。为什么用.呢?Linux下面不是/吗,因为JAVA是跨平台
//因为WINDOWS下是\跟Linux相反,所以是.作为路径的分割
//编译的时候 使用javac -d ./pac1 Test.java
//这个就是编译好的包放到./pac1下面去
package mypackage.myclass.test;
class A{
}
class B{
}
class C{
}
public class Test{
public static void main(String[] args){
A a=new A();
B b=new B();
C c=new C();
}
}
执行编译命令javac -d ./pac1 Test.java
运行完结果如下
创建了目录
JAVA中的包
包使用示例
JAVA中通过import关键字使用包中的类
JAVA语言规定一个文件中只能有一个public,并且这个public类必须和文件名完全相同
JAVA中的类可见性只有可见和不可见两种
public类可以被其他包中的类导入使用
非public 类只能被同一个包中的类使用
protected和private不能用于限定类的可见性
一些建议
每个属性和方法都显示声明访问权限,不使用默认权限
对于逻辑上对外不可见的属性和方法尽量设置为private
虽然JAVA语言中同一个包中的其他非子类可以自由访问protected成员,但这是不推荐的
将逻辑上相关的类组织在同一个包中,以包的形式组织程序中的类