1.包:库单元
包内包含一组类,它们在单一的名字空间之下被组织在了一起。包的结构就像文件目录一样,可以包内再包含子包。包就相当于C++中的名字空间,是为了协调开发,以防名字重复使用的。
使用package关键字声明该类属于某个包,package语句必须是文件除注释外第一句程序代码。
package test;//包名为test,该类位于test包内
package test.test2;//包test内还有一个子包test2。
包名对应着在工作空间里的文件结构,可以看到文件结构按照包的顺序生成了相应的目录。
当需要使用别的包中的Java类,需要使用import关键字,导入我们希望使用的类。
import packageName.className;
使用上面的形式导入一个需要使用的类,但是如果一个类库中有很多的类我们都需要使用到,那就可以使用如下形式:import packageName.*;这表示导入该包下的所有类。但这样需要有两点需要注意:
1).如果有两个名称相同的类位于两个类库,而由于使用全部导入的方式,很可能在你未注意的情况下使用某个类,这时为了区分两个类,必须使用全限定名,即使用该类时要加上其包名,因为这可以唯一确定一个类:形如packageName.className;
2).在移动应用上进行开发时,比如Android开发,如果并不是需要到很多类,但还是导入了全部类,因为移动设备的内存有限,这会影响到应用的运行。
2.访问权限限定
Java文件组织形式:包—>类—>域和方法。
访问权限可以按照这种组织形式来考虑,认为这三种结构各有自己的权限,只有满足一定条件下才可以使用。
类的访问权限控制着别的包是否有使用自己的权利。可以用public和默认的缺省修饰。
域和方法的访问权限控制着类是否可以使用自己的权利,可以用public、private、prtected以及默认的缺省修饰。
2.1public(接口访问权限)
public类表示所有包、类都可以使用该类;
public域和方法表示该类的对象可以使用该域和方法。
2.2缺省(包访问权限)
缺省类表示只有该类所属的其他类可以使用该类;
缺省域和方法表示只有该类所属包中的类可以通过该类的对象使用。
2.3protected(继承访问权限)
只能用于修饰域和方法。
protected域和方法除了和缺省具有相同访问控制权限外,还可以让其子类访问,所以称为继承访问权限。(哪怕该类位于其他包中)
2.4private(你无法访问)
只能用于修饰域和方法。
private域和方法表示只能在类定义内部访问,类的任何对象都无法访问。
3.总结
包是一种组织代码结构的方式,必须放在除注释代码的第一行,可以用import关键字导入需要的类。
访问权限从松到紧分比为:public,protected、包访问权限、private;
和C++一点不同的是,Java有四种访问权限,而C++只有三种,尽管C++也有缺省的访问权限,不过却因类和结构体的不同而增加了不同的访问权限,类默认为paivate,结构体则默认为public。
分析问题可以使用这个类在这里可用吗?类可用的话,那这个域或方法在这里可用吗?一步一步的缩小访问权限。