一般来说都用eclipse自动化图形工具搞定,我用的是ubuntu,所以需要自己打包引入。

什么是包?

这是对java源代码的组织和管理的一种方式,比如:当操作系统某个目录的文件非常多的时候,我们一般建立子目录分类管理,java中的包跟文件目录的作用类似。

1,声明一个包,用package,放在文件的第一行,如:

package com.ghostwu.HelloWorld;

public class HelloWorld{
public static void main( String[] args ){
System.out.println( "hello world" );
}
}

当,源代码中声明了一个包的时候,在编译的时候,需要这样做:【javac -d . HelloWorld.java】, -d: 后面指定编译生成的class文件存放的目录,

这里面的点(.)指的是当前目录。

ghostwu@dev:~/java/data_struct/package$ ls
com ghostwu.jar HelloWorld.java Student.java Test2.java Test.java
ghostwu@dev:~/java/data_struct/package$ rm -rf com ghostwu.jar
ghostwu@dev:~/java/data_struct/package$ ls
HelloWorld.java Student.java Test2.java Test.java
ghostwu@dev:~/java/data_struct/package$ javac -d . HelloWorld.java
ghostwu@dev:~/java/data_struct/package$ ls
com HelloWorld.java Student.java Test2.java Test.java
ghostwu@dev:~/java/data_struct/package$ tree com
com
└── ghostwu
└── HelloWorld
└── HelloWorld.class 2 directories, 1 file

我们也可以换个路径,如:我把它编译到~/tmp目录下

ghostwu@dev:~/java/data_struct/package$ ls ~/tmp
allpy.tar.gz
ghostwu@dev:~/java/data_struct/package$ javac -d ~/tmp HelloWorld.java
ghostwu@dev:~/java/data_struct/package$ ls ~/tmp
allpy.tar.gz com
ghostwu@dev:~/java/data_struct/package$ tree ~/tmp/com
/home/ghostwu/tmp/com
└── ghostwu
└── HelloWorld
└── HelloWorld.class 2 directories, 1 file

2,接下来,我们定义两个类,来使用包

ghostwu@dev:~/java/data_struct/package$ cat Student.java
package com.ghostwu.Student; public class Student {
public void say(){
System.out.println( "my name is ghostwu" );
}
}
ghostwu@dev:~/java/data_struct/package$ cat Test.java
package com.ghostwu.Test; public class Test {
public static void main( String[] args ){
com.ghostwu.Student.Student stu = new com.ghostwu.Student.Student();
stu.say();
}
}

在Test类中,如果需要使用Student类,需要使用 包名.类名( com.ghostwu.Student.Student )

ghostwu@dev:~/java/data_struct/package$ tree com
com
└── ghostwu
└── HelloWorld
└── HelloWorld.class 2 directories, 1 file
ghostwu@dev:~/java/data_struct/package$ ls
com HelloWorld.java Student.java Test2.java Test.java
ghostwu@dev:~/java/data_struct/package$ javac -d . Student.java
ghostwu@dev:~/java/data_struct/package$ javac Test.java
ghostwu@dev:~/java/data_struct/package$ java Test
Error: Could not find or load main class Test

在上面,编译使用的过程中,我们发现,直接执行java test报了一个错误。这是因为我们Test也有声明包( com.ghostwu.Test ),所以,我们应该这样执行:

ghostwu@dev:~/java/data_struct/package$ tree com
com
└── ghostwu
├── HelloWorld
│   └── HelloWorld.class
└── Student
└── Student.class 3 directories, 2 files
ghostwu@dev:~/java/data_struct/package$ javac -d . Test.java
ghostwu@dev:~/java/data_struct/package$ java Test
Error: Could not find or load main class Test
ghostwu@dev:~/java/data_struct/package$ java com.ghostwu.Test.Test
my name is ghostwu

执行格式:【java 包名+类名】

3,你可能已经发现了,这种方式非常麻烦,在使用包,每次实例化都要new xxx(包名) = xxx(包名) .... ,我们可以通过import关键字,引入包,就不需要每次加上包前缀了。

ghostwu@dev:~/java/data_struct/package$ cat Test2.java
package com.ghostwu.Test2;
import com.ghostwu.Student.Student; public class Test2 {
public static void main( String[] args ){
Student stu = new Student();
stu.say();
}
}
ghostwu@dev:~/java/data_struct/package$ tree com
com
└── ghostwu
├── HelloWorld
│   └── HelloWorld.class
├── Student
│   └── Student.class
└── Test
└── Test.class 4 directories, 3 files
ghostwu@dev:~/java/data_struct/package$ javac -d . Test2.java
ghostwu@dev:~/java/data_struct/package$ java Test2
Error: Could not find or load main class Test2
ghostwu@dev:~/java/data_struct/package$ java com.ghostwu.Test2.Test2
my name is ghostwu

