182. Java 包 - 创建和使用 Java 包

182. Java 包 - 创建和使用 Java 包

Java 中,包(Package 是组织类和接口的一种机制。它可以帮助我们将相关的类型组织在一起,避免命名冲突,并使代码更加模块化和可维护。


🚀 创建自定义包

要定义一个包,需要在 Java 源文件的顶部,使用 package 语句:

java 复制代码
package com.example.shapes;

public class Circle {
    public double radius;
    public Circle(double r) {
        radius = r;
    }
}

🧠 注意

  • package 语句必须是文件中的第一个非注释、非空白行。
  • 包名通常使用 全小写字母
  • 使用公司反向域名作为前缀是常见的命名规范(例如 com.example),以避免与其他开发者的包发生冲突。

🧭 使用其他包中的类

如果你想在另一个包中使用上面定义的 Circle 类,有三种方式可以做到:

✅ 方法一:使用完全限定名

java 复制代码
com.example.shapes.Circle c = new com.example.shapes.Circle(5.0);

这种方式清晰明了,不需要额外的导入语句。但写起来比较啰嗦,不推荐在大量使用时采用。


✅ 方法二:导入指定类

java 复制代码
import com.example.shapes.Circle;

public class App {
    public static void main(String[] args) {
        Circle c = new Circle(5.0);
    }
}

这是最常见的使用方式,推荐在你只需要使用某几个类时使用。


✅ 方法三:导入整个包

java 复制代码
import com.example.shapes.*;

public class App {
    public static void main(String[] args) {
        Circle c = new Circle(5.0);
        // 还可以使用该包中其他类型,如 Square、Rectangle(如果有)
    }
}

使用 * 表示导入该包中所有的类(不包括子包)。适合你频繁使用某个包中多个类的情况,但过度使用可能会增加类名冲突的风险。


📁 包结构与文件路径

Java 包名与文件系统路径是一一对应的,例如:

java 复制代码
com/example/shapes/Circle.java

编译后生成的 .class 文件也会被放在相应目录中:

java 复制代码
com/example/shapes/Circle.class

🧠 也就是说,包名决定了类文件的存储路径,这也是 Java 项目组织代码文件的基础。


📦 设置 CLASSPATH(类路径)

如果你将类文件保存在项目以外的路径,JVMJava 编译器可能找不到这些类。此时你就需要设置 CLASSPATH 环境变量。

比如:

java 复制代码
export CLASSPATH=.:/path/to/my/classes

含义:

  • . 表示当前目录
  • /path/to/my/classes 表示你自己的类文件存放路径

💡现代 Java 项目通常使用 构建工具 (如 MavenGradle),它们会自动处理 classpath 的配置,无需手动设置。


✅ 小结

操作 说明 示例
创建包 使用 package 语句 package com.example.tools;
使用类(完全限定名) 不需要 import,但繁琐 new com.example.shapes.Circle()
使用类( import单个类) 简洁明了 import com.example.shapes.Circle;
使用类( import整个包) 导入多个类方便 import com.example.shapes.*;
包路径对应 包名与文件路径一一对应 com/example/shapes/Circle.java
设置类路径 用于指定 class 文件查找路径 CLASSPATH=.:/your/classes/dir
相关推荐
烂蜻蜓6 分钟前
Flask入门教程(十二):表单处理——从基础到Flask-WTF完整实践
后端·python·flask
jay神22 分钟前
【计算机毕业设计】基于Flask+Vue的电影数据可视化与智能推荐系统
前端·vue.js·python·信息可视化·flask·毕业设计·课程设计
FreeTinker6 小时前
HTML本地存储技术解析:localStorage与sessionStorage的原理、差异与应用场景
前端·html
qq_452396236 小时前
第十二篇:《全链路监控与可观测性:前端错误追踪与性能分析》
前端
2601_962055977 小时前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
wangruofeng7 小时前
Phosphor Icons 官网源码拆解:URL 即存储、水波动画与 7362 Star 图标库的架构实践
前端·架构·github
BigTopOne8 小时前
WebRTC Native / Android 开发学习资源整理
前端
Lost of 程序猿8 小时前
ASP.NET Core API 幂等性设计深度实战:从一次重复申领事故说起
后端·asp.net
excel9 小时前
nuxt 3 升级 nuxt 4 报错之 hasInjectionContext
前端
何以解忧,唯有..9 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain