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

news2025/5/10 7:56:23

🤟致敬读者

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

📘博主相关

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

文章目录

    • 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;  // 导入 ArrayList
    
    public 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.Date

public class ConflictExample {
    public static void main(String[] args) {
        Date utilDate = new Date();  // java.util.Date
        java.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),必须用全限定名区分。

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


📜文末寄语

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2372137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为昇腾910B通过vllm部署InternVL3-8B教程

前言 本文主要借鉴&#xff1a;VLLM部署deepseek&#xff0c;结合自身进行整理 下载模型 from modelscope import snapshot_download model_dir snapshot_download(OpenGVLab/InternVL3-8B, local_dir"xxx/OpenGVLab/InternVL2_5-1B")环境配置 auto-dl上选择单卡…

upload-labs靶场通关详解:第三关

一、分析源代码 代码注释如下&#xff1a; <?php // 初始化上传状态和消息变量 $is_upload false; $msg null;// 检查是否通过POST方式提交了表单 if (isset($_POST[submit])) {// 检查上传目录是否存在if (file_exists(UPLOAD_PATH)) {// 定义禁止上传的文件扩展名列表…

星光云720全景VR系统升级版,720全景,360全景,vr全景,720vr全景

星光云720全景VR系统升级版&#xff0c;720全景&#xff0c;360全景&#xff0c;vr全景&#xff0c;720vr全景 星光云全景系统 系统体验地址 https://720.ailemon.cc 星光云全景新版体验地址 全景系统功能简介 基础设置&#xff1a;作品信息&#xff0c;加载样式&#xff…

第十六节:图像形态学操作-顶帽与黑帽变换

一、引言&#xff1a;形态学操作的视觉魔法 在数字图像处理领域&#xff0c;形态学操作犹如一柄精巧的解剖刀&#xff0c;能够精准地提取图像特征、消除噪声干扰&#xff0c;并增强关键细节。OpenCV作为计算机视觉的瑞士军刀&#xff0c;提供了一套完整的形态学处理工具。在掌…

将 iconfont 图标转换成element-plus也能使用的图标组件

在做项目时发现&#xff0c;element-plus的图标组件&#xff0c;不能像文档示例中那样使用 iconfont 的图标。经过研究发现&#xff0c;element-plus的图标封装成了vue组件&#xff0c;组件内容是一个svg&#xff0c;然后以组件的方式引入和调用图标。根据这个思路&#xff0c;…

大模型系列(四)--- GPT2: Language Models are Unsupervised Multitask Learners​

论文链接&#xff1a; Language Models are Unsupervised Multitask Learners 点评&#xff1a; GPT-2采用了与GPT-1类似的架构&#xff0c;将参数规模增加到了15亿&#xff0c;并使用大规模的网页数据集WebText 进行训练。正如GPT-2 的论文所述&#xff0c;它旨在通过无监督语…

ABP vNext + EF Core 实战性能调优指南

ABP vNext EF Core 实战性能调优指南 &#x1f680; 目标 本文面向中大型 ABP vNext 项目&#xff0c;围绕查询性能、事务隔离、批量操作、缓存与诊断&#xff0c;系统性地给出优化策略和最佳实践&#xff0c;帮助读者快速定位性能瓶颈并落地改进。 &#x1f4d1; 目录 ABP vN…

高品质办公楼成都国际数字影像产业园核心业务​

成都国际数字影像产业园的核心业务&#xff0c;围绕构建专业化的数字影像文创产业生态系统展开&#xff0c;旨在打造高品质、高效率的产业发展平台。 产业集群构建与生态运营 园区核心业务聚焦于吸引和培育数字影像及相关文创领域的企业&#xff0c;形成产业集聚效应。具体包…

MindSpore框架学习项目-ResNet药物分类-构建模型

目录 2.构建模型 2.1定义模型类 2.1.1 基础块ResidualBlockBase ResidualBlockBase代码解析 2.1.2 瓶颈块ResidualBlock ResidualBlock代码解释 2.1.3 构建层 构建层代码说明 2.1.4 定义不同组合(block&#xff0c;layer_nums)的ResNet网络实现 ResNet组建类代码解析…

【Spring Boot】Spring Boot + Thymeleaf搭建mvc项目

Spring Boot Thymeleaf搭建mvc项目 1. 创建Spring Boot项目2. 配置pom.xml3. 配置Thymeleaf4. 创建Controller5. 创建Thymeleaf页面6. 创建Main启动类7. 运行项目8. 测试结果扩展&#xff1a;添加静态资源 1. 创建Spring Boot项目 打开IntelliJ IDEA → New Project → 选择M…

学习spring boot-拦截器Interceptor,过滤器Filter

目录 拦截器Interceptor 过滤器Filter 关于过滤器的前置知识可以参考&#xff1a; 过滤器在springboot项目的应用 一&#xff0c;使用WebfilterServletComponentScan 注解 1 创建过滤器类实现Filter接口 2 在启动类中添加 ServletComponentScan 注解 二&#xff0c;创建…

雷赛伺服L7-EC

1电子齿轮比&#xff1a; 电机圈脉冲1万 &#xff08;pa11的值 x 4倍频&#xff09; 2电机刚性&#xff1a; pa003 或者 0x2003 // 立即生效的 3LED显示&#xff1a; PA5.28 1 电机速度 4精度&#xff1a; PA14 //默认30&#xff0c;超过3圈er18…

阅文集团C++面试题及参考答案

能否不使用锁保证多线程安全&#xff1f; 在多线程编程中&#xff0c;锁&#xff08;如互斥锁、信号量&#xff09;是实现线程同步的传统方式&#xff0c;但并非唯一方式。不使用锁保证多线程安全的核心思路是避免共享状态、使用原子操作或采用线程本地存储。以下从几个方面详…

AVL树:保持平衡的高效二叉搜索树

目录 一、AVL树的概念 1. 二叉搜索树的局限性 2. AVL树的定义 二、AVL树节点结构 三、AVL树的插入操作 1. 插入流程 2. 代码实现片段 四、AVL树的旋转调整 1. 左单旋&#xff08;RR型&#xff09; 2. 右单旋&#xff08;LL型&#xff09; 3. 左右双旋&#xff08;LR型…

Webpack基本用法学习总结

Webpack 基本使用核心概念处理样式资源步骤&#xff1a; 处理图片资源修改图片输出文件目录 自动清空上次打包的内容EslintBabel处理HTML资源搭建开发服务器生产模式提取css文件为单独文件问题&#xff1a; Css压缩HTML压缩 小结1高级SourceMap开发模式生产模式 HMROneOfInclud…

阿里云服务器数据库故障排查指南?

阿里云服务器数据库故障排查指南? 以下是针对阿里云服务器&#xff08;如ECS自建数据库或阿里云RDS等托管数据库&#xff09;的故障排查指南&#xff0c;涵盖常见问题的定位与解决方案&#xff1a; 一、数据库连接失败 检查网络连通性 ECS自建数据库 确认安全组规则放行数据库…

数图闪耀2025深圳CCFA中国零售博览会:AI+零售数字化解决方案引发现场热潮

展会时间&#xff1a;2025年5月8日—10日 地点&#xff1a;深圳国际会展中心&#xff08;宝安新馆&#xff09; 【深圳讯】5月8日&#xff0c;亚洲规模最大的零售行业盛会——2025 CCFA中国零售博览会在深圳盛大开幕。本届展会汇聚全球25个国家和地区的900余家参展商&#xff…

LeetCode 1722. 执行交换操作后的最小汉明距离 题解

示例&#xff1a; 输入&#xff1a;source [1,2,3,4], target [2,1,4,5], allowedSwaps [[0,1],[2,3]] 输出&#xff1a;1 解释&#xff1a;source 可以按下述方式转换&#xff1a; - 交换下标 0 和 1 指向的元素&#xff1a;source [2,1,3,4] - 交换下标 2 和 3 指向的元…

linux ptrace 图文详解(八) gdb跟踪被调试程序的子线程、子进程

目录 一、gdb跟踪被调试程序的fork、pthread_create操作 二、实现原理 三、代码实现 四、总结 &#xff08;代码&#xff1a;linux 6.3.1&#xff0c;架构&#xff1a;arm64&#xff09; One look is worth a thousand words. —— Tess Flanders 相关链接&#xff1a; …

游戏:用python写梦幻西游脚本(谢苏)

《梦幻西游》是一款受欢迎的网络游戏&#xff0c;许多玩家希望通过脚本来增强游戏体验&#xff0c;比如自动打怪、自动治疗等。本文将为您展示一个用Python编写简单《梦幻西游》自动打怪脚本的方案。 需求分析 1.1 具体问题 在《梦幻西游》中&#xff0c;玩家需要频繁与怪物进行…