【Java探索之旅】包管理精粹 Java中包的概念与实践

文章目录

  • 📑前言
  • 一、封装
    • 1.1 封装的概念
    • 1.2 访问限定修饰符
  • 二、封装扩展(包)
    • 2.1 包的概念
    • 2.2 带入包中的类
    • 2.3 自定义包
    • 2.4 常见的包
  • 🌤️全篇总结

📑前言

在Java编程中,封装是面向对象编程的核心概念之一,通过封装可以将对象的数据和行为组合在一起,并隐藏对象的内部实现细节,提供简洁的接口供外部使用。本文将深入探讨封装的概念及其在Java中的实现方式,以及包的概念和作用。我们将探讨访问权限修饰符、包的使用方法以及常见的Java包,帮助您更好地理解和应用Java中的封装和包管理机制。

一、封装

1.1 封装的概念

面向对象程序三大特性:封装、继承、多态

而类和对象阶段,主要研究的就是封装特性。什么是封装呢?通俗易懂来说就是套壳屏蔽细节。

​ 你可以看看你的电脑,它是一个极其复杂的机器,内部有主板、CPU、显卡、内存条、硬盘……,但是你作为电脑的使用者,你会去在意电脑内部的内部布局,主板是如何设计的,内存条的卡槽位置这些东西吗?显然是不会的吧,可以说是没必要,你只需要掌握如何使用电脑就可以了。你外接键盘、鼠标,使用,你不需要去了解计算机的内部是如何做的,能够让你即插即用,你需要插上然后使用就可以了。

​ 计算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可。

因此封装你可以理解为:

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互

1.2 访问限定修饰符

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。

Java中提供了四种访问限定符:

在这里插入图片描述

  • public:可以理解为一个人的外貌特征,谁都可以看得到
  • default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了
  • private:只有自己知道,其他人都不知道
  • protected:主要是用在继承中
  • default权限指:什么都不写时的默认权限
  • 访问权限除了可以限定类中成员的可见性,也可以控制类的可见性
  • 一般情况下成员变量设置为private,成员方法设置为public(根据实际情况而定)

二、封装扩展(包)

2.1 包的概念

在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包。有点类似于目录。为了更好的管理电脑中的不同数据,将其放在不同的包(文件夹)中。

在这里插入图片描述

在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。

2.2 带入包中的类

Java 中已经提供了很多现成的类供我们使用

例如Date类:

可以使用 java.util.Date 导入 java.util 这个包中的 Date类。还可以使用 import语句导入包。如果需要使用 java.util 中的其他类, 可以使用 import java.util *,这个*号是通配符,当使用包中某个类的时候,这类就会被加载。

class Test {public static void main(String[] args) {java.util.Date date = new java.util.Date();System.out.println(date.getTime());}
}
import java.util.Date;
class Test {public static void main(String[] args) {Date date = new Date();System.out.println(date.getTime());}
}
import java.util.*;
class Test {public static void main(String[] args) {Date date = new Date();System.out.println(date.getTime());}
}

一般来说更建议显式的指定要导入的类名. 否则还是容易出现冲突的情况.

import java.util.*;
import java.sql.*;
public class Test {public static void main(String[] args) {// util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错Date date = new Date();System.out.println(date.getTime());}
}//在这种情况下需要使用完整的类名
import java.util.*;
import java.sql.*;
public class Test {public static void main(String[] args) {java.util.Date date = new java.util.Date();System.out.println(date.getTime());}
}

还可以使用import static导入包中静态的方法和字段

import static java.lang.Math.*;
public class Test {public static void main(String[] args) {double x = 30;double y = 40;// 静态导入的方式写起来更方便一些.// double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));(更建议这样写,不要嫌麻烦)double result = sqrt(pow(x, 2) + pow(y, 2));System.out.println(result);}
}

这里的导包和c++中的区别还是很大的:

  • import 和 C++ 的 #include,C++ 必须 #include 来引入其他文件内容
  • Java 不需要,import 只是为了写代码的时候更方便
  • import 更类似于 C++ 的 namespace 和 using

2.3 自定义包

基本规则

