zoukankan      html  css  js  c++  java
  • 6. 包机制

    一、包(package)机制概述

    1. 包机制提供了类的多层命名空间,用于解决类的命名冲突、类文件管理等问题

    2. Java允许将一组功能相关的类放在同一个包下,从而组成逻辑上的类库单元

    3. 位于包中的每个类的完整类名都应该是包名和类名的组合

    4. Java默认所有源文件导入java.lang包下的所有类

     

    二、package关键字

    1. 作用:将含有package语句“package 包名;”的Java源文件里定义的所有类放在package指定的包结构下

    // 把Hello类放在lee包空间下
    package lee; public class Hello { public static void main(String[] args) { System.out.println("Hello World!"); } }

    2. 一旦在Java源文件中使用了package语句“package 包名;”,就意味着该源文件里定义的所有类都属于这个包

    3. package语句必须作为源文件的第一条非注释性语句,且一个源文件只能指定一个包,即只能包含一条package语句

    4. 如果没有显式指定package语句,则处于默认包下

    5. Oracle建议使用公司Internet域名倒写来作为包名,例如公司的Internet域名是crazyit.org,则该公司的所有类都建议放在org.crazyit包及其子包下

    6. 在实际企业开发中,还会在org.crazyit包下以项目名建立子包;如果项目足够大,则还会在项目名子包下以模块名建立模块子包;如果该模块下还包括多种类型的组件,则还会建立对应的子包

    三、import关键字

    1. 作用:向某个Java文件中导入指定包层次下某个类或全部类,这样在源文件中使用这些类时就可以省略包前缀(不用写包名)

    // 导入单个类
    import package.subpackage...ClassName;
    import lee.sub.Apple;
    
    // 导入指定包下全部类
    import package.subpackage...*;
    import lee.sub.*;
    

    补:上面语句中的星号(*)只能代表类,不能代表包。

    2. import语句应出现在package语句(如果有的话)之后、类定义之前

    3. 一个Java源文件可以包含多个import语句

    4. Java默认所有源文件导入java.lang包下的所有类

    四、import static关键字

    1. 作用:导入指定类的某个静态成员变量、方法或全部的静态成员变量、方法

    // 导入单个静态成员变量、方法
    import static package.subpackage...ClassName.fieldName | methodName;
    
    // 导入指定类的全部静态成员变量、方法
    import static package.subpackage...ClassName.*;
    

    补:上面语句中的fieldName、methodName和*都只能代表静态成员变量或方法名。

    2. import static语句放在与普通import语句相同的位置,它们之间没有任何顺序要求

    3. 使用import可以省略写包名,而使用import static则可以连类名都省略,它们都是用于减少程序中代码编写量的,只是导入的对象不一样而已

    五、包机制带来的文件结构问题

    1. 对于包含package语句的Java源文件,使用带-d选项的javac命令进行编译后会自动建立对应的文件结构来存放相应的class文件

    【示例】在路径“D:”下创建内容如下的“Hello.java”源文件,执行命令“javac -d . Hello.java”后,发现当前路径下并没有Hello.class文件,而是在当前路径下多了一个名为pck的文件夹,该文件夹下则有一个Hello.class文件。

    package pck;
    
    public class Hello
    {
    	public static void main(String[] args)
    	{
    	}
    }
    

    补:如果直接使用命令"javac Hello.java"来编译该文件,则将会在当前路径下生成一个Hello.class文件,而不会生成pck文件夹。但Hello.class必须放在pck文件夹下才是有效的,所以应尽量使用带-d选项的javac命令来编译。

    注:很多初学者以为只要把生成的class文件放在某个目录下,这个目录名就成了这个类的包名。这个看法是错误的,不是有了目录结构,就等于有了包名。为Java类添加包必须在Java源文件中通过package语句指定,单靠目录名是没法指定的。

    Java的包机制需要两个方面保证:①源文件里使用package语句指定包名;②class文件必须放在对应的路径下。

    2. 假设某个应用中包含两个Hello类,这两个Hello类还对应两个Hello.class文件

        ①上列两个Hello.java文件在文件系统中必须分开存放才不会引起冲突

        ②上列两个Hello.class文件在文件系统中也必须分开存放

        ③把Java源文件放在与包名一致的目录结构下,但通常建议将源文件和class文件分开存放

    • 项目文件夹/src/pck/Hello.java
    • 项目文件夹/classes/pck/Hello.class

        ④位于包中的类,在文件系统中必须有与包名层次相同的目录结构

    3. 同一个包中的类不必位于相同的目录下

        ①如有pck.Hello和pck.Halo两个类,它们完全可以一个位于C盘下某个位置,一个位于D盘下某个位置

        ②只要CLASSPATH环境变量中包含这两个路径,虚拟机会自动搜索CLASSPATH下的子路径,把它们当成同一个包下的类来处理

     

    六、Java的常用包

    Java的核心类都放在java包及其子包下,Java扩展的许多类都放在javax包及其子包下。这些实用类就是我们所说的API,Oracle按这些类的功能分别放在不同的包下。

    • java.lang:该包中包含了Java语言的核心类,如String、Math、System和Thread类等
    • java.util:该包中包含了Java的大量工具类/接口和集合框架类/接口,例如Arrays、List和Set等
    • java.net:该包中包含了Java网络编程相关的类/接口
    • java.io:该包中包含了Java输入/输出编程相关的类/接口
    • java.text:该包中包含了Java格式化相关的类
    • java.sql:该包中包含了Java进行JDBC数据库编程的相关类/接口
    • java.awt:该包中包含了抽象窗口工具集的相关类/接口,这些类主要用于构建图形用户界面程序
    • java.swing:该包中包含了Swing图形用户界面编程的相关类/接口,这些类可用于构建平台无关的GUI程序
  • 相关阅读:
    多线程与高并发常见面试题(1)
    LoadRunner 多用户并发 登录,上传数据,登出的脚本教程
    windows cmd 链接远程mysql服务器
    Ubuntu 16.04添加阿里云源
    sqlite 数据库与mysql 数据库使用区别记录
    jdk源码之 hashmap 与hashtable 的区别
    通过构造器启动线程的实现方式及其缺点记录。
    eclipse 中过滤空包,目录树中不显示。
    javascript中正则实现读取当前url中指定参数值方法。
    Reactjs+Webpack+es2015 入门HelloWord(一)
  • 原文地址:https://www.cnblogs.com/xzxl/p/10908716.html
Copyright © 2011-2022 走看看