【Java】:封装和包

目录

1.封装的概念

2.访问限定符号

3.封装扩展之包

3.1包的概念

3.2导入包中的类

3.3自定义包

3.4常见的包


1.封装的概念

面向对象程序三大特性:封装、继承、多态。何为封装?简单来说就是套壳屏蔽细节

比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入、显示器、USB插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的确是CPU、显卡、内存等一些硬件原件。

对于计算机使用者而言,不关心内部核心部件,比如主板上线路是如何布局的,CPU内部是如何设计的等,用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此计算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可。

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

2.访问限定符号

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

比如:

  • public:可以理解为一个人的外貌特征,谁都可以看到。
  • default:对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了。
  • private:只有自己知道,其他人都不知道。

【说明】:

  • protected主要是用在继承中,继承部分后续文章介绍。
  • default权限指:什么都不写时的默认权限。
  • 访问权限除了可以限定类中成员的可见性,也可以控制类的可见性。
public class Computer {
    private String cpu;  //CPU  只能在当前的Computer类中使用
    private String memory; //内存  只能在当前的Computer类中使用
    public String screen; //屏幕
    String brand; //品牌  默认权限-->default属性

    public Computer(String cpu, String memory, String screen, String brand) {
        this.cpu = cpu;
        this.memory = memory;
        this.screen = screen;
        this.brand = brand;
    }

    public void Boot(){
        System.out.println("开机~~~");
    }

    public void PowerOff(){
        System.out.println("关机~~~");
    }

    public void SurfInternet(){
        System.out.println("上网~~~");
    }
}
public class TestComputer {
    public static void main(String[] args) {
        Computer p = new Computer("M3","32G","13*14","APPLE");
        System.out.println(p.brand);  //default属性:只能被本包中类访问
        System.out.println(p.screen); //public属性:可以被任何其他类访问
        /*System.out.println(p.memory);  //private属性:只能在Computer类中访问,不能被其他类访问*/
    }
}

若想跨类对private的属性进行访问,则需要在private属性所在类里创建一个被public修饰的setMerory和getMerory的方法,进而在别的类中通过调用此方法达到访问private属性的目的。

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

一般情况下,建议:

  • 成员变量定义为:private。
  • 成员变量方法定义为:public。

但这只是建议,不唯一,具体如何使用需根据实际情况判断。

3.封装扩展之包

3.1包的概念

在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起为一组,称为软件包。有点类似于目录。

比如:味为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件下,也可以对某个文件夹下的音乐进行更详细的分类。

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

3.2导入包中的类

Java中已经提供了很多现成的类供我们使用,例如Date类:可以使用 java.util.Date 导入 java.util 这个包中的 Date

public class Test {
    public static void main(String[] args) {
        java.util.Date date = new java.util.Date();
        //得到一个毫秒级的时间戳
        System.out.println(date.getTime());
    }
}

但是这种写法比较麻烦,可以使用 import语句 导入包。

import java.util.Date;
public class Test {
    public static void main(String[] args) {
        Date date = new Date();
        //得到一个毫秒级的时间戳
        System.out.println(date.getTime());
    }
}

如果需要使用 java.util 中的其他类,可以使用 import.java.util.* 。(代表导入了util这个文件底下的所有类,需要用谁就会自动导入谁)

import java.util.*;
public class Test {
    public static void main(String[] args) {
        Date date = new Date();
        //得到一个毫秒级的时间戳
        System.out.println(date.getTime());
    }
}

更建议显示的指定要导入的类名,否则还是很容易出现冲突情况。

3.3自定义包

基本规则:

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

3.4常见的包

java.lang:系统常用基础类(String、Object),此包从JDK1.1自动导入。

java.lang.reflect:java反射编程包。

java.net:进行网络编程开发包。

java.sql:进行数据库开发的支持包。

java.util:是java提供的工具程序包。(集合类等)非常重要

java.io:I/O编程开发包。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

elementui的table根据是否符合需求合并列

<el-table :data"tableData" border style"width: 100%;" :span-method"objectSpanMethodAuto"><!-- 空状态 --><template slot"empty"><div><img src"/assets/images/noData.png" /></di…

【AcWing】蓝桥杯集训每日一题Day7|贡献法|4261.孤独的照片(C++)

4261.孤独的照片 AcWing 4261. 孤独的照片&#xff08;每日一题&#xff09; - AcWing难度&#xff1a;简单时/空限制&#xff1a;1s / 64MB总通过数&#xff1a;9889总尝试数&#xff1a;26088来源&#xff1a;USACO 2021 December Contest Bronze算法标签贡献法乘法原理 题目…

强烈推荐!13K star,一款Python开源自动化抢票神器!

马上就春节了&#xff0c;你抢到回家的票了吗&#xff1f; 别急&#xff0c;今天给大家推荐一款开源、功能强大且实用的12306抢票工具&#xff01; 1、介绍 该项目名为py12306&#xff0c;由 GitHub 用户 pjialin 创建和维护&#xff0c;用Python语言开发。 项目目前在GitHu…

【idea快捷键】idea开发java过程中常用的快捷键

含义win快捷键mac快捷键复制当前行或选定的代码块Ctrl DCommand D通过类名快速查找类Ctrl NCommand N通过文件名快速查找文件Ctrl Shift NCommand Shift N通过符号名称快速查找符号&#xff08;类、方法等&#xff09;Ctrl Alt Shift NCommand Shift O跳转到声明C…

精准定制:利用本地词库优化Jieba分词,提升景区评论数据LDA建模效果

