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

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

未完待续

 

13.JAVA-包package、import使用的更多相关文章

  1. Java - 25 Java 包(package)

    Java 包(package) 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包的作用 1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2 如同文件夹一样,包 ...

  2. Java学习笔记三十一:Java 包(package)

    Java 包(package) 一:包的作用: 如果我们在使用eclipse等工具创建Java工程的时候,经常会创建包,那么,这个包是什么呢. 为了更好地组织类,Java 提供了包机制,用于区别类名的 ...

  3. Java面向对象-package import关键字

    Java面向对象-package import关键字 package包关键字,在java中,有包的概念,主要是用来归类 分类作用: 便于项目的开发和维护: 这里截取随便截取一个我最近在开发的一个开源工 ...

  4. java包(package)

    为了更好地组织类,java提供了包机制,用于区别类名的命名空间. 这样在不同的命名空间就可以有相同命名的类. 1 把功能相似或相关的类或接口阻止在同一个包中,方便类的查找和使用. 2 如同文件夹一样, ...

  5. Java 包(package)

    为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 1.包的作用 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用了树形目录的存储方式 ...

  6. Java包package之间调用问题-cmd运行窗口编译运行

    问题:在使用了java包机制(package)后,编译出现错误:找不到或无法加载主类 xxx 的错误提示信息(各种编译不通过) 先给演示结果: 编译:javac -d classes src/a/He ...

  7. Java 包(package)详解

    为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包的作用 1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2 如同文件夹一样,包也采用了树形目录的存储方式.同一 ...

  8. Java 包(package)的概念及实例

    包的作用 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用了树形目录的存储方式.同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调 ...

  9. java中package import区别

    他们两个是互逆过程package freedom.bean;将你这个类放在了/freedom/bean/这个文件夹下面要使用的话import freedom.bean.*;导入这个类

  10. Java-Runoob-面向对象:Java 包(Package)

    ylbtech-Java-Runoob-面向对象:Java 包(Package) 1.返回顶部 1. Java 包(package) 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. ...

随机推荐

  1. Python定时任务-schedule vs. Celery vs. APScheduler

    在Python开发过程中我们经常需要执行定时任务,而此类任务我们通常有如下选项: 自己造轮子 使用schedule库 使用Celery定时任务 使用APScheduler 自己造轮子实现,最大的优势就 ...

  2. 机器学习、图像识别方面 书籍推荐 via zhihu

    机器学习.图像识别方面 书籍推荐 作者:小涛 链接:https://www.zhihu.com/question/20523667/answer/97384340 来源:知乎 著作权归作者所有.商业转 ...

  3. Spring入门第二十课

    返回通知,异常通知,环绕通知 看代码: package logan.study.aop.impl; public interface ArithmeticCalculator { int add(in ...

  4. 12. nc/netcat 用法举例

    nc命令用法举例 什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可 ...

  5. DeleteDC ReleaseDC DeleteObject之间的区别

    DeleteDC 该函数删除指定的设备上下文环境(DC). 原型: BOOL DeleteDC(HDC hdc): 参数: hdc:设备上下文环境的句柄. 返回值: 成功,返回非零值:失败,返回零.调 ...

  6. JavaScript中,为什么eval和with会有性能问题?

    词法作用域 词法作用域意味着作用域是由书写代码时函数声明的位置来决定的.编译的词法分析阶段 基本能够知道全部标识符在哪里以及是如何声明的,从而能够预测在执行过程中如何对它 们进行查找. eval(.. ...

  7. OVN学习(三)

    部署OVN实验环境 同OVN学习(一) 网关 在L3网络基础上部署网关 添加L3网关 ### Central节点 # ovn-sbctl show Chassis "8bd09faf-5ba ...

  8. JavaScript 检验变量

    创建: 2019/02/20 迁入: 删除[WIP]标签(因为随时更新, 不存在完成不完成)   从[JavaScript 式与运算符]迁入typeof 更新: 2019/03/25 补充静态变量与参 ...

  9. windows和Dos常见命令总结

    linux最常见命令 (1) pwd命令pwd (即print working directory,打印工作路径) 命令的功能是显示当前的工作路径.如现在是在“/home/CAI”目录下,则可以用此命 ...

  10. pandas基础(1)_Series和DataFrame

    1:pandas简介 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标 ...