zoukankan      html  css  js  c++  java
  • 13.JAVA-包package、import使用

    1.包的定义

    之前我们学习java时,生成的class文件都是位于当前目录中,假如出现了同名文件,则会出现文件覆盖问题,因此就需要设置不同的目录(定义包),来解决同名文件冲突问题.

    并且在大型项目中,更加需要模块化,将不同的模块保存在不同的包里,然后编译时再进行一起执行.这样的代码将更易于维护,并且支持多人开发.

     

    其实在大型项目里,不同的包里也经常出现同名文件

    比如:Linux内核的arch目录下就定义了很多不同cpu处理器相关的子目录,然后又在具体的某个cpu子目录里又有许多不同板卡配置相关的子目录,并且在每个不同板卡子目录里都有个board.h(里面根据不同板卡的硬件定义,来配置不同的引脚信息) .

     

    2.package定义包的使用

    在java中可以通过package关键字来定义包(也就是目录路径),该语句需要写在文件首行.

    定义一个包:

    package common.demo ;               //指定生成的class文件位于common/demo/目录下
    
    public class Test
    { 
             public static void main(String args[]){
                      System.out.println("Hello World");
             }
    }

    代码里出现了package定义后,我们打包编译时,则必须制定路径才行,打包编译方式有以下两种:

    javac  -d  . Test.java                                
    //"-d ."表示生成的包位于当前路径,所以会在当前路径下自动创建common/demo/目录,然后再在该目录下生成Test .class
    
     
    javac  -d  .  *.java                          
    //如果当前目录有多个java文件,并且互相引用的时候,则用这个命令,*表示编译所有java文件.

    生成的class路径如下图所示:

     

    当我们通过java命令来运行上面class包文件时,直接在编译位置输入包名+类名:

    java common.demo.Test                                  

    运行如下:

     

    3.import导入包的使用

    之前我们学习了使用package包可以将编译出来的class进行分开保存,那么如果想不同包之间互相调用,则需要使用import关键字来声明包的入口位置.

    3.1 import使用

    示例1-调用之前生成的common.demo.Test类(位于./common/demo)

    定义一个CallTest.java文件:

    import common.demo.Test;  //声明Test包类的位置,等价于import common.demo.*;
    
    public class CallTest
    { 
                 public static void main(String args[]){
                      Test.main(args);                //调用Test类的公共静态方法
             }
    }

    编译运行:

     

    PS: import声明包的时候,也可以直接使用"包名+*"来声明包里的所有class类.所以"import common.demo.Test;"等价于"import common.demo.*; ",当然这两者的导入性能都是一样的,在运行时,没有使用的包类则不会被加载.

     

    3.2 如果未使用import声明的话,在代码里也可以直接通过包名.类来实现访问

    示例2-修改CallTest.java,不使用import

    //import common.demo.Test;        //屏蔽import
    public class CallTest
    { 
                 public static void main(String args[]){
                      common.demo.Test.main(args);             //调用common.demo包里Test类的公共静态方法
             }
    }

    从上面代码可以看出,这样写会显得麻烦. 并且文件开头没有import声明,如果代码量多,则非常不方便查找到包类.

    3.3 import和package同时使用

    如果一个程序package定义了包,并且还需要通过import导入其它包时, 则package必须写在程序句首,然后import写在package之后.

    示例3- import和package同时使用,并且调用common.demo.Test

    修改CallTest.java文件:

    package call;               //指定生成的class文件位于call目录下
    import common.demo.*;       //声明common.demo包
    
    public class CallTest
    { 
             public static void main(String args[]){
                      Test.main(args);                //调用Test类的公共静态方法
             }
    }

    编译运行:

     

    3.4 import导入多个包里的相同类时

    假如我们导入两个包,该两个包分别为article.table(桌子)article.bed(床).

    并且该两个包里都有个相同类Property类,桌子的Property类用标记桌子可以用来办公,吃饭等,而床的Property类则用来标记床可以睡觉.

    由于两个包的Property类名都相同,则应该使用完整名称:

    import article.table.*;    
    import article.bed.*;
    
    public class CallTest
    { 
    
             public static void main(String args[]){
                      article.table.Property  obj1 = new article.table.Property();  //实例化一个桌子属性类
                      article.bed.Property  obj1 = new article.bed.Property();    //实例化一个床属性类
    
                      System.out.println(obj1.toString());               //打印桌子的属性
                      System.out.println(obj2.toString());               //打印床的属性
             }
    }

    4.常见的系统包介绍

    在java中,除了我们自定义包外,java本身还提供了许多常用的系统包,如下表所示:

    包名

    作用

    Java.lang

    Language的缩写,包含了基本数据类型以及包装类,String类,线程类等,该包由系统默认加载(import).

    Java.lang,reflect

    反射对象包, 该包里提供关于类和对象反射信息的工具,在后续章节学习

    Java.util

    工具包,提供日期Date类、堆栈Stack类、向量Vector类,链表LinkList类, 随机数Random类

     

    Java.util.regex

    正则工具包,用来匹配字符串

    Java.text

    处理文本包,用来格式化日期、数字和消息,分析,搜索和排序字符串,以及迭代字符、单词、语句和换行符等

    Java.io

    数据流包,处理文件读写、标准设备输出等

    Java.net

    网络编程包,里面包含了Socket 类(TCP客户端,用于连接远程主机)

    ServerSocket类(TCP服务端,用来接受客户端套接字的连接)

    DatagramSocket类(UDP 端点,用于发送和接收数据包)

    MulticastSocket 类(是 DatagramSocket 的子类,用来处理广播)

    Java.sql

    数据库操作包,提供了与各种数据库操作的工具

    未完待续

     

  • 相关阅读:
    linux-centos7 安装 maven 代码管理工具,以及常见配置
    linux-centos7 安装 jre + tomcat 实现 web 服务器
    python 开发语言 博客目录
    生存分布函数
    债务偿还
    密度聚类算法
    POI兴趣点搜索
    区域地址搜索
    地址之间的距离
    地理坐标转换
  • 原文地址:https://www.cnblogs.com/lifexy/p/10855188.html
Copyright © 2011-2022 走看看