引言&#xff1a; 在进行景区评论数据的LDA建模时&#xff0c;精确的分词是至关重要的。然而&#xff0c;通用的分词工具在处理特定领域的文本时可能表现不佳。针对这一挑战&#xff0c;本文探讨了如何利用本地词库&#xff0c;特别是搜狗词库中关于旅游领域的专业词汇&#x…

virtualbox 设置虚拟机 centos 网络

在VirtualBox中为运行CentOS系统的虚拟机配置网络连接&#xff0c;您通常可以选择以下几种网络模式之一&#xff0c;以满足不同的网络需求&#xff1a; NAT (Network Address Translation): 功能&#xff1a;允许虚拟机通过宿主机的网络连接访问互联网&#xff0c;同时也可以从…

【vue】一个小bug和key的引入

点击master Vue!删除后该list后输入框中的Jerry消失了 原因&#xff1a;vue当你更改元素时会在真实的dom中渲染并更新list。这两个goal是两个dom元素,触发点击事件后,vue并不会删除第一个dom元素,而是把第二个dom元素的动态内容({{ goal }} - {{ index }})复制到第一个dom元素…

Python基础:标准库 -- math (数学函数)

1. 官方文档 math --- 数学函数 — Python 3.12.2 文档 cmath --- 关于复数的数学函数 — Python 3.12.2 文档 Python 中&#xff0c;可以使用内置的数学运算符&#xff0c;例如加法 ()、减法 (-)、除法 (/) 和乘法 (*) 进行简单的数学运算。不过&#xff0c;更高级的运算&a…

SpringCloud下的微服务应用技术(结尾篇)

六. Feign远程调用 6.1 替代RestTemplate RestTemplate调用问题&#xff1a;代码可读性差&#xff0c;参数复杂且URL难维护。 Feign是一个声明式的HTTP客户端&#xff0c;官方地址&#xff1a;GitHub - OpenFeign/feign: Feign makes writing java http clients easier 它可…

力扣热门算法题 128. 最长连续序列,134. 加油站,143. 重排链表

128. 最长连续序列&#xff0c;134. 加油站&#xff0c;143. 重排链表&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.26 可通过leetcode所有测试用例。 目录 128. 最长连续序列 解题思路 完整代码 Python Java 134. 加油…

Docker 部署 FRP 内网穿透 实现端口映射

Frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 官网地址&#xff1a;https://github.com/fatedier/frp 准备工作…

VS2019连接MySQL

VS2019连接MySQL 下载MySQL Connector/C配置头文件&#xff0c;库文件路径配置头文件路径配置库的路径复制dll文件 MySQL的用户设置将权限赋值给新用户 编写代码往数据库写入 老师布置的作业让我们用VS2019连接MySQL实现一个小型的日志系统&#xff0c;中间踩了很多的坑&#x…

【3】3道链表力扣题:删除链表中的节点、反转链表、判断一个链表是否有环

3道链表力扣题 一、删除链表中的节点&#x1f30f; 题目链接&#x1f4d5; 示例&#x1f340; 分析&#x1f4bb; 代码 二、反转链表&#x1f30f; 题目链接&#x1f4d5; 示例&#x1f340; 分析① 递归② 迭代 三、判断一个链表是否有环&#x1f30f; 题目链接&#x1f4d5; …

文件操作(顺序读写篇)

1. 顺序读写函数一览 函数名功能适用于fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets文本行输入函数所有输入流fputs文本行输出函数所有输出流fscanf格式化输入函数所有输入流fprintf格式化输出函数所有输出流fread二进制输入文件fwrite二进制输出文件 上面说…

FPGA----ZCU106的petalinux 2019.1使用USB传输数据

1、实际项目中需要用到开发板的串口进行数据交互&#xff0c;之前讲的几节只是启动了网口&#xff08;如下链接&#xff09;。因此&#xff0c;本次给大家带来的官方自带串口例程的使用方法&#xff0c;本文的vivado工程和下述连接一样&#xff0c;PL端什么配置都没有。 FPGA-…

A Simple Problem with Integers(线段树)

目录 描述 输入 输出 样例输入 样例输出 思路 建树 第一次错误解法&#xff08;正确解法在下面&#xff0c;可跳过这一步&#xff09; 正确解法 code 描述 You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of …

云架构(二) 大使模式

Ambassador pattern &#xff08;https://learn.microsoft.com/en-us/azure/architecture/patterns/ambassador&#xff09; 简单描述 创建一个助手服务&#xff0c;这个服务代表消费服务或者应用程序发送网络请求。大使服务可以看做是与客户机同一个位置的进程外代理。 这种…

如何快速掌握数字化运维方法,构建数字化运维体系?

⛳️ 写在前面参与规则&#xff01;&#xff01;&#xff01; ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论三次&#xff09; ⛳️本次送书1~4本【取决于阅读量&#xff0c;阅读量越多&#xff0c;送的越多】 主要内容读者…

简单实现企业微信远程打卡教程(永不迟到)

最近玩手游时刚好用到了手机模拟器&#xff0c;就是在电脑上安装一个手机模拟器&#xff0c;然后用电脑来挂机手机游戏 今天我突然有了一个想法&#xff0c;既然这个模拟器就是相当于一个虚拟的手机&#xff0c;那么是不是可以给它装上企业微信&#xff0c;然后让它帮我远程打卡…

vs_BuildTools.exe

Microsoft C Build Tools - Visual Studio vs_BuildTools.exe 安装无反应 无法进入安装界面。 转了一大圈&#xff1a; 最后决定更新系统&#xff0c;解决。 参考链接&#xff1a;执行了最后一步&#xff0c;更新系统&#xff1a; Fix: Faulting Application Path Error o…