面向对象(六)——包

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访问

总结:

  1. 包与包之间的类进行访问,被访问的包中的类必须是public的,被访问的包中的类的方法也必须是public的。
  2. 不同包中的子类可以直接访问父类中被protected权限修饰的成员
  3. 一个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

你可能感兴趣的:(面向对象(六)——包)