Java复习-23-包

包的定义与使用

包的定义

包 = 存放类程序文件的目录,程序类中定义的包名称必须采用小写字母的形式定义。

package com.example.demo ; // 定义包,其中.表示分割子目录 (子包)
public class Hello {
    public static void main(String args[]) {
        System.out.println("Hello World !");
    }
} 

一旦程序开发之中出现有包,此时程序编译后的结果就必须将*.class文件保存在指定的目录之中,但是如果手工建立则非常麻烦,那么此时最好的做法是可以进行打包编译处理:

javac -d . Hello.java
  • “-d”:表示要生成目录,而目录的结构就是package定义的结构com/example/demo
  • “.” :表示在当前所在目录中生成程序文件

有了如上的包后,在程序执行时,必须要带有包

java com.example.demo.Hello

从此之后,完整的类名称应该是“包.类名称”

包的导入

导入

  1. 导入单类
    利用包的定义实际上就可以将不同的功能的类保存在不同的包之中,但是这些类彼此之间也一定会存在有互相调用的关系,那么在这个时候就需要使用import语句来导入其他包中的程序类。
  2. 导入整包
    当遇到要导入同一个包中的许多类时,可使用import 包.* 的导入形式,它会根据自己的需要加载所需要的程序类,不需要的程序类是不会被加载的,所以使用 * 还是使用具体的类,性能上是没有区别的。
  3. 类名冲突(包不重名)
    而当两个包中都包含有名称相同的程序类时,此时在主程序中使用类,必须声明出类的完整名称。

多包编译

若导入的包也未编译的话,且当类的数量很多,彼此之间互相引用严格时,那么这个时候最好的做法不是区分顺序,而是直接交给java自己来完成:javac -d . *.java

public class 和 class 的区别

  • public class:类名称必须与文件名称保持一致,一个 *.java 文件里面只允许有一个 public class,同时如果一个类需要被其他的包所使用,那么这个类一定要定义为 public class;
  • class:类名称可以与文件名称不一致,并且在一个 *.java 文件里面可以提供有多个 class 定义,编译后将形成不同的*.class文件,但是这些类只能够被本包所访问,外包无法访问

静态导入

当使用了静态导入之后,就好比该方法是直接定义在主类中一样,即此时调用该方法时,不需要再添加类名。(有点类似与 C语言的 #include)
但实际运用中较少。

jar文件

定义

对于一个项目工程,到最后会有大量的class文件,这些文件如果散着给用户,不利于维护,因此可以利用一种压缩结构来进行处理,这样的结构再java中被称为jar文件。

打包命令

利用jdk中提供的jar命令来完成:

  1. 对程序进行打包编译:
    java -d . *.java
    最终会形成一个 com 的包,包中有相应的子包和 *.class文件
  2. 将其打包为 test.jar
    jar -cvf test.jar com
  • “-c”:创建一个新的jar文件
  • “-v”:得到一个详细输出
  • “-f”:设置要生成的jar文件名称,本处定义的是“test.jar”

包的使用

  1. 每一个 *.jar 文件都是一个独立的程序路径,如果想在Java程序中使用此路径,则必须通过 CLASSPATH 进行配置。
    Set CLASSPATH=.; 盘符:\前置路径\test.jar (多个路径,使用分号分隔)
  2. 正常编译那个调用了jar包中的类的主java程序,并使用
编译程序类:javac -d . testDemo.java 
解释程序:  java testDemo
  1. 其他情况
    当程序编译通过后,若由于CLASSPATH发生了改变,类无法加载到testDemo类的时候会出现如下的错误提示:

Exception in thread “main” java.lang.NoClassDefFoundError: testDemo
出现该报错,只有一个情况:*.jar包没有配置正确。

JDK1.9之后出现的模块化操作

  • JDK1.9之前实际上提供的是一个所有类的 *.jar 文件(rt.jar,tools.jar),此时开发中,只要启动了java虚拟机,那么就需要加载这几十M的类文件。
  • 在 JDK 1.9之后提供了一个模块化的设计,将原本很大的要加载的一个*jar文件变成了若干个模块文件,这样启动的时候可以根据程序加载指定的模块(模块中有包),以加快启动速度。

你可能感兴趣的:(编程语言与bug,java,开发语言)