java中package(包)的使用理解

【Java基础】25.包(package) 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。 阅读详情
AI摘要

本文详细介绍了Java中包的概念及用途,包括包的定义、如何使用包来避免命名冲突、不同包之间的类如何互相访问等内容。

最近在学习java,在学习到对象和类这一部分时,接触了java中很重要的一个概念:package,也就是包。一开始对于package的使用我产生了许多疑惑,不仅是理论上的,在实际写代码的尝试中也出现了许多意想不到的错误。之后自己查阅了许多博客以及stackoverflow上的一些讲解,再结合编写代码试验,总算是稍微弄清楚了关于package的使用,在此为自己的理解做一个笔记。

package的简单定义如下:package是一个为了方便管理组织java文件的目录结构,并防止不同java文件之间发生命名冲突而存在的一个java特性。不同package中的类的名字可以相同,只是在使用时要带上package的名称加以区分。

在使用package的时候,如果java文件中使用了package,那么该java文件必须放在命名与package名称相同的目录下,比如:

package test;

public class Test {}
该文件的目录结构则为:...test/Test.java

又如:

package com.micheal.test

public class Test {}
java解释器会将package中的.解释为目录分隔符/,也就是说该文件的目录结构为:...com/micheal/test/Test.java

那么package中的类的访问权限是怎么样的呢?在同一package中的类是可以互相访问的,比如:

//Test1.java

package test;

class Test1 {}

//Test2.java

package test;

public class Test2 {
      public static void main(String[] args) {
            Test1 t;
      }
}
由于Test2与Test1在同一个package——test中,所以Test2能够直接调用Test1生成Test1的引用变量t;在命令行进行编译时,直接编译Test2.java即可:javac Test2.java(若没有进入Test1和Test2的目录,需在Test2前加上绝对路径)

若类在不同的package中,那么在一个类中要调用另一个package中的类(必须是public类,非public类不支持不同包间访问),需要在类名前明确加上package名称;不过,java中存在一个让java程序员偷懒的特性,叫做import关键字。使用import就可以在一个package中导入另一个package中的类,不过import和C语言和C++中的#include是不同的,import并不会在当前java文件中嵌入另一个package中的类的代码,只是告诉java文件,不属于该包的类能够到哪里去寻找而已:

package p1;

//import p2.Test2

public class Test1 {
      public static void main(String[] args) {         
          p2.Test2 t;//Test2 t if we import p2.Test2 before;
      }
}

那么问题来了,java文件在编译时如何知道p2这个package在哪?这里要提到一个重要的变量:classpath。classpath是java在编译程序时查找类文件的路径,java编译器会在classpath中包含有的路径中查找java的类文件。

举个例子,比如说classpath的值(Windows下)是.(当前目录);C:/,那么编译器在查找类的时候,就只会在当前目录和C:/中查找。所以如果p2这个目录与p1在同一目录层次下,那么p2就能直接被查找到了,查找也就结束了;如果不在的话,比如说p1的目录结构是C:/document/java/project/p1,p2的目录结构是C:/document/java/test/p2,那么如果C:/document/java/test不在classpath中,java解释器是找不到p2这个package的位置的,那么就会提示错误,因此需要将C:/document/java/test加入到classpath中。



Java面向对象(基础)--package和import关键字的使用 阅读详情

相关推荐

RK3568 Android12预置APK的三种模式详解:不可卸载、可卸载与永久删除

本文深入解析RK3568 Android12系统中APK预置的三种模式:不可卸载、可卸载与永久删除,详细介绍了每种模式的技术实现、应用场景及实战案例。针对Rockchip平台特性,提供从目录创建到系统编译的完整指南,帮助开发者根据产品需求选择最佳预置方案,并解决常见问题。

k8s6orchestrator的博客 967

Java包(package)

Java包(package)

m0_55987353的博客 1399

OpenHarmony自定义Launcher

OpenHarmony源码版本:4.0release开发板:DAYU / rk3568DevEco Studio版本:4.0.0.600切换分支为OpenHarmony-4.0-Release,并下载源码。

Abner_Crazy的博客 1630

Java中的包(package)详情解释

