zoukankan      html  css  js  c++  java
  • Java 包的使用

    Java 包

    Java面向对象的核心的概念:类、接口、抽象类、对象;【主体】

    包的定义:

             指的是一个程序的目录,在最早的时候,如果要开发一个程序,只需要定义一个Java文件,而后在这个文件中编写所需要的类文件。

             在编译之后程序直接保存在根目录下,而利用包可以实现同一个程序的拆分 即可以根据需求,把代码程序保存在不同的目录下。

             包的定义可以使用关键字:package

    package cn.mldn.demo ; // 定义的包

    public class Hello {

             public static void main(String [] args) {

                       System.out.println("Hello,World!") ;

             }

    }

    定义的包后有 点 就表示子目录的含义;如果类中有了包的定义,那么就必须让其保存在特定的目录中,但不要自己手工创建目录,应该使用命令行功能自动生成目录:

             ·打包编译: javac –d  .***.java

           -d  表示生成目录,根据package的定义生成目录

           。   表示保存的路径,如果为‘。’表示在当前所在的路径下生成

        --执行完命令后,会在制定的路径下生成package所定义的目录,class文件也会编译在目录下,但代码*.java文件不变位置;且在java解释程序的时候,不要进入包目录中解释class文件,而是在包的外面,输入类的完整名称(包.类名称);

    实际开发中,所有的类都定义在包之中。

    包的导入:

             使用包的定义,可以将一个完整的程序拆分为不同的文件进行分别的保存,如此会导致一个开发问题——不同的包直接可能存在相互的访问,由此就需要使用 包的导入 来操作

             包的导入的关键字: import

    包的导入

    package cn.mldn.util ;

    class Messages {

             public void print() {

                       System.out.println("Hello,World!!!") ;

             }

    }

    package cn.mldn.test ;

    import cn.mldn.util.Messages ;  

    // 导入util包中要使用的类

    public class TestMessage {

             public static void main(String [] args) {

                       Messages msg = new Messages() ;

                       msg.print() ;

             }

    }

    上述的程序在解释运行的时候会报错,

     

    结合报错内容,对程序做出如下修改:

    包的导入

    package cn.mldn.util ;

    public  class Messages {

             public void print() {

                       System.out.println("Hello,World!!!") ;

             }

    }

    //对Messages类进行了public公共类的声明

    package cn.mldn.test ;

    import cn.mldn.util.Messages ;  

    // 导入util包中要使用的类

    public class TestMessage {

             public static void main(String [] args) {

                       Messages msg = new Messages() ;

                       msg.print() ;

             }

    }

    总结:

             文件名称必须与类名称保持一致,在一个*.Java文件中里面只可以有一个public class声明,如果一个类被其他包访问,一定要被定义为public class(公共类);

             同理,class文件与类名称可以不一致,但是要求一个*.java文件中可以有多个class定义,编译后会形成多个class文件,如果一个类使用的是class定义,那么表示该类只可以被本包所访问。

             实际中,Java编译器考虑多个java文件相互引用的情况的产生,为此Java提供了通配符*的操作,【javac –d . *.java】来解决该问题,即可通过一个命令,同时编译所有的Java文件,不用担心编译的顺序等问题。

    但是在进行包的导入的时候也发现了一个局限的问题,如果需要导入一个包中的多个类,非常麻烦;Java提供了通配符功能即【import 包 .*】 实现一次性导入包中所有可访问的类。

    开发中,可能会遇到同一个类中导入不同的包,不同的包中可能有同名类;在这种情况下,程序会报错“类的引用不明确”,所以在遇到这个问题的时候,需要在使用类的时候加上类的完整名称( . );明确类的引用;如果认为程序中的导包操作会出现冲突,那么就在程序的外包类中,写处完成的类名称。

     系统常见的包:

             Java本身提供了大量的程序开发包,除了官方提供的开发包,还有很多第三方提供的开发包。 基本上所有包都有提供。

             在Java-API文档里package目录中:

    包含的类/功能

    备注

    Java.lang

    String object Integer等类

    JDK1.1+ 自动导入

    Java.lang.reflect

    反射开发包

    反射开发包

    Java.util

    链表类等

    Java的工具包

    Java.util.regex

    正则工具包

    Java.text

    国际化处理程序包

    Java.io

    进行程序输入、输出处理以及文件操作功能包

    Java.net

    网络编程开发包

    Java.sql

    数据库程序开发包

    Java.applet

    Applet程序开发包(在网页上嵌套的程序)

    淘汰【类似JavaScript】

    Java.awt

    进行单机版界面编写

    JDK1.0

    Javax.swing

    JDK1.2

     Jar命令:

             在任何的项目中一定存在大量的 *.class 文件;在交付用户使用前,会使用jar命令,对class文件进行压缩,并且压缩的都是以包为单位;

    定义多个java文件,随后打包编译java文件形成多个class文件;

    其后,使用jar文件压缩class包文件,【jar –cvf my.jar cn】

     

    命令剖析:jar命令 -创建文档 输出过程 档案名  压缩名.jar 压缩对象:

    F:>jar –help
    
    用法: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...
    
     
    
     主操作模式:
    
      -c, --create               创建档案
    
      -i, --generate-index=FILE  为指定的 jar 档案生成
    
                                 索引信息
    
      -t, --list                 列出档案的目录
    
      -u, --update               更新现有 jar 档案
    
      -x, --extract              从档案中提取指定的 (或全部) 文件
    
      -d, --describe-module      输出模块描述符或自动模块名称
    
     
    
     在任意模式下有效的操作修饰符:
    
     
    
      -C DIR                     更改为指定的目录并包含
    
                                 以下文件
    
      -f, --file=FILE            档案文件名。省略时, 基于操作
    
                                 使用 stdin 或 stdout
    
          --release VERSION      将下面的所有文件都放在
    
                                 jar 的版本化目录中 (即 META-INF/versions/VERSION/)
    
      -v, --verbose              在标准输出中生成详细输出
    
     
    
     在创建和更新模式下有效的操作修饰符:
    
     
    
      -e, --main-class=CLASSNAME 捆绑到模块化或可执行
    
                                 jar 档案的独立应用程序
    
                                 的应用程序入口点
    
      -m, --manifest=FILE        包含指定清单文件中的
    
                                 清单信息
    
      -M, --no-manifest          不为条目创建清单文件
    
          --module-version=VERSION    创建模块化 jar 或更新
    
                                 非模块化 jar 时的模块版本
    
          --hash-modules=PATTERN 计算和记录模块的散列,
    
                                 这些模块按指定模式匹配并直接或
    
                                 间接依赖于所创建的模块化 jar 或
    
                                 所更新的非模块化 jar
    
      -p, --module-path          模块被依赖对象的位置, 用于生成
    
                                 散列
    
     
    
     只在创建, 更新和生成索引模式下有效的操作修饰符:
    
     
    
      -0, --no-compress          仅存储; 不使用 ZIP 压缩
    
     
    
     其他选项:
    
     
    
      -?, -h, --help[:compat]    提供此帮助,也可以选择性地提供兼容性帮助
    
          --help-extra           提供额外选项的帮助
    
          --version              输出程序版本
    
     
    
     如果模块描述符 'module-info.class' 位于指定目录的
    
     根目录中, 或者位于 jar 档案本身的根目录中, 则
    
     该档案是一个模块化 jar。以下操作只在创建模块化 jar,
    
     或更新现有的非模块化 jar 时有效: '--module-version',
    
     '--hash-modules''--module-path'。
    
     
    
     如果为长选项提供了必需参数或可选参数, 则它们对于
    
     任何对应的短选项也是必需或可选的。
    View Code

    Jar文件中有一个META-INF/MANIFEST.MF文件,文件中存放文件辅助信息;

    Jar文件的使用:

             直接压缩生成的jar文件并不可以直接使用,jar文件必须配置 CLASSPATH 才可以加载;

    SET CLASSPATH = . ;jar文件位置

    同样可以在系统环境变量中配置:

             在CLASSPATH中配置,在原有的内容后面加上Jar文件的位置

             设置完毕后,即系统就识别jar文件为一个目录文件的存在,即可以看见目录中的包了。

    Java包的总结:

             开发程序均要求有包的存在

             如果不同包之间的类发生了冲突必须写出完整的类名称

             使用第三方的jar文件,必须配置classpath系统环境变量【配置jar路径】

            

  • 相关阅读:
    影响历史进程的三只苹果
    C语言实现的RSA算法程序(使用GMP)
    C++实现的大整数分解Pollard's rho算法程序
    Java实现的大整数分解Pollard's rho算法程序
    素性测试算法
    素性测试AKS算法程序
    C++实现的Miller-Rabin素性测试程序
    为什么天朝互联网的三巨头是BAT
    KMP模式匹配算法程序(Python,C++,C)
    I00014 汉若塔问题的C++程序
  • 原文地址:https://www.cnblogs.com/wangyuyang1016/p/10872594.html
Copyright © 2011-2022 走看看