01 22Java中级之包的定义及使用

1 包的定义

在实际的项目开发过程之中,肯定要一直存在包的概念,利用包可以实现类的包装,在以后的实际开发之中,所有的类都必须放在包里面。

对于项目而言,尤其是现代的项目不可能一个人开发完成的,往往在一个项目的开发团队之中会有2-3位的开发者进行项目业务的实现,于是在这样的情况下就不得不去面对一个问题:有可能产生类的重名定义。

在操作系统之中,已经明确严格的定义了一个要求,同一个目录之中不允许存放有相同的程序类文件,但是在实际的开发之中,很难保证类的不重复,所以为了可以进行类的方便管理,那么往往可以将我们的程序文件放在不同的目录下,不同的目录之中是可以提供有相同文件,而这个目录就称为包。

一旦程序开发之中出现有包,此时程序编译后的结果就必须将*.class文件保存在指定目录之中,但是如果手工建立则非常的麻烦,那么此时最好的做法是可以进行打包编译处理:javac -d . Hello.java。
|——“-d”:表示要生成目录,而目录的结构就是package定义的结构;
|——“.”:表示在当前所在的目录中生成程序类文件;
在程序执行的时候一定要带着包执行程序类,完整的语法是:java 包.类

2 包的导入

利用包的定义实际上就可以将不同的功能的类保存在不同的包之中,但是这些类彼此之间也一定会存在有互相调用的关系,那么在这个时候就需要使用import语句来导入其它包中的程序类。

类多而且彼此之间引用严格,这个时候应该由Java自己完成编译,编译的命令为:javac -d . *.java。

注意:关于public class与class定义的区别?
(1)类名称必须与文件名称保持一致,一个*.java文件里面只允许有一个public class,同时如果一个类需要被其他的包所使用,那么这个类一定要定义为public class;
(2)class:类名称可以与文件名称不一致,并且在一个*.java文件里面可以提供有多个class定义,编译后将形成不同的*.class文件,但是这些类只能够被本包所访问,外包无法访问。
(3)在实际的开发之中往往在一个*.java源代码文件里面只会提供有一个程序类,而这个程序类一般都用使用public class定义。
程序类中定义的包名称必须采用小写字母的形式定义。

如果要使用一个包中的很多个类,可以使用通配符“”加载。语法:“包.”。即便如此,也不表示要进行全部的加载,它会根据自己的需要加载需要的程序类,而不需要的程序类是不会加载的,不影响性能。

但是如果在开发之中采用的是“包.*”的形式进行包的导入时,那么有一点会比较麻烦:有可能两个不同的包中存在有相同的类名称。发生不明确的类引用时,最简单的解决方式是使用完整的类名称。

3 包的静态导入

类中全部方法都是static方法,从JDK 1.5开始,可以采用静态导入处理,语法:import static 包.类.*,当使用了静态导入处理之后就好比该方法直接定义在主类种,可以由主方法直接调用。

4 Jar命令

一个项目开发完成之后,一定会存在由大量的*.class文件,那么这些文件的管理往往可以利用一种压缩结构的形式来进行处理,而这样的结构在java之中就被称为jar文件,如果要想将程序打包为jar文件,那么可以直接利用jdk中提供的jar命令完成。

对程序打包编译:
(1)对程序打包编译:javac -d . 类名.java;
(2)此时会形成类中package定义的包,包里面有相应的子包与*.class文件,将其打包为包名.jar;语法:jar -cvf 包名.jar package定义的包。
|——“-c”:创建一个新的jar文件;
|——“-v”:得到一个详细输出;
|——“-f”:设置要生成的jar文件的名称;

每个*.jar文件都是一个独立的程序路径,如果要想在Java程序之中使用此路径,则必须通过CLASSPATH进行配置。语法:SET CLASSPATH=.;jar文件绝对路径。

错误提示:Exception in thread “main” java.lang.NoClassDefFoundError: cn/mldn/util/Message。
出现这种错误只有一种情况:*.jar包没有配置正确。

JDK 1.9之后出现的模块化操作
|——在JDK 1.9以前所有的版本之中实际上提供的是一个所有类的*.jar文件(rt.jar、tools.jar),在传统的开发之中,只要启动了Java虚拟机,那么就需要加载这几十兆的类文件;
|——在JDK 1.9之后提供了一个模块化的设计,将原本很大的要加载的一个*.jar文件变成了若干个模块文件,这样在启动的时候可以根据程序加载指定的模块(模块中有包),就可以实现启动速度变快的效果。

5 系统常用包

Java提供的大量类库,这些类库一般由两个方面组成:
(1)java自身提供的(除了JDK提供的类库之外还会有一些标准);
(2)由第三方厂商提供的Java支持类库,可以完成各种你所需要的功能,并且支持的厂商很多。
而在JDK之中也会提供有大量的类库,并且这些类库都是封装在不同的开发包之中的。

常见开发包:
(1)java.lang:String、Number、Object等类都在这个包里面,这个包在JDK 1.1之后默认导入。
(2)java.lang.reflect:反射机制处理包,所有的设计从此开始。
(3)java.util:工具类的定义,包括数据结构的定义;
(4)java.io:进行输入与输出流操作的程序包;
(5)java.net:网络程序开发的程序包;
(6)java.sql:进行数据库编程的开发包;
(7)java.applet:Java的最原始的使用形式,直接嵌套在网页上执行的程序类。
|——现在的程序已经以Application为主了(有主方法的程序);
(8)java.awt、java.swing:Java的图形界面开发包(GUI),其中awt是属于重量级的组件,而swing是轻量级的组件。

6 访问控制权限

在面向对象的开发过程之中有三大特点:封装、继承、多态。封装性主要依赖与访问控制权限实现,而访问控制权限在程序之中一共有四种定义:private、default(不写)、protected、public。这四种权限的作用如下:

No. 访问范围 private default protected public
1 同一包中的同一类 true true true true
2 同一包中的不同类 false true true true
3 不同包的子类 false false true true
4 不同包的所有类 false false false true
发布了77 篇原创文章 · 获赞 11 · 访问量 2654

猜你喜欢

转载自blog.csdn.net/weixin_43762330/article/details/104564325