A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© leixing1012 中级黑马   /  2015-9-20 11:07  /  819 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

包(package)

  包(package)用于将完成不同功能的类分类,放在不同的目录(包)下。

包的命名

  包的命名规则:将公司域名反转作为包名。

  包名一般每个字母都要小写。

  把类定义在某个包下面,一般在源文件开头加上package xxx.yyy;

  则类的全名是xxx.yyy.类名

  如果定义类的时候没有使用package指定包名,则Java认为类位于默认包里面(default package)。

编译执行

  如果程序中声明了包名,即首行写了package com.xxx;

  那么如果按照一般的编译方式 javac 源文件名.java

  会在当前目录下生成class文件。

  然后直接用:java源文件名执行,则会报错。

  出现java.lang.NoClassDefFoundError



产生问题的原因

  包的意义在于产生一种目录结构,所以class文件必须位于相应的目录层次结构中。

  以package com.xxx为例:

  一种解决方式是手工建立com文件夹,里面建立xxx文件夹,把生成的class文件放在目录结构中,并且执行的时候采用java 完整类名(即带上包名)才能够执行。



不需要手动建立文件夹的解决手段

  使用编译参数 -d的解决方法:

  编译的时候可以在javac命令中采用-d指定存放生成的类文件的位置。

  -d . 可以在当前目录下生成。

  用如下命令:

  javac –d . 源文件名.java

  则编译后在当前目录下,编译器会生成包的文件目录层次结构,并且把class文件放入其中。

  如果不用“.”,也可以指定目录。

  用java命令执行的时候需要将包的信息全部带上,即用完整的加包名的形式执行。

  执行:

  java 完整类名

子包

  有两个包名,分别是aa.bb.cc与aa.bb.cc.dd,那么我们称后者为前者的子包。

导入

  导入(import),将使用package分离的各个类导入回来,让编译器能够找到所需要的类。

  使用在同一个包下的类不需要导入可以直接用,使用不同的包下的类才需要导入。

  使用格式:

  import aaa.bbb.ccc;

  可以使用通配符“*”代替类名,将包中的所有类导入:

  import aaa.bbb.*;

  注意:

  import aaa.bbb.*;并不会导入import aaa.bbb.ccc包下面的类。

顺序问题

  关于package、import、class的顺序问题:

  1.首先需要定义包(package),可选;

  2.接下来使用import进行导入,可选;

  3.class或者interface的定义。


包导入与访问权限

  访问权限修饰符有四类:

  public:允许所有类访问。

  private:允许本类访问。

  protected:允许本类、子类、同一个包中的类访问。

  默认情况:即不加访问修饰符的情况,允许本类和同一个包中的类访问。

  import相应的包之后只是使相应的类可见,是否可以访问其中的成员还是由访问修饰符所决定。如默认修饰的成员,即便将相应类的包导入,但是如果当前类不在同一个包中,还是不能访问。

评分

参与人数 1黑马币 +3 收起 理由
王盟 + 3 赞一<span id="transmark">&

查看全部评分

7 个回复

倒序浏览
学习了。。。。。。。。。。。
回复 使用道具 举报
学习了      
回复 使用道具 举报
总结的不错,谢谢了。
回复 使用道具 举报
总结的挺详细的
回复 使用道具 举报
用高级ide习惯了,都不太明白导包了
回复 使用道具 举报
虽然我还没看到这, 起码你这篇我都看完了,还好。 等级概念比较严格啊
回复 使用道具 举报
a80C51 中级黑马 2015-9-22 17:56:36
8#
之前看视频的时候,头都大了。看到这个总结,还是有所帮助啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马