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