Keywords: package关键字、protected关键字、import关键字、Jar包
包
包的概述
- 对类文件进行分类管理
- 给类提供多层命名空间
- 写在程序文件的第一行
- 类名的全程是
包名.类名 - 包也是一种封装形式
常见错误
(day12\PackageDemo.java)
PackageDemo.java:8: 找不到符号
符号: 类 DemoA
位置: 类 mypack.PackageDemo
DemoA d = new DemoA();
^
PackageDemo.java:8: 找不到符号
符号: 类 DemoA
位置: 类 mypack.PackageDemo
DemoA d = new DemoA();
^
2 错误
原因:类名写错。
因为DemoA类已经有包的所属,所以必须要明确其报名。
记住:DemoA这个名词错的。 正确名称是报名.类名packa.DemoA
PackageDemo.java:8: 软件包 packa 不存在
packa.DemoA d = new packa.DemoA();
^
PackageDemo.java:8: 软件包 packa 不存在
packa.DemoA d = new packa.DemoA();
^
2 错误
原因:在当前目录下没找到,因为
packa存放在其他目录下,
应该配置一个classpath。
PackageDemo.java:8: packa.DemoA 在 packa 中不是公共的;无法从外部软件包中对其进
行访问
packa.DemoA d = new packa.DemoA();
^
PackageDemo.java:8: packa.DemoA 在 packa 中不是公共的;无法从外部软件包中对其进
行访问
packa.DemoA d = new packa.DemoA();
^
2 错误
原因:有了包,范围变大,一个包中的类要被访问,必须要有足够大的权限,所以被访问的类要被
public修饰
PackageDemo.java:9: show() 在 packa.DemoA 中不是公共的;无法从外部软件包中对其进
行访问
d.show();
^
1 错误
原因:类公有后,被访问的成员也要共有才可以被访问
PackageDemo.java:24: 错误: method() 在 DemoB 中是 protected 访问控制
d.method();
^
1 个错误
原因:DemoB的方法被
protected关键字修饰后,不能被直接访问,只能通过它的子类DemoA访问
总结:
- 包与包之间的类进行访问,被访问的包中的类必须是
public的,被访问的包中的类的方法也必须是public的。 - 不同包中的子类可以直接访问父类中被
protected权限修饰的成员 - 一个java文件中只能有一个
public修饰的类
| 位置 | public | protected | default | private |
|---|---|---|---|---|
| 同一类中 | ok | ok | ok | ok |
| 同一包中 | ok | ok | ok | |
| 子类 | ok | ok | ||
| 不同包中 | ok |
import关键字
- 为了简化类名的书写,使用
import关键字。 - 一个程序文件中只有一个
package,可以有多个import - 用来导包中的类,不导入包中的包
- 通常写
import mypack.Demo;,而不写import mypack.*;,后者导入类太多,太占内存空间
包名的定义
建议定义包名不要重复,可以使用url来完成定义,url是唯一的
一个栗子:
url: www.itcast.cn
定义包名:
package cn.itcast.demo
package cn.itcast.test
Jar包——Java的压缩包
- 方便项目的携带
- 方便于使用,只要在
classpath设置jar路径即可。eg.set classpath=.\myclass.jar - 数据库驱动,SSH框架等都是以jar包体现的
DOS命令行操作指令:
-c:创建新档案
-t:列出档案目录
-x:从档案中提取指定的 (或所有) 文件
-u:更新现有档案
-v:在标准输出中生成详细输出
-f:指定档案文件名
-m:包含指定清单文件中的清单信息
-n:创建新档案后执行 Pack200 规范化
-e:为捆绑到可执行 jar 文件的独立应用程序指定应用程序入口点
-0:仅存储; 不使用任何 ZIP 压缩
-P:保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
-M:不创建条目的清单文件
-i:为指定的 jar 文件生成索引信息
-C:更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。
示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 'mymanifest' 并将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
jar cvfm classes.jar mymanifest -C foo/
示例3:将jar包中的信息保存为txt文件。
jar tf myclass.jar>myclass.txt