  1. 在文件的最上方加上一个 package 语句指定该代码在哪个包中.
  2. 包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.bit.demo1 ).
  3. 包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/baidu/www 来存储代码.
  4. 如果一个类没有 package 语句, 则该类被放到一个默认包中

操作步骤

  1. 在 IDEA 中先新建一个包: 右键 src -> 新建 -> 包

  2. 在弹出的对话框中输入包名, 例如 com.bite.www

  3. 在包中创建类, 右键包名 -> 新建 -> 类, 然后输入类名即可

  4. 此时可以看到我们的磁盘上的目录结构已经被 IDEA 自动创建出来了

  5. 同时我们也看到了, 在新创建的 Test.java 文件的最上方, 就出现了一个 package 语句,这是说明它的位置在哪个包下

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.4 常见的包

  1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
  2. java.lang.reflect:java 反射编程包;
  3. java.net:进行网络编程开发包。
  4. java.sql:进行数据库开发的支持包。
  5. java.util:是java提供的工具程序包。(集合类等) 非常重要
  6. java.io:I/O编程开发包。

🌤️全篇总结

恭喜你已经了解了封装在Java中的重要性以及访问权限修饰符的作用。封装能够帮助我们隐藏对象的内部实现细节,提供简洁的接口供外部使用,从而提高代码的安全性和可维护性。同时,包的概念和使用方法也为我们提供了更好的代码组织和管理方式。深入学习和理解封装和包管理机制,将有助于您编写更加高效、健壮的Java程序,并更好地应用于实际项目开发中。

在这里插入图片描述

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

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

相关文章

知识产权 | 守护科技创新之光,共筑知识产权长城

2024年4月26日,迎来了一年一度的世界知识产权日,今年的主题是:“立足创新创造,构建共同未来。” 易我科技是一家专注于数据安全产品研发、生产、销售、服务一体化的高新技术软件企业。易我科技自成立以来,始终秉持尊重…

树莓派4B安装安卓系统LineageOS 21(Android14)

1:系统下载 2:下载好镜像后,准备写入SD卡,我这边使用的是 balenaetcher 3:插入树莓派,按照指示一步一步进行配置,可以配置时区,语言。 注意点 1》:想返回的时候按F2 2》:进入系统…

Redisson分布式锁,重试锁和锁续命的原理

RedissonLock 锁重试原理 tryLock有三个三个参数,第一个是等待时间,第二个是锁失效后自动释放的时间,不填默认为-1,第三个是时间单位; 当设置了第一个参数,那这个锁就成了可重试锁;获取锁失败后&#xff0c…

C++的演变与未来:编程艺术的持续进化

在计算机编程的演变历程中,C以其独特的魅力和强大的功能,一直占据着不可或缺的地位。从最初的面向对象编程,到如今的跨平台、高性能应用,C在不断地适应和推动着计算机技术的发展。本文将深入剖析C的演变过程,展望其未来…

C++ 优先级队列priority_queue

1、常用接口 底层使用的是堆实现,默认为大堆 2、理解: 优先级队列就是即使插入的是一个乱序的,但是依旧会按照有序的顺序出队列 优先级队列就是会根据大小来出队列,而不是谁在队头就出谁。 优先级队列底层是使用堆实现&#x…

Java项目:基于SSM框架实现的实践项目管理系统(ssm+B/S架构+源码+数据库+毕业论文+开题报告)

一、项目简介 本项目是一套基于SSM框架实现的实践项目管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff…

【前端】-【防止接口重复请求】

文章目录 需求实现方案方案一方案二方案三 需求 对整个的项目都做一下接口防止重复请求的处理 实现方案 方案一 思路:通过使用axios拦截器,在请求拦截器中开启全屏Loading,然后在响应拦截器中将Loading关闭。 代码: 问题&…

Coursera: An Introduction to American Law 学习笔记 Week 04: Constitutional Law

An Introduction to American Law 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors Week 04: Constitutional LawKey Constitutional Law TermsSup…

黑马 - websocket搭建在线聊天室

这里写自定义目录标题 一、消息推送常见方式二、websocket 是什么?三、websocket api的介绍1、客户端 (浏览器) 四、实现在线聊天室1、需求2、聊天室流程分析3、消息格式4、代码实现 一、消息推送常见方式 1、轮训方式 2、SSE(…

2024年第二十一届 五一杯 (A题)大学生数学建模挑战赛 | 多目标优化问题,深度学习分析 | 数学建模完整代码解析

DeepVisionary 每日深度学习前沿科技推送&顶会论文&数学建模与科技信息前沿资讯分享,与你一起了解前沿科技知识! 本次DeepVisionary带来的是五一杯的详细解读: 完整内容可以在文章末尾全文免费领取&阅读! 第一个问题…

【Linux】进程终止

思维导图 学习内容 进程终止是进程控制里面的一个重要的知识,通过这一篇博客,我们可以学习到进程终止的概念,进程终止的三种情况,进程终止的退出码和退出信号,最后在来学习进程是如何进行终止的。 学习目标 进程终止…

诺基亚贝尔探访上海斯歌,共探创新合作新机遇

近日,上海斯歌K2 BPM迎来重要客户考察交流活动。来自诺基亚贝尔的首席数字官刘少勇一行莅临了上海斯歌K2 BPM 的武汉研发中心,并对上海斯歌在BPM业务流程管理领域的研发成果及交付能力给予了高度肯定。 此次活动不仅加深了双方的战略合作,也为…

维修家政按摩到家上门小程序开源版开发

维修家政按摩到家上门小程序开源版开发 智能定位,精准计费——全新上门服务平台功能解析。 全新上门服务平台已经上线,它拥有一系列强大的功能,旨在为用户提供最便捷、最个性化的服务体验。 !](https://img-blog.csdnimg.cn/direct/86195e…

WCH RISC CH32V303RCT6 单片机的SDI Printf 虚拟串口功能 类似SEGGER RTT打印功能 简单分析

参考: 有关于 SDI printf 更多的信息和资料吗? 关于 CH32 系列 MCU SDI 虚拟串口功能的使用 【CH32X035 评估板测评】 教你使用 SDI 接口重定向 printf SDI (Serial Data Interface) 是沁恒微电子 RISC-V 内核的私有外设接口,CH32 RISC-V 系列目前提供了…

redis 高可用 Sentinel 详解

写在前面 redis 在我们日常的业务开发中是十分常见的,而redis的可用性就必须要有很高的要求,那么 redis集群的高可用由有一个或者多个 Sentinel(哨兵) 实例组成的 哨兵系统来保证的。 哨兵 由一个或者多个 Sentinel 实例组成的 Sentinel 系统可以监控任…

53.HarmonyOS鸿蒙系统 App(ArkTS) socket套接字连接失败无效参数--invalid argument

ark ts socket套接字连接失败无效参数--invalid argument 绑定本机真实连接的WIFI的IP,不要绑定127.0.0.1

VS code 同步odata服务

在做UI5得开发过程中,经常会出现odata需要更新 那么已经加载过得项目如何去跟新odata服务呢 可以通过如下步骤 1.右键打开应用信息 2.找到manage service models 3.点击编辑 4.选中 刷新并保存

《STM32 HAL库》中断相关函数详尽解析——NVIC

观前提醒:本文以外部中断点灯为例,分析了HAL库中中断服务相关函数的使用及相互关联、底层原理 一、实例实现 实例简介:主函数控制LED2进行闪烁,中断控制LED0开关 我们先使用CubeMX创建项目文件: 1、在System Core中配…

XY_RE复现(五)

一&#xff0c;给阿姨倒一杯卡布奇诺 是一道魔改TEA加密 给出了一些初始化&#xff0c;然后输入的flag拆分&#xff0c;两两一组&#xff0c;通过for循环放入encrypt加密函数 #include <stdio.h> #define uint32_t unsigned intvoid decrypt(uint32_t *v, uint32_t *ke…

【STM32F407+CUBEMX+FreeRTOS+lwIP netconn UDP TCP记录】

STM32F407CUBEMXFreeRTOSlwIP netconn UDP TCP记录 注意UDPUDP1UDP2 TCPTCP clientTCP server图片 注意 1、超时 #include “lwipopts.h” #define LWIP_SO_RCVTIMEO 12、先保证能ping通 3、关于工程创建可参考 【STM32F407CUBEMXFreeRTOSlwIP之UDP记录】 4、…