4,把所有的class打包成一个jar文件,称之为jar包,比如,我们把当前目录下的所有class文件,打成一个jar包,可以给别人使用了

【jar cvf ghostwu.jar com】   把com目录下的所有文件 打包成一个jar文件,  c:创建jar文件 v:生产详细信息 f:指定jar包的名称

ghostwu@dev:~/java/data_struct/package$ tree com
com
└── ghostwu
├── HelloWorld
│   └── HelloWorld.class
├── Student
│   └── Student.class
├── Test
│   └── Test.class
└── Test2
└── Test2.class 5 directories, 4 files
ghostwu@dev:~/java/data_struct/package$ ls
com HelloWorld.java Student.java Test2.java Test.class Test.java
ghostwu@dev:~/java/data_struct/package$ jar cvf ghostwu.jar com
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/ghostwu/(in = 0) (out= 0)(stored 0%)
adding: com/ghostwu/HelloWorld/(in = 0) (out= 0)(stored 0%)
adding: com/ghostwu/HelloWorld/HelloWorld.class(in = 448) (out= 302)(deflated 32%)
adding: com/ghostwu/Test2/(in = 0) (out= 0)(stored 0%)
adding: com/ghostwu/Test2/Test2.class(in = 347) (out= 254)(deflated 26%)
adding: com/ghostwu/Student/(in = 0) (out= 0)(stored 0%)
adding: com/ghostwu/Student/Student.class(in = 420) (out= 293)(deflated 30%)
adding: com/ghostwu/Test/(in = 0) (out= 0)(stored 0%)
adding: com/ghostwu/Test/Test.class(in = 344) (out= 255)(deflated 25%)
ghostwu@dev:~/java/data_struct/package$ ls
com HelloWorld.java Test2.java Test.java
ghostwu.jar Student.java Test.class

5,执行jar包的时候,发现报错了

ghostwu@dev:~/java/data_struct/package$ java -jar ghostwu.jar
no main manifest attribute, in ghostwu.jar

我们需要在ghostwu.jar包中,配置一个入口类

再次执行,就可以了

ghostwu@dev:~/java/data_struct/package$ java -jar ghostwu.jar
my name is ghostwu

6,解压jar包【jar -xvf ghostwu.jar 】

ghostwu@dev:~/java/data_struct/package$ ls
com HelloWorld.java Test2.java Test.java
ghostwu.jar Student.java Test.class
ghostwu@dev:~/java/data_struct/package$ rm -rf com
ghostwu@dev:~/java/data_struct/package$ ls
ghostwu.jar HelloWorld.java Student.java Test2.java Test.class Test.java
ghostwu@dev:~/java/data_struct/package$ jar -xvf ghostwu.jar
created: META-INF/
inflated: META-INF/MANIFEST.MF
created: com/
created: com/ghostwu/
created: com/ghostwu/HelloWorld/
inflated: com/ghostwu/HelloWorld/HelloWorld.class
created: com/ghostwu/Test2/
inflated: com/ghostwu/Test2/Test2.class
created: com/ghostwu/Student/
inflated: com/ghostwu/Student/Student.class
created: com/ghostwu/Test/
inflated: com/ghostwu/Test/Test.class
ghostwu@dev:~/java/data_struct/package$ ls
com HelloWorld.java Student.java Test.class
ghostwu.jar META-INF Test2.java Test.java
ghostwu@dev:~/java/data_struct/package$ tree com
com
└── ghostwu
├── HelloWorld
│   └── HelloWorld.class
├── Student
│   └── Student.class
├── Test
│   └── Test.class
└── Test2
└── Test2.class 5 directories, 4 files

