文章目录

  • 前言
  • 一、包(package)
  • 二、import关键字
  • 三 java解释器
  • 注意:
  • 总结

前言

在同一个类中,方法名重复可以利用方法重载,数据成员与参数名重复可以利用this关键字,那么在一个大的空间中类名重复怎么办呢?

一、包(package)

为便于管理大型软件系统中数目众多的类,解决类名的冲突问题,java引入包(package)机制,提供类的多重类命名空间。
即 包内包含一组类,他们在单一的命名空间下被组织在了一起。
为了避免包名重复,约定俗成的将创建者的Internet域名倒着写。

使用
package语句应为java源文件的第一条语句,指明该文件中定义的类所在的包。若无此语句、则指定为无名包,裸体类。
其格式为 package pkg1[ .pkg2 [.pkg3…] ];

java编译器对包的管理对应于文件系统的目录管理,
例:package.com.sxt 则该文件中的类应位于.\com\sxt 目录下。
如果想在一个类中应用另一个包中的类,需要加上包名
例:

public class Dog {public static void main(String []args) {crawl.mammal.Cat c = new crawl.mammal.Cat();}
}

Cat 类 被我放在了 E:\javaSE\animal\crawl\mammal 目录下
Dog类 被我放在了 E:\javaSE\animal 目录下。

但每次都这样写,就会显得很麻烦,所以可以使用import关键字

二、import关键字

import 引入额外的类。
上述例子可以写成

import crawl.mammal.*;//引入这个包里的所有类
//import crawl.mammal.Cat;  只引入Cat这个类
public class Dog {public static void main(String []args) {Cat c = new Cat();}
}

三 java解释器

当我们引入了一个额外类时,系统是如何确定这个额外类.class的位置的呢?
这里就不得不提到 java解释器了。

编译一个.java 文件时,我们会获得一个名字完全相同的输出文件;但对于.java 文件中的每个类,它们都有一个.class 扩展名。因此,我们最终从少量的.java 文件里有可能获得数量众多的.class 文件。如果用编译型语言编写过程序,那么可能已习惯 编译器先产生出一个中间文件(通常是一个.obj文件),再用一个链接器将其与其他东西封装到一起(生成一个可执行文件),或者与类库产生器(创建一个新的类)封装到一起的情况。但那并不是 Java 的工作方式。java可运行程序就是一组可以打包并压缩的.class 文件,Java 解释器负责对这些文件的寻找、装载和解释。java解释器是JVM中的一部分。

运行过程如下:
1、解释器找出环境变量CLASSPATH,其中CLASSPATH包含一个或多个目录,用查找.class文件的根目录。

2、从根目录开始,解释器获取包的名称,将每个句点号替换为反斜杠(\ 或 / 操作系统决定)。以从CLASSPATH中产生一个路径名称。
如:package.crawl.mammal 变成 crawl\mammal 或crawl/mammal .

3、得到的路径会与CLASSPATH中的各个不同的项相连接,解释器就在这些目录中查找与你要创建的类名称相关的.class文件。

举例:假设CLASSPATH变量为:
C:\Program Files\Java\jdk-14.0.2\lib
E:\JAVASE\1Project\lianxi\bin

从这两个目录中查找Cat.class,此时,先获取包名crawl.mammal 再得到crawl\mammal,之后与CLASSPATH中的路径连接得到:

C:\Program Files\Java\jdk-14.0.2\lib\crawl\mammal
E:\JAVASE\1Project\lianxi\bin\crawl\mammal

解释器就在这些路径中查找Cat.class, 最终在第二条路径下找到。

注意:

如果用 “ * ”同时导入了两个类库,而这两个类库里面含有相同名称的类时,就会存在潜在的冲突。
当要创建这个重名的类时(不创建则不会出现问题),就会出现冲突,因为编译器不知道,你要创建的是哪一个类。这时编译器就会报错,提醒你明确指明。这个时候就得写完包名。
如:

import tuxing.simple.* ;
import java.util.* ;//都含有Vector类public class Test {public static void main(String []args) {Vector v =new Vector();//会产生冲突tuxing.simple.Vector v =new tuxing.simple.Vector();//需完全指明该类的位置//java.util.Vector v =new java.util.Vector();}
}

