java基础之package和import语句
文章目录
- 前言
- 一、包(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语句相关推荐
- java垃圾回收机制_乐字节Java|GC垃圾回收机制、package和import语句
本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...
- java源文件构造中package语句必须在import语句后面,在一个Java源程序中,如果import语句、package语句、class语句都存在,则出现的次序应为_____。...
在一个Java源程序中,如果import语句.package语句.class语句都存在,则出现的次序应为_____. 答:package语句.import语句.class语句 和平统一,一国两制的基本 ...
- java 同一个package import_【编程基础】Java 中的Package和Import
开始要逐步去熟悉最基础的语法了,幸好之前是有底子的,所以理解也不难, import Package 有点类似C语言中的#include [头文件] 为什么要用包(Package) 当一个大型程序交由 ...
- Java基础知识之跳转语句、循环标号多级break跳出实现、Random库
文章目录 一.跳转语句continue 二.跳转语句break 三.循环标号多级break 四.Random库 一.跳转语句continue 1.基本说明 在Java中的continue和其他编程语言 ...
- Java基础篇:嵌套 switch 语句
可以将一个switch语句作为一个外部switch语句的语句序列的一部分,这称为嵌套switch语句.因为一个switch语句定义了自己的块,外部switch语句和内部switch语句的case常量不 ...
- Python基础(十)——import语句、赋值语句、增量赋值
本文以Python3以上为学习基础. 目录 1.import:模块的引入 2.赋值语句 (1)简单赋值 (2)一一对应赋值:多个变量一起赋值 (3)几个值赋给一个 (4) 数值交换 (5)链式赋值 3 ...
- package和import语句_5
J2SDK中主要的包介绍 java.lang-包含一些Java语言的核心类,如String.Math.Integer.System和 Thread,提供常用功能. java.awt-包含了构成抽象 ...
- Java基础篇:嵌套 if 语句
嵌套(nested)if语句是指该if语句为另一个if或者else语句的对象.在编程时经常要用到嵌套if语句.当你使用嵌套if语句时,需记住的要点就是:一个else语句总是对应着和它在同一个块中的最近 ...
- day16 java中的package和import
1.机制 2.总结(在idea下不需要考虑)
最新文章
- C++类的案例(二)
- win7 能下node什么版本_Node.js 版本知多少?又该如何选择?
- windows下配置Python环境并安装Pycharm2018
- python高阶函数filter_python 高阶函数之filter
- Python学习笔记:web开发1
- 数组中三个只出现一次的数字
- 深度学习之卷积神经网络(7)池化层
- python2打开文件_关于python:何时以二进制模式打开文件(b)?
- 【kafka】消费组 死掉 kafka Marking the coordinator dead for group
- 综述 | 知识图谱技术综述(下)
- 计算机网络那些事~(二)
- 强悍的Google Earth
- c语言链表死循环,单项循环链表解决Joseph 问题,死循环了,求帮忙
- 生产者消费者模型(自己上锁与阻塞队列两版本)
- JS基础详细汇总((入门级))
- 移动NB的APN知识汇总(及时补充)
- android 加速度传感器测步数,基于加速度传感器的运动步数检测算法研究
- Unity接入穿山甲广告(使用unity插件SDK接入)看这一篇就够了
- 业务指标基础分析(excel)--python实现
- 仙人掌之歌——上线运营(2)