黑马程序员_日记10_Java包

  ——- android培训java培训、期待与您交流! ———-

包(package)

包是什么呢?在日常生活中,我们有各种各样的包,这些包用来封装事物。

我们经常说的一句话就是“打包”,这个打包其实就可以对应到java中的封装。

我们可以通过包把事物分类。例如,钱包把钱归类在一起;卡包把卡归纳在一起;

钥匙包把你所有的钥匙装一起。既然你有了这么多小包,为了更加方便管理,

你会有一个更大的包来管理这些小包。例如,用一个双肩背包你就可以把钱包,卡包,钥匙包全部管理好。

这样做可以减轻你记忆的负担,你只需记得你常用的东西都放在双肩背包里面。

当你想要使用的时候,你只需要找到你的双肩背包就可以了。

例如,当你想要找钱的时候,你会从你背包里的钱包里找钱。

那么问题来了,java中的包(package)是什么呢?

Java中的包其实就和生活中常见的包差不多,跟计算机中的文件夹差不多。

只不过这个包是一个特殊的包:它里面放的不是别的,正是java的类。

在Java中这个包是一种松散的类的集合。

一般不要求同一个包中的类有明确的想换关系,如包含、继承等。

java中的包的特点。
- 对类文件进行分类管理
- 给类提供多层命名空间
- 包也是一种封装的形式
- 写在程序的第一行
- 类名的全称是 包名.类名

接下来,先引进包中类的访问权限,见下表。

 publicprotecteddefaultprivate
同一个类中OKOKOKOK
同一个包中OKOKOK
子类OKOK
不同的包中OK

一、创建包

在没有显示创建包的情况,系统会为.java源文件创建一个无名包。
而创建包的语句需要使用关键字package,而且创建包的语句必须是整个
java源文件的第一条语句。
例如,package 包名。

package pac;
class PackageDemo2
{
    public static void main(String[] args) 
    {
        System.out.println("Hello World!");
    }
}

编译成功,但是当运行的时候会报错,提示如下:

Exception in thread "main" java.lang.NoClassDefFoundError: PackageDemo2 (wrong n
ame: pac/PackageDemo2)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

根据第一行提示可以知道JVM在pac目录下没有找到这么一个类,所以
运行指令改为java pac.PackageDemo2,即要加上包名。
这一次运行给出的提示是:

错误: 找不到或无法加载主类 pac.PackageDemo2

原因是没有建立pac这个包,在当前目录下建立这个目录,在把类
移动到里面去,编译运行通过了!

Java在DOS系统建立包是的语句是javac -d . PackageDemo2.java
此时,打开pac文件夹就会发现里面有一个字节码文件PackageDemo2.class。

二、包的引用

1 包与包之间的访问

由上面的那个表格可以得到以下总结:

  • 包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。

  • 不同包中的子类还可以直接访问父类中被protected权限修饰的成员。

  • 包与包之间可以使用的权限只有两种,public protected。

2 加载需要使用的类

因为有了包的存在,在创建对象的时候必须带上包名,这样初始化对象非常麻烦。
为了简化操作,在程序文件的开始部分利用import语句将所需要的包加载到本类中。
例如:

import packb.haha.hehe.heihei.*;
import packa.*;
import packb.*;

class PackageDemo2
{
    public static void main(String[] args) 
    {
        System.out.println("Hello World!");
    }
}

使用import语句需要注意的地方有:
- 不要写通配符 * ,需要用到包中的哪个类,就导入哪个类。
- 在以后的高级IDE中可以使用快捷键导包。
- 例如在在eclipse下就是Ctrl + Shift +O一键导入本类用到的所有的包。

3 jar包

jar包是java字节码包的压缩包,也就是java的类库。
用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] fil
s …
选项包括:
-c 创建新的归档文件
-t 列出归档目录
-x 从档案中提取指定的 (或所有) 文件
-u 更新现有的归档文件
-v 在标准输出中生成详细输出
-f 指定归档文件名
-m 包含指定清单文件中的清单信息
-e 为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0 仅存储; 不使用情况任何 ZIP 压缩
-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/ .

5 CLASSPATH

在DOS系统下输入set classpath按回车就会显示当前已经设置好的
类字节码文件的路径。当一个程序找不到它所需要使用的其他类的.class文件时,
系统就会自动到CLASSPATH环境变量所知名的路径中去寻找。

注意:
- 如果没有设置CLASSPATH,系统会在当前目录查找
- 如果设置好了CLASSPATH,系统会在指定路径先查找

CLASSPATH变量值后面有无分号的区别:
- 当写了分号的时候,如果在指定路径下找不到就会在当前目录查找
- 当不加分号的时候,只在指定路径下查找
- 在实际开发的时候,应该不加分号。因为加分号会隐藏错误!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值