总结

请记住一点,package和import关键字允许你做的,是将单一的全局名字空间分割开,使得无论多少人使用Internet和java开始编写类,都不会出现名称冲突的问题。

java基础之package和import语句相关推荐

  1. java垃圾回收机制_乐字节Java|GC垃圾回收机制、package和import语句

    本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...

  2. java源文件构造中package语句必须在import语句后面,在一个Java源程序中,如果import语句、package语句、class语句都存在,则出现的次序应为_____。...

    在一个Java源程序中,如果import语句.package语句.class语句都存在,则出现的次序应为_____. 答:package语句.import语句.class语句 和平统一,一国两制的基本 ...

  3. java 同一个package import_【编程基础】Java 中的Package和Import

    开始要逐步去熟悉最基础的语法了,幸好之前是有底子的,所以理解也不难,  import Package 有点类似C语言中的#include [头文件] 为什么要用包(Package) 当一个大型程序交由 ...

  4. Java基础知识之跳转语句、循环标号多级break跳出实现、Random库

    文章目录 一.跳转语句continue 二.跳转语句break 三.循环标号多级break 四.Random库 一.跳转语句continue 1.基本说明 在Java中的continue和其他编程语言 ...

  5. Java基础篇:嵌套 switch 语句

    可以将一个switch语句作为一个外部switch语句的语句序列的一部分,这称为嵌套switch语句.因为一个switch语句定义了自己的块,外部switch语句和内部switch语句的case常量不 ...

  6. Python基础(十)——import语句、赋值语句、增量赋值

    本文以Python3以上为学习基础. 目录 1.import:模块的引入 2.赋值语句 (1)简单赋值 (2)一一对应赋值:多个变量一起赋值 (3)几个值赋给一个 (4) 数值交换 (5)链式赋值 3 ...

  7. package和import语句_5

    J2SDK中主要的包介绍   java.lang-包含一些Java语言的核心类,如String.Math.Integer.System和 Thread,提供常用功能. java.awt-包含了构成抽象 ...

  8. Java基础篇:嵌套 if 语句

    嵌套(nested)if语句是指该if语句为另一个if或者else语句的对象.在编程时经常要用到嵌套if语句.当你使用嵌套if语句时,需记住的要点就是:一个else语句总是对应着和它在同一个块中的最近 ...

  9. day16 java中的package和import

    1.机制 2.总结(在idea下不需要考虑)

最新文章

  1. C++类的案例(二)
  2. win7 能下node什么版本_Node.js 版本知多少?又该如何选择?
  3. windows下配置Python环境并安装Pycharm2018
  4. python高阶函数filter_python 高阶函数之filter
  5. Python学习笔记:web开发1
  6. 数组中三个只出现一次的数字
  7. 深度学习之卷积神经网络(7)池化层
  8. python2打开文件_关于python:何时以二进制模式打开文件(b)?
  9. 【kafka】消费组 死掉 kafka Marking the coordinator dead for group
  10. 综述 | 知识图谱技术综述(下)
  11. 计算机网络那些事~(二)
  12. 强悍的Google Earth
  13. c语言链表死循环,单项循环链表解决Joseph 问题,死循环了,求帮忙
  14. 生产者消费者模型(自己上锁与阻塞队列两版本)
  15. JS基础详细汇总((入门级))
  16. 移动NB的APN知识汇总(及时补充)
  17. android 加速度传感器测步数,基于加速度传感器的运动步数检测算法研究
  18. Unity接入穿山甲广告(使用unity插件SDK接入)看这一篇就够了
  19. 业务指标基础分析(excel)--python实现
  20. 仙人掌之歌——上线运营(2)

热门文章

  1. 【NOIP模拟】天使的分裂
  2. 一个隐藏android应用图标的方法
  3. 国际快递 什么是国际快递物流
  4. WSO2 API Manager代码问题漏洞(CVE-2022-29464)
  5. 浅谈Linux PCI设备驱动(一)
  6. Java实现递归查询树结构
  7. Android开发中的WMS详细解析
  8. Android简易计分器
  9. Java学习——逻辑运算、双分支结构(if\else)
  10. psycopg2连接PostgreSQL下的不同模式(SCHEMA)