Java基础_13 | Java中包的概念和使用详解

1.为什么需要包

默认情况下编译一个.java文件,编译之后该文件中的每个类都会生成一个<类名>.class文件,我们可以直接通过类名找到这个类,比如:

class A
{
	public void fun()
	{
		System.out.println("Hello");
	}
}
class TestA
{
	public static void main(String[] args)
	{
		A a1 = new A();
		a1.fun();
	}
}

编译:

javac TestA.java

编译完成后源文件的目录下生成的类文件如下:

直接使用java <类名>即可运行该类(前提是该类是主类,有main方法):

为了更好的管理类,Java中提供了包管理方式。

2.包的使用方式

2.1.包的声明

  • 必须在文件的第一行使用package关键字声明该文件中所有的类所在的包
  • 可以使用.表示包层(比如packge a.b表示该文件中的类位于包a中的包b中);

比如之前的文件要声明包,在代码开头添加一行代码,声明该文件中的类属于包Test:

package Test;	//声明在该文件中的类在包Test中

class A
{
	public void fun()
	{
		System.out.println("Hello");
	}
}
class TestA
{
	public static void main(String[] args)
	{
		A a1 = new A();
		a1.fun();
	}
}

2.2.编译运行含有包层的类

声明之后不可直接使用类名找到该类并运行,要通过<包名>.<类名>找到该类。

比如

package Test;

再次编译:

javac TestA.java

编译之后生成的类文件还是和之前一样,但是直接访问类会出错:

再使用<包名>.<类名>访问:

依然会出错,这是为什么呢?

我们虽然在文件中使用package声明了包,但是因为在编译时没有加入自动生成包层的参数,所以不会自动组织文件,需要手动组织文件。

在源文件目录下新建一个文件夹Test表示Test包,然后将生成的.class文件放到该包的文件中:

然后再次使用<包名>.<类名>访问,成功访问到主类:

上面的步骤需要自己手动名建立文件夹和包层对应,这样的过程过于麻烦,使用Javac编译器编译时,可以直接加入-d .参数,表示在当前目录下自动建立包层

javac -d . TestA.java


3.同包和不同包类的相互访问

3.1.访问权限

  • 同一个包中:只有私有的成员不能被访问,也只有私有的成员不能被继承
  • 不同包中,如果无任何关系:只有public类的public成员才可以被外部的包访问;
  • 不同包中,如果有继承关系
    • 子类内部:只有public类的public成员和protect成员可以被访问;
    • 子类外部:只有public类的public成员可以被访问;

3.2.如何使用不同包中的类

使用不同包中的类时,需要提前使用import关键字将包中的类导入:

import <包名>.*;			//将该包中所有的类都导入
import <包名>.<类名>;	//将该包中指定的类导入

4.归档工具jar

4.1..jar文件

Java归档工具是jdk中提供的一种多用途的存档及压缩工具,可以将多个文件或目录合并为一个.jar归档文件。

.jar文件的主要作用有:

  • 发布和使用类库;
  • 便于资源的组合和管理;

4.2.如何打包

  1. 将需要打包的文件放在一个干净的的文件夹下;
  2. 命令行进入该文件夹;
  3. 使用命令打包:
jar cvf <包名>.jar *

其中:

  • jar是jdk中的打包工具;
  • cvf是打包固定参数:c表示打包,v表示打包时输出信息,f表示打包的是文件;
  • <打包后的文件名>.jre表示打包后的文件名;
  • *表示将该文件夹下的所有文件打包;

4.3.如何打开/运行

  • 使用解压缩工具或者jar工具使用xvf参数解压:.jar包中无启动类
  • 命令行运行:.jar包中含有启动类(有main方法);
  • 双击运行:.jar包中含有启动类(有main方法),并且创建了图形化用户界面

注:

如果我们仅仅想在别的文件中使用jar包中的类,需要将jar文件放置在该文件的目录下,否则,需要在classpath环境变量中设置jar文件及其所在目录(需要将.jar文件也设置进去);

接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』

发布了208 篇原创文章 · 获赞 559 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/Mculover666/article/details/89785539