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

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

一、封装

面向对象程序三大特性:封装、继承、多态。封装(英语: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.不能在静态方法调用非静态方法.

目录
相关文章
|
XML Java 数据格式
Spring框架(二) 底层架构核心概念解析-四万字你值得一看
上面说到解析为BeanDefintion之后会注册到Spring容器中 , 那么什么是容器? 其实在DefaultListableBeanFactory这个类中就有体现 , 源码中是这样定义的
91 0
|
3月前
|
存储 安全 Java
"Java编码魔法:揭秘图片与文件的Base64神秘转换术,让数据在指尖跳跃!"
【8月更文挑战第16天】Base64编码在Java开发中常用于将二进制数据如图片转换为ASCII字符串以便传输。编码使用64个字符及等号填充,每3字节数据编码为4个字符。Java利用`java.util.Base64`类实现此功能:读取图片或文件为字节数组后进行编码。解码时将Base64字符串还原为字节数组并写入文件。需注意编码效率降低、不提供安全性及特殊字符兼容性等问题。掌握这些技巧有助于解决Web开发中的数据传输需求。
96 4
|
运维 前端开发 安全
万字长文搞懂产品模式和项目模式
万字长文搞懂产品模式和项目模式
178 0
|
存储 算法 安全
终于有人用1.6W字把分布式算法的系统模型给彻底讲明白了!
系统模型-进程 在真实的分布式系统中,可能存在服务器(节点)、处理器、进程、线程等并发执行的实体。 在分布式算法中,这些实体都被抽象为进程。 注意,这里的进程与操作系统中的进程不完全是一个概念,后者侧重于描述一组资源的集合,例如文件句柄、地址空间、数据、代码等,还可以有多个线程,而前者是一个有状态的自动机。
941 3
|
存储 资源调度 算法
打通任督二脉:4000字,一文,从代码拆到计算机底层。
一个业务场景 假设我们要编写一个购买商品的程序,程序的内容很简单: 商品的库存数量存放在数据库中,每次完成库存数量-1。我们很快可以写出伪代码
70 0
|
Java 编译器
七千字带你了解封装等机制下
七千字带你了解封装等机制下
93 0
七千字带你了解封装等机制下
|
Java 数据库连接
七千字带你了解异常处理下
七千字带你了解异常处理下
95 0
七千字带你了解异常处理下
|
Java 程序员
七千字带你了解异常处理上
七千字带你了解异常处理上
63 0
七千字带你了解异常处理上
|
存储 缓存 负载均衡
两万字深度介绍分布式系统原理
两万字深度介绍分布式系统原理
185 0
两万字深度介绍分布式系统原理
|
算法 关系型数据库 5G
本书的目的和篇章结构 | 带你读《5G-NR信道编码》之五
2017 年 12 月,在葡萄牙里斯本的 3GPP RAN#78 次会议上,5G-NR 的第一 个版本获得通过 [17]。这标志着 5G 第一阶段的标准化工作已经完成(eMBB 部分)。 作为 5G 物理层的关键技术,先进的编码将对满足 5G 主要场景的性能指标发挥重 要作用。根据作者的了解,目前,无论是国外还是国内,尚未有一本能比较全面介 绍 5G 信道编码的书,这本书的目的就是给读者呈现 5G 信道编码的丰富画面。
本书的目的和篇章结构  | 带你读《5G-NR信道编码》之五