package
用来对类文件进行分类管理。
给类提供多层命名空间。
package pack;
class Test
{
public static void main (String[] args)
{
System.out.println("Hello Package");
}
}
C:\Users\龙\Desktop>javac -d . 1.java
C:\Users\龙\Desktop>java pack.Test
Hello Package
错误
错误原因:类名写错。
因为类名的全名是: 包名.类名 packa.demo
C:\Users\龙\Desktop>javac -d c:\Intel 1.java
1.java:8: 错误: 找不到符号
DemoA d = new DemoA();
^
符号: 类 DemoA
位置: 类 Test
1.java:8: 错误: 找不到符号
DemoA d = new DemoA();
^
符号: 类 DemoA
位置: 类 Test
2 个错误
packa包不再当前目录下,
需要设置classpath,告诉jvm去哪找packa包
C:\Users\龙\Desktop>javac -d c:\Intel 1.java
1.java:8: 错误: 程序包packa不存在
packa.DemoA d = new packa.DemoA();
^
1.java:8: 错误: 程序包packa不存在
packa.DemoA d = new packa.DemoA();
^
2 个错误
有了包,范围变大,一个包中的类被访问,必须要有足够的权限,
所以被访问的类要被public修饰
C:\Users\龙\Desktop>javac -d c:\Intel 1.java
1.java:8: 错误: DemoA在packa中不是公共的; 无法从外部程序包中对其进行访问
packa.DemoA d = new packa.DemoA();
^
1.java:8: 错误: DemoA在packa中不是公共的; 无法从外部程序包中对其进行访问
packa.DemoA d = new packa.DemoA();
^
2 个错误
protected 保护权限
总结
包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。
不同包中的子类,还可以直接访问父类中被protected 权限修饰的成员。
包与包之间可以使用的权限只有两种: public protected
情景 | Public | protected | default | Private |
同一个类中 | OK | OK | OK | OK |
同一个包中 | OK | OK | OK | NO |
子类 | OK | OK | NO | NO |
不同包中 | OK | NO | NO | NO |
为了简化类名的书写,使用import关键字
import 导入的是当前目录下,包中的类。
import pack.*;
建议不要写通配符 *,需要用到包中的那个类,就导入 哪个类。
import packb.hehe.haha.xixi.DemoC ;
然后直接可以使用 DemoC类名。
建立包名不要重复,可以使用url来完成定义,url是唯一的。