七千字带你了解封装等机制上

简介: 七千字带你了解封装等机制上

一、封装

面向对象程序三大特性:封装、继承、多态。封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。将自身的对象属性隐藏起来,对外只通过接口和对象进行访问.

1.1如何封装?

封装是将对象的属性进行访问权限的控制,使不能进行直接访问.

class Person {
    private String name;
    private int age;
}

在这里插入图片描述
我们可以发现进行封装之后,我们不能轻易的去赋值。这样还有一个好处是我们不用去管属性名是否改变,而且通过一定的方法去赋值即访问。

对属性的访问权限设置为private,这样Person的属性只能在本类访问,信息的安全就有所保障了.
在这里插入图片描述

那如何访问这些封装的属性呢?

class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

代码如下(示例):

public static void main(String[] args) {
        Person person = new Person();
        person.setName("张三");
        person.setAge(18);
        System.out.println("name: "+person.getName()+" age: "+person.getAge());
    }

在这里插入图片描述

通常情况下,访问属性的这些方法被称为getter和setter方法。
因此,任何要访问类中私有成员变量的类都要通过这些getter和setter方法。

1.2封装的优点

==1. 良好的封装能够减少耦合。==
==2. 类内部的结构可以自由修改。==
==3. 可以对成员变量进行更精确的控制。==
==4. 隐藏信息,实现细节。==

二、包的使用

2.1包是什么?

包是对类、接口等的封装机制的体现,是一种对类和接口等的很好的组织方式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们发现包实际是我们盘符中的一个文件夹,每一个类是文件夹里的一个文件。
那一个包中允许出现相同名称的类吗?
在这里插入图片描述
我们可以发现电脑无法在一个文件夹里命名两个相同的文件,所以一个包里不允许出现相同名称的类.

2.2如何导入包中的类

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
      }

当我们想生成系统定义的对象或者访问方法时,因为系统限权的设置,我们直接访问就会出现下面的情况:
在这里插入图片描述
我们需要使用import语句引入包:

import java.util.Scanner;
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
      }

这样即可,如果需要使用包中许多的类可以直接使用import java.util.*;

import java.util.*;
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
      }

这样就可以使用所有这个包中的类了,但不会直接导入包中的所有的类,而是自己使用那个类时,系统自动加载那个类.
包中的类使用冲突:

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

在这里插入图片描述

因为sql和util中的类都有Date,系统不知道访问那个,就会发生上述错误.
代码如下(示例):
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
}

在这里插入图片描述
这种情况使用完整的类名.

2.3常用包介绍

  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编程开发包。

三、static的使用

3.1static修饰变量

static修饰的成员变量,称为静态成员变量,不属于具体的某个对象,而是所有对象共用一份.
class Student {
    private String name;
    public static String classHome = "001";
}
    public static void main(String[] args) {
        System.out.println(Student.classHome);
        Student student1 = new Student();
        System.out.println(student1.classHome);
        Student student2 = new Student();
        System.out.println(student2.classHome);
    }

在这里插入图片描述

我们可以通过以上对static变量的调用,可以发现以下几点:

  1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
  2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
  3. 类变量存储在方法区当中
  4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

3.2static修饰方法

一个类中的普通的成员属性使用private封装起来,实现public方法供外部调用。那private修饰的static的成员变量,外部如何访问呢?

class Student {
    private String name;
    private static String classHome = "001";
    public static String getClassHome() {
        return classHome;
    }
}
public static void main(String[] args) {
        System.out.println(Student.getClassHome());
    }

在这里插入图片描述

static修饰的成员方法,是类的方法,静态成员变量需要用静态方法来访问.

静态方法的特性:
1.不属于具体的对象,是类的方法.
2.可以使用对象调用,但不推荐.
3.不能在静态方法中访问非静态成员变量.
4.不能在静态方法调用非静态方法.

目录
相关文章
|
Java jenkins 持续交付
jenkins部署springboot项目(超详细讲解)
jenkins部署springboot项目(超详细讲解)
613 0
|
机器学习/深度学习 并行计算 PyTorch
如何搭建深度学习的多 GPU 服务器
如何搭建深度学习的多 GPU 服务器
如何搭建深度学习的多 GPU 服务器
|
编解码 算法 网络协议
流量控制--5.Classless Queuing Disciplines (qdiscs)
流量控制--5.Classless Queuing Disciplines (qdiscs)
305 4
|
11月前
|
数据采集 人工智能 算法
Seer:上海 AI Lab 与北大联合开源端到端操作模型,结合视觉预测与动作执行信息,使机器人任务提升成功率43%
Seer是由上海AI实验室与北大等机构联合推出的端到端操作模型,结合视觉预测与动作执行,显著提升机器人任务成功率。
469 20
Seer:上海 AI Lab 与北大联合开源端到端操作模型,结合视觉预测与动作执行信息,使机器人任务提升成功率43%
|
9月前
|
自然语言处理 DataWorks 数据挖掘
使用DataWorks Notebook实现智能图片标注,给你的图片加个“注释”
本文介绍如何使用DataWorks Notebook结合视觉识别模型RAM和自然语言处理模型BERT实现多模态图片标注,为智能内容生成和多模态数据分析的广泛应用提供支持。
|
网络协议 安全 测试技术
IPv6与IPv4有何不同
【10月更文挑战第24天】IPv6相比IPv4具有更大地址空间、更小路由表、增强组播支持、自动配置支持及更高安全性等优势。企业迁移至IPv6可确保未来兼容性、提高效率和安全性。IPv4与IPv6不直接兼容,但可通过双堆栈技术共存。中小企业应考虑迁移至IPv6以应对IPv4地址耗尽、提升网络性能和安全性。迁移过程中需培训IT人员、评估现有环境、建立测试环境、制定详细计划并分阶段实施。
1498 2
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
16035 115
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
2349 52
|
9月前
|
人工智能 自然语言处理 供应链
AI直播销售奇迹:00后DeepSeek的3.3亿真相探究
近日,“00后主播借DeepSeek技术直播卖出3.3亿”的新闻引发关注。此次成功不仅得益于主播个人魅力,更离不开“交个朋友”直播间团队对AI技术的深度融合。通过DeepSeek大模型,AI在内容生成、流程优化等方面大幅提升效率,实现了直播话术自动生成、多场景适配及全球化支持。团队还利用AI进行选品、合规审核和数据分析,优化直播策略。多位主播精细分工,结合强大的背景资源,确保高效带货。AI与真人主播互补,提升转化率。尽管存在版权、就业等争议,此次销售奇迹展示了AI技术商业化的潜力,并为行业提供了宝贵案例。
379 0
|
机器学习/深度学习 自然语言处理 Swift
从头构建和训练 GPT-2 |实战
从头构建和训练 GPT-2 |实战