一、Java 包(package) 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。   包的作用   1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。   2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。   3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。   Java 使用包(packag

LSFZ88888的博客 1万+

已解决-Parallels Desktop 16 网络初始化失败:您的虚拟机将继续正常运作,但将无法连接网络

我是月球挖掘机,相信不少打工人为了尝鲜已经更新了MacOS 11 Big Sur,当然,苹果每次的系统大更新,都会给我们软件的功能无法使用惊喜,这次的也不例外。 这个问题是我在更新macOS Big Sur之后,Parallels Desktop打开虚拟机后,提示: 报错信息 网络初始化失败:您的虚拟机将继续正常运作,但将无法连接网络 这是我的软件版本: 起初我以为是我的虚拟机坏了,结果重装了一遍虚拟机,没有任何用处。我开始在网上找方法,只能找到那个使用命令行打开软件的命令,除此之外没有了

月球挖掘机 5万+

搬运机器人系列编程:KUKA KR QUANTEC_(2).KUKA KRL语言编程基础

定义一个函数END!调用函数PRINT "结果: ", result!定义一个过程PRINT msgEND!调用过程printMessage("欢迎使用 KUKA 机器人")!定义搬运零件的起始位置和目标位置!定义焊接路径的各个点!定义喷涂路径的各个点KUKA Robot Language (KRL) 是一种专门为工业机器人设计的编程语言,具有结构化编程、丰富的库函数、实时性以及集成性等特点。

zhubeibei168的博客 1246

Java入门教程||Java 包(package)

为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。Java使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。例如,一个Something.java 文件它的内容那么它的路径应该是 net/java/util/Something.java 这样保存的。package(包)的作用是把不同的java程序分类保存,更方便的被其他java程序调用。

爱编程的鱼的博客 5185

OpenClaw使用ClawHub安装skill网络不稳定?Rate limit exceeded报错?试试这个国内高速镜像工具!

使用 ClawHub 安装 Skill 时遇到 🌐 网络不稳、❌ Rate limit 或命令不可用?使用这个镜像工具,轻松解决skill安装问题,⚡

XiaoqiangClub的博客 1260

对JAVA的包package的理解

一直理解不了java中的包,包括下图中的这种在几乎每个java程序的开头都有的import和package。今天在实际应用中突然理解了。

qq_52983535的博客 790

双馈风机并网系统宽频振荡机理与抑制方法研究

双馈风机并网系统宽频振荡分析与抑制 摘要:本文研究了双馈风机(DFIG)接入弱电网引发的宽频振荡问题。通过建立DFIG并网系统阻抗模型,分析了锁相环带宽、电流环带宽等参数对阻抗特性的影响。研究揭示了DFIG与电网阻抗交互导致交截频率处相位差超过180°的振荡机理。提出基于锁相环优化的阻抗重塑抑制策略,采用电压补偿和陷波器改善系统稳定性。仿真结果表明,该方法能有效降低相位差约10°-168°,显著抑制宽频振荡。代码实现了阻抗建模、稳定性分析和抑制策略验证,为工程应用提供了理论依据。

huanghm88的专栏 319

车载网络测试实操源码_使用CAPL脚本进行UDS刷写及其自动化测试

本文主要讲解如何使用CAPL脚本进行UDS刷写及其自动化测试,并结合了几个测试实例进行介绍,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1552

如何理解和使用Java package包

<br />        Java中的一个包就是一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起。这个名称空间就是包名。可以使用import关键字来导入一个包。例如使用import java.util.*就可以导入名称空间java.util包里面的所有类。所谓导入这个包里面的所有类,就是在import声明这个包名以后,在接下来的程序中可以直接使用该包中的类。例如:<br />import java.util.* public class SingleImport { pu

Fisher的专栏 6万+

044、镜头脏污与异物检测:产线 AOI 检测方案与 ISP 脏污补偿

文章摘要(148字) 本文针对镜头生产中的脏污检测问题,提出产线AOI检测与ISP补偿结合的解决方案。产线端采用明场、暗场、偏振三通道联合检测技术,将油污漏检率从8.3%降至0.2%。ISP端通过RAW域局部梯度分析和频域补偿算法,动态修复产线漏检的微小脏污。作者结合实战案例,详细分析了传统灰度阈值法的局限性,并给出多模态检测的代码实现要点,强调必须建立"产线拦截+终端补偿"的双重防护机制。

sundong_81的博客 228

java的包Package中同名类的冲突及其理解

在一个项目中建立三个包分别为:                                                         chapter2                                                         pack2

钟真龙的博客 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Java】包package的概念和理解以及访问权限

Java 包(package) 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。 如何创建包 创建包的时候,你需要为这个包取一个合适的名字。之后,如果其他的一个源文件包含了这个包提供的类、接口、枚举或者注释类型的时候,都必须将这个包的声明放在这个源文件的开头。 包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。 如果一个源文件中没有...

JockLiu的博客 952

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

[软构博客]关于java中包package、子包及导入import的理解和用法

包与子包 什么是一个包? 包(package)是一系列功能相关的类放在一起组成的类库单元。简单地说,包就是一系列功能相关的类的集合。 那么为什么要引入包的概念呢? 这是为了解决类的重名冲突。 生活中,我们都会遇到同学重名的情况:两同学,都叫张三,那么我们都是如何将他们呢加以区分的呢? 我们通常是不是采取给他们添加前缀的方式来对他们加以区分:如果他们属于不同的班级,分别属于1班,2班,我们就会说1班的张三。 同样,对于类而言,我们采取为他们添加包名前缀的方式,来对他们进行区分。比如说:对于两个类,

qq_49086305的博客 4008

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 分治求逆序对算法
下一篇: Java关于子类对父类私有方法覆盖的问题
FengGLA
博客等级 码龄11年 33粉丝 15原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值