当前位置: 首页 > news >正文

JavaSE核心知识点02面向对象编程02-04(包和导入)

🤟致敬读者

  • 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉

📘博主相关

  • 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息

文章目录

    • JavaSE核心知识点02面向对象编程02-04(包和导入)
      • **一、包(Package)的作用**
      • **二、定义包**
      • **三、导入(Import)其他包的类**
      • **四、常见场景与注意事项**
        • **1. 同一包内的类无需导入**
        • **2. 不同包中的类必须导入**
        • **3. 处理同名类冲突**
      • **五、默认包(不推荐使用)**
      • **六、包与访问权限**
      • **七、实战练习**
      • **八、常见问题解答**


📃文章前言

  • 🔷文章均为学习工作中整理的笔记。
  • 🔶如有错误请指正,共同学习进步。

JavaSE核心知识点02面向对象编程02-04(包和导入)

包(Package)和导入(Import)是 Java 中组织和管理代码的核心机制,尤其适合项目规模较大时的代码维护。以下是专门整理的详细指南,从基础到实践,逐步掌握它们的使用方法。


一、包(Package)的作用

  1. 避免命名冲突
    不同包中可以有同名的类,例如:com.company1.utils.StringUtilcom.company2.utils.StringUtil
  2. 组织代码结构
    按功能或模块分类类文件,例如:com.example.dao(数据库操作)、com.example.model(数据模型)。
  3. 控制访问权限
    Java 的访问修饰符(如 protected、默认权限)与包密切相关。

二、定义包

  1. 语法
    在 Java 文件的第一行使用 package 声明包:

    package com.example.util;  // 定义当前类属于 com.example.util 包
    
  2. 包命名规范

    • 全部小写,使用公司域名的倒序(如 com.example)。
    • 多层包名用 . 分隔,对应文件系统的目录结构(如 com/example/util)。
  3. 示例

    • 文件路径:src/com/example/util/StringUtil.java
    • 类定义:
      package com.example.util;  // 必须与目录结构一致!public class StringUtil {public static String trim(String str) {return str.trim();}
      }
      

三、导入(Import)其他包的类

  1. 为什么需要导入
    使用其他包中的类时,需要通过 import 引入,否则需写类的全限定名(Fully Qualified Name)。

  2. 导入单个类

    import java.util.ArrayList;  // 导入 ArrayListpublic class Main {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();}
    }
    
  3. 导入整个包
    使用通配符 * 导入包下所有类(不推荐,可能引发命名冲突):

    import java.util.*;  // 导入 java.util 包下的所有类
    
  4. 静态导入(Static Import)
    导入类的静态成员(方法或变量),可直接使用:

    import static java.lang.Math.PI;  // 导入 Math 类的 PI 常量public class Circle {double area(double radius) {return PI * radius * radius;  // 直接使用 PI,无需写 Math.PI}
    }
    

四、常见场景与注意事项

1. 同一包内的类无需导入
// 文件:com/example/Main.java
package com.example;public class Main {public static void main(String[] args) {User user = new User();  // User 类在同一个包 com.example 中,无需导入}
}// 文件:com/example/User.java
package com.example;public class User {// 类定义
}
2. 不同包中的类必须导入
// 文件:com/test/App.java
package com.test;import com.example.User;  // 导入其他包的类public class App {public static void main(String[] args) {User user = new User();}
}
3. 处理同名类冲突

如果两个包中有同名类,需用全限定名或只导入其中一个:

import java.util.Date;  // 导入 java.util.Datepublic class ConflictExample {public static void main(String[] args) {Date utilDate = new Date();  // java.util.Datejava.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());  // 全限定名}
}

五、默认包(不推荐使用)

  • 如果不写 package 语句,类会放在默认包(无名包)。
  • 问题:默认包的类无法被其他包的类导入,且容易引发命名冲突。
  • 建议:始终为类指定明确的包名!

六、包与访问权限

  • public:所有包可见。
  • protected:同包或子类可见。
  • 默认(无修饰符):同包可见。
  • private:仅本类可见。
package com.example;public class Demo {public void publicMethod() {}     // 所有包可见protected void protectedMethod() {}  // 同包或子类可见void defaultMethod() {}           // 同包可见private void privateMethod() {}   // 仅本类可见
}

七、实战练习

  1. 创建包和类

    • 创建包 com.example.utils,在其中定义工具类 MathUtils
    • 在另一个包 com.example.app 中创建 Main 类,导入并使用 MathUtils
  2. 代码示例

    // 文件:com/example/utils/MathUtils.java
    package com.example.utils;public class MathUtils {public static int add(int a, int b) {return a + b;}
    }// 文件:com/example/app/Main.java
    package com.example.app;import com.example.utils.MathUtils;  // 导入工具类public class Main {public static void main(String[] args) {int sum = MathUtils.add(3, 5);System.out.println("Sum: " + sum);  // 输出 Sum: 8}
    }
    

八、常见问题解答

  1. IDE(如 IntelliJ IDEA)如何帮助管理包?

    • 自动生成包目录结构。
    • 自动提示导入缺失的类。
    • 优化导入(删除未使用的导入)。
  2. 导入会影响性能吗?

    • 不会!import 仅是编译时声明,不影响运行时性能。
  3. 为什么有时需要写全限定名?

    • 当两个导入的类同名时(如 java.util.Datejava.sql.Date),必须用全限定名区分。

掌握包和导入后,你的代码将更加结构化,团队协作和大型项目管理也会更轻松!遇到问题时,多动手写代码实践,理解会更深刻。


📜文末寄语

  • 🟠关注我,获取更多内容。
  • 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
  • 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
  • 🔵​加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
  • 🟣点击下方名片获取更多内容🍭🍭🍭👇

相关文章:

  • 【NCCL】DBT算法(double binary tree,双二叉树)
  • 工业设计破局密码:3D 可视化技术点燃产业升级引擎
  • 13.原生测试框架Unittest解决用例组织问题 与测试套件的使用
  • 多视图密集对应学习:细粒度3D分割的自监督革命
  • 【Axios】解决Axios下载二进制文件返回空对象的问题
  • MapReduce报错 HADOOP_HOME and hadoop.home.dir are unset.
  • 课程审核流程揭秘:确保内容合规与用户体验
  • 高频算法面试题总结
  • 【25软考网工】第六章 网络安全(1)网络安全基础
  • 【MYSQL错误连接太多】
  • 如何构建容器镜像并将其推送到极狐GitLab容器镜像库?
  • 自定义prometheus exporter实现监控阿里云RDS
  • 5月9号.
  • 数据分析怎么做?高效的数据分析方法有哪些?
  • 多容器运行
  • Python训练营打卡DAY20
  • Android应用隐私合规:解决极光推送SDK提前收集WiFi信息问题
  • 三维底座+智能应用,重构城市治理未来
  • 【计算机视觉】OpenCV项目实战:get_inverse_perspective:基于OpenCV的透视图转化为不同平面
  • Uniapp编写微信小程序,使用canvas进行绘图
  • 中方就乌克兰危机提出新倡议?外交部:中方立场没有变化
  • 海关总署统计分析司司长:4月进出口增速较一季度加快4.3个百分点
  • 叙利亚政权领导人首访西方国家,与法国总统讨论叙局势
  • 多地跟进官宣下调公积金贷款利率,最低降至2.1%
  • 观察|印巴交火开始升级,是否会演变为第四次印巴战争?
  • 公积金利率降至历史低位,百万房贷30年省5万