java package(包)的用法的更多相关文章

  1. 如何理解和使用Java package包

    Java中的一个包就是一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起.这个名称空间就是包名.可以使用import关键字来导入一个包.例如使用import java.util.* ...

  2. Java package 包的命名规范。

    Java的包名都有小写单词组成,类名首字母大写:包的路径符合所开发的 系统模块的 定义,比如生产对生产,物资对物资,基础类对基础类.以便看了包名就明白是哪个模块,从而直接到对应包里找相应的实现. 由于 ...

  3. java package 包 学习笔记

    编译命令示例: javac -d . Main.java 注:带参数-d自动建立文件目录, 只使用javac 则需要手工创建目录 把 class文件打包 jar命令 jar cvf T.jar *; ...

  4. Java基础-包(package)的声明与访问

    Java基础-包(package)的声明与访问 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.包的概念 Java中的包,其实就是我们电脑系统中的文件夹,包里存放的是程序员生成的 ...

  5. JavaSE入门学习17:Java面向对象之package(包)

           一Java包(package)        为了更好地组织类,Java提供了包机制,用于差别类名的命名空间.        包的作用:        A把功能类似或相关的类或接口组织在 ...

  6. 批量修改Java类文件中引入的package包路径

    http://libeey.blogbus.com/logs/101848958.html当复制其他工程中的包到新工程的目录中时,由于包路径不同,出现红叉,下面的类要一个一个修改包路径,类文件太多的话 ...

  7. Atitit.软件命名空间  包的命名统计 及命名表(2000个名称) 方案java package

    Atitit.软件命名空间  包的命名统计 及命名表(2000个名称) 方案java package 1. 统计的lib jar 列表1 2. Code3 3. 常用包名按找字母排序(2000个)4 ...

  8. 【转载】eclipse中批量修改Java类文件中引入的package包路径

    原博客地址:http://my.oschina.net/leeoo/blog/37852 当复制其他工程中的包到新工程的目录中时,由于包路径不同,出现红叉,下面的类要一个一个修改包路径,类文件太多的话 ...

  9. Java连载49-常量格式、package包介绍

    一.常量 1.常量的定义:final修饰的实例变量是不可变的,这种变量一般和static联合使用,被称为“常量” 2.常量的语法格式: public static final 类型 常量名 = 值: ...

随机推荐

  1. [升级说明] Senparc.Weixin.MP v14.8.11 (微信群发接口调整)

    升级内容:添加根据标签群发接口,重构原根据分组群发接口  参考微信文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp14811 ...

  2. HNOI2019退役记

    退役 警告. 今年虽然我没有变强, 但是还是比去年强一点(去年树形dp都不会). Day0 明天就是省选了,晚上22:13还没有睡觉,真的是状态不好. 打了一下LCT的板子,发现终于理解了...(这叫 ...

  3. Javascript高级编程学习笔记(53)—— DOM2和DOM3(5)遍历

    遍历 “DOM2级遍历和范围” 定义了两个用于辅助完成顺序遍历的DOM结构类型 NodeIterator 和 TreeWalk 上述两种类型可以基于给定起点的DOM结构执行深度优先的遍历操作 对于检测 ...

  4. HTML页面中插入CSS样式的三种方法

    1. 外部样式 当样式需要应用于很多页面时,外部样式表将是理想的选择.在使用外部样式表的情况下,你可以通过改变一个文件来改变整个站点的外观.每个页面使用<link>标签链接到样式表. &l ...

  5. Eclipse 在高分辨率4K显示器下图标按钮过小

    买了LG的4K显示器,发现由于分辨率太高,导致好多软件和网站都没进行高分辨率适配,显示比较小,缩放会使好多软件都显示错位.Eclipse就是其中之一. 网上搜了下解决方案如下: 原理 高DPI Win ...

  6. Eclipse 使用前常用设置

    1.常用设置的位置 Eclipse中一般的设置都是在这个位置进行设置的: 2.设置字体类型和大小 一般可以设置成这样代码比较清晰:Consolas + 常规 + 小四 3.设置各种编码 设置工作空间的 ...

  7. RISC-V指令集介绍 - 整数基本指令集

    1. 寄存器 32个x寄存器,RV32下x reg是32位宽 x0:硬连线 常数0 专门的零寄存器 x1-x31:31个通用reg 返回地址:没有强制要求那一个x作为lr,但是一般用x1 pc:额外的 ...

  8. (转)pycharm快捷键、常用设置、配置管理

    原文: http://blog.csdn.net/pipisorry/article/details/39909057 本博客一直在同步更新中! 内容包含:pycharm学习技巧 Learning t ...

  9. mysql 开发进阶篇系列 11 锁问题 (恢复和复制的需要,对锁机制的影响)

    1. 恢复和复制的需要,对innodb锁机制的影响 mysql 通过binlog文件对增删除改等更新数据的sql语句,实现数据库的恢复和主从复制.mysql的恢复机制(复制其实就是在slave mys ...

  10. 使用CodeSmith 生成代码

    CodeSmith是一款优秀的代码生成工具.在ORM中,它能帮助我们生成实体类.XML配置文件,从而简化了我们一部分的开发工作.下面简要说说它的基本用法. 1.  打开CodeSmith,创建一个模板 ...