专栏首页Linux驱动13.JAVA-包package、import使用

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

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

未完待续

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JAVA-方法重载,类的封装访问权限,构造/析构方法

    通过类来生成的一个对象, 根据类生成的对象都具备相同的行为(class成员函数),但是属性(class成员变量)不一定相同.

    张诺谦
  • 详解-使用nfs作为根文件系统启动,(3)

    通过设置u-boot的bootargs来更改开机自动进入nfs远端服务器,不需要mount指令,实现虚拟机编译程序后直接通过u-boot烧写程序 1  使用nf...

    张诺谦
  • 24.Linux-Nand Flash驱动(分析MTD层并制作NAND驱动)

    1.本节使用的nand flash型号为K9F2G08U0M,它的命令如下: ? 1.1我们以上图的read id(读ID)为例,它的时序图如下: ? 首先需要...

    张诺谦
  • spring boot 多数据源加载原理

    git代码:https://gitee.com/wwj912790488/multiple-data-sources

    爱撸猫的杰
  • Photoshop保存ICO格式插件 ICOFormat.8bi

    Photoshop 一直不支持导入导出ico格式图标文件,不过还好有一款插件可以让photoshop支持打开和保存 ico 图标格式,这款插件就是 ICOFor...

    德顺
  • 被控造假、打人之后要一雪前耻!“杀马特”华裔教授推出paGAN,GoodFellow也点赞

    【新智元导读】还记得“杀马特教授”黎颢吗?他将率领团队在下周召开的SIGGRAPH中展示一项黑科技“paGAN”:每秒1000帧扫描,用单幅照片实时生成超逼真动...

    新智元
  • 盒子端 CSS 动画性能提升研究

    对于 Web 动画的性能问题,仅仅停留在感觉已经优化的OK之上,是不够的,想要在盒子端跑出高性能接近 60 FPS 的流畅动画,就必须要刨根问底,深挖每一处可以...

    Sb_Coco
  • 盒子端 CSS 动画性能提升研究

    Sb_Coco
  • 数据结构与算法(二)-线性表之单链表顺序存储和链式存储

    前言:前面已经介绍过数据结构和算法的基本概念,下面就开始总结一下数据结构中逻辑结构下的分支——线性结构线性表

  • 盒子端 CSS 动画性能提升研究

    Sb_Coco

扫码关注云+社区

领取腾讯云代金券