Java的包(Package)

在Java编程中,当多个开发者协作或引入第三方代码时,类名重复是一个很常见的问题。比如两个开发者都写了一个Person类,或者自定义的类与JDK自带的类重名,这时候就需要Package来区分这些同名类。

包的概念

包本质上是一种名字空间,它通过给类添加一个"前缀"来确保类的唯一性。一个类的完整标识不再是简单的类名,而是包名.类名

举个例子:

  • 若小明的Person类放在ming包下,其完整类名是ming.Person
  • 若小红的Person类放在hong包下,其完整类名是hong.Person
  • JDK自带的Arrays类位于java.util包,完整类名是java.util.Arrays

这样一来,即使类名相同,只要所在的包不同,Java虚拟机就能准确区分它们。

包的定义与目录结构

定义包时,需要在Java文件的第一行使用package语句声明:

package mr.jun; // 声明所属包

public class Arrays {
// 类内容
}

重要规则Java文件的目录结构必须与包结构完全一致。例如,对于package com.itranswarp.sample的类,其源文件必须放在src/com/itranswarp/sample目录下。

典型的项目结构如下:

package_sample
└─ src
├─ hong
│ └─ Person.java
├─ ming
│ └─ Person.java
└─ mr
└─ jun
└─ Arrays.java

编译后的.class文件也需要保持相同的目录结构,通常会放在bin目录下。

导入类:import语句

每次使用类时都写完整类名非常繁琐,Java提供了import语句来简化操作。

导入方式

  1. 导入特定类
package ming;
import mr.jun.Arrays; // 导入特定类 public class Person {
public void run() {
Arrays arrays = new Arrays(); // 可直接使用简单类名
}
}
  1. 导入整个包(不推荐):
import mr.jun.*; // 导入mr.jun包下所有类

这种方式可能导致类名冲突,且不易区分类的来源。

  1. 静态导入(很少使用):
import static java.lang.System.*; // 导入System类的所有静态字段和静态方法

public class Main {
public static void main(String[] args) {
out.println("Hello"); // 相当于System.out.println
}
}

Java编译器类名查找规则

Java编译器查找类名时遵循以下顺序:

  1. 检查是否为完整类名,若是则直接使用
  2. 查找当前包中是否存在该类
  3. 查找import的包中是否包含该类
  4. 查找java.lang包(自动导入)

如果存在同名类来自不同包,必须为其中一个类使用完整类名。

总结

  • 了解Package机制的定义和作用
  • 了解Java编译器类名查找规则

Java面向对象——9.包的更多相关文章

  1. LY.JAVA面向对象编程.包的概述、导包

    2018-07-18 08:46:57 导包:

  2. Java面向对象 包

       Java面向对象  包 知识概要:              (1)包的概念 (2)包的命名 (3)编译执行 (4)导入 (5)包的访问权限 包:   包(package)用于将完成不同功能 ...

  3. JAVA面向对象-----包机制

    JAVA面向对象-–包机制 问题: 当定义了多个类的时候,可能会发生类名的重复问题. 在java中采用包机制处理开发者定义的类名冲突问题. 怎么使用java的包机制呢? 1.使用package 关键字 ...

  4. Java 面向对象异常处理,finally,覆盖时异常特点,package,import,包之间的访问(10)

    Java 面向对象异常处理, finally:final 关键字的用法参考http://www.cnblogs.com/itcqx/p/5541659.html 覆盖时异常特点,package,imp ...

  5. 090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 04 使用包进行类管理(2)——导入包

    090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  6. 089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 使用包进行类管理(1)——创建包

    089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  7. Java之旅_面向对象_包(Package)

    http://www.runoob.com/java/java-package.html 包的作用: 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用 ...

  8. JavaSE入门学习17:Java面向对象之package(包)

           一Java包(package)        为了更好地组织类,Java提供了包机制,用于差别类名的命名空间.        包的作用:        A把功能类似或相关的类或接口组织在 ...

  9. Java入门 - 面向对象 - 07.包(package)

    原文地址:http://www.work100.net/training/java-package.html 更多教程:光束云 - 免费课程 包(package) 序号 文内章节 视频 1 概述 2 ...

  10. Java面向对象:接口

    Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...

随机推荐

  1. MySQL聚集索引与辅助索引的区别

       聚集索引也称聚簇索引,英文为clustered index.从物理存储角度来分, 索引可以分为聚集索引和辅助索引(secondary index,也称作非聚簇索引),区别主要看叶子节点存了什么数 ...

  2. Redis异常 Invalid argument during startup: unknown conf file parameter

    问题提出 设置 redis 过期事件监听时,需将 notify-keyspace-events的值设置为Ex,故去掉了 notify-keyspace-events Ex'之前的注释符.然而,启动re ...

  3. Hyperledger Fabric2.x基本概念之(一)交易和区块链

    ▲ 点击101链视界,关注不走丢 大家好,我是阿创,这是我的第30篇原创文章. 我比较爱看书,2021年全年我的阅读量大概是20+本书,涵盖法律.哲学.技术.人文. 但是阅读量一上来反而会觉得,单纯的 ...

  4. gitlabrunner之executor配置拉取镜像的账户密码

    docker executor $ cat config.toml ...... [[runners]] environment = ["DOCKER_AUTH_CONFIG={\" ...

  5. .Net Web API 002 Program和WeatherForecastController

    创建工程后,工程主要包含了Program.cs和WeatherForecastController.cs两个代码文件,还有一个WeatherForecast.cs文件,该文件定义的天气情况数据结构替, ...

  6. LinqPad:C#代码测试学习一品神器

    01.LinqPad是干嘛的? LinqPad 是一个可编写.运行C#(VB/F#/SQL)代码的轻量工具,C#开发者强烈推荐必备的工具,一个一旦用了就再也不想丢弃的工具.工具出自<C# 核心技 ...

  7. 树形DP详解

    哈喽大家好,我是 doooge,今天给大家带来的是 树形DP 详解. \[\Huge \sf 树形DP 详解 \] 1.树形DP是什么 想必大家都学过动态规划吧,树形DP 就是 DP 的一部分.顾名思 ...

  8. Hive与Clickhouse对比

    个人理解,欢迎指正 对比指标 Hive Clickhouse 元数据管理 元数据存MySQL,通过HiveMetaStore管理 每个Shard自己管理 数据存储 HDFS 本地磁盘 架构设计 MR架 ...

  9. CF1990D Grid Puzzle 题解

    CF1990D Grid Puzzle DP 好题.考虑分析两种操作的性质,不难发现操作 \(1\) 至多只能涂白 \(4\) 个方格,而操作 \(2\) 可以涂白的方格取决于这一行的方格数,几乎无上 ...

  10. 前端开发系列061-网络篇之HTML页面渲染的基本过程

    本文描述了HTML页面渲染的基本(一般)过程,需要说明的是该文并不包含关于HTML解释器.CSS解释器.JavaScript引擎等相关部分内部的具体处理细节.该文旨在简单介绍网页从加载到被我们看到过程 ...