第九篇(封装) :《据说是:“当今社会最有前途!最值得学习的语言!”》让我们来了解一下这是什么样的一种语言!

本文详细介绍了Java中的封装概念,包括其作用、使用方法以及如何通过private关键字、getter和setter方法实现属性的保护。此外,还讲解了Java包的使用及其带来的好处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

封装

前言

面向对象的三大特性:封装(基础、简单)、继承、多态。(抽象)

在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

1. 理解封装的作用

程序设计追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉。低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。

编程中封装的具体优点/作用:

1.降低了大型系统的风险,提高代码的安全性。

2.可以有效解决不合理赋值的问题,提高代码的复用性。

3.“高内聚”:封装细节,便于修改内部代码,提高可维护性

4.“低耦合”:简化外部调用,便于调用者使用,便于扩展和写作。(牵连小)

java中使用“访问控制符”来控制哪些细节需要封装。哪些细节需要暴露的。Java中4种“访问控制符”。分别为:private(私有的)、default(不履行;不参加)、protected(受保护的)、public(公共的),他们说明了面相对象的封装性。

在这里插入图片描述
在这里插入图片描述

2. 掌握封装的使用

1.打开eclipse,封装首先会通过private私有化变量,限制对类属性的访问,如下图所示:

在这里插入图片描述
2.通过set和get方法设置对每个属性对外访问接口,外部需要改变类的属性,需要通过这些公共public的方法,如下图所示:

在这里插入图片描述

3.这里介绍一个java封装类的实例,创建一个Test类,对变量进行私有,方法进行公共,set和get方法可以自动生成,如下图所示:

在这里插入图片描述4.创建一个Test2类,创建Test类的对象,通过对象设置封装类的属性,然后通过get方法获取这些属性,如下图所示:

在这里插入图片描述
5.运行项目指挥,在控制台可以看到成功获取了封装类的属性,如下图所示:

在这里插入图片描述

封装使用的小总结:

  1. 属性私有化
  2. 提供公共的getter和setter方法
  3. 提供无参构造方法(通过方法获取属性)
  4. 实现序列化接口
  5. 输出打印

3.会使用Java的包来组织类

Java 包(package)的命名规范:
Java 包(package),为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。

首先我们该知道的是,java的包名都是由小写单词组成的,类名的首字母都是大写,也就是我们常用的驼峰写法,包路径一般都是对系统模板的定义与归类。这样看了包名很容易就明白哪一个模块是干什么的,很容易通过对应的包路径找到对应的代码!

在java开发的过程中,每名Java开发人员都可以编写属于自己的java package,为了在编写中保证每一个java package命名的唯一性,要求开发人员在自己定义的包名前加上唯一的前缀。所以多数开发人员采用自己公司的名称.项目名 … 模块名在互联网上的域名称作为自己程序包的唯一前缀。例如: com.sun.xml …

例如一般个人的项目的命名方法如下:

indi :

     个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,版权主要属于发起者。

     包名为indi.发起者名.项目名.模块名 ...

pers :

     个人项目,指个人发起,独自完成,可分享的项目,版权主要属于个人。

     包名为pers.个人名.项目名.模块名 ...

priv :

     私有项目,指个人发起,独自完成,非公开的私人使用的项目,版权属于个人。

     包名为priv.个人名.项目名.模块名 ...



另外,我为了区分团队项目和前面所说项目的区分,还有了以下扩展:

team :

     团队项目指由团队发起,并由该团队开发的项目,版权属于该团队所有。

     包名为team.团队名.项目名.模块名 ...

com :

     公司项目:由项目发起的公司所有。

     包名为com.公司名.项目名.模块名 ...

为什么使用包(包的好处):

  1. 可重用性。在java中开发项目时,我们常常觉得我们的代码中一遍又一遍地写的东西很少。使用包,您可以在包内部以类的形式创建这样的东西,并且只要您需要执行相同的任务,只需导入该包并使用该类。
  2. 用于对类和接口进行分类,以便更好的组织和维护它们。在我们有数百个类的大型Java项目中,总是需要将相似类型的类分组到一个有意义的包名中,以便您可以更好地组织项目,并在需要时快速定位它并使用它,这提高了效率。
  3. 防止命名冲突。我们可以在不同的包中定义两个具有相同名称的类,以避免名称冲突,我们就可以使用包。

如何使用包:

在定义好包之后,如果在包下定义类,类中一定要在有效代码的第一行添加package包声明。

如果在不同包中使用某个类:

那么一定要在使用类中声明包的导入语句。 import要引入的类地址; 例如:使用Scanner 、 Arrays

如果不这样做,JVM无法确认该类型的地址,也无法区分多个同名类型。

import导入包声明 需要放在package声明下,类声明上的位置,它们之间的位置顺序固定。

java.lang包下的内容不需要手动导入!例如:System、String

例如:

package cn.kgc.demo1;
// 导入时 可以使用精细导入(全类名 /  全限定名 /  全/类路径)  也可以使用批量通配导入*
import java.util.Scanner;
public class Test{
    
}

4. 理解和掌握使用访问修饰符

访问权限修饰符在类的成员变量和方法的应用:

  • Public:公共访问权限,一个类中被public所修饰的成员变量或方法,能够被所有的类(包括这个类本身)访问。
  • Protected:保护访问权限,一个类中被protected所修饰的成员变量和方法,只能够被同一个包内的类,它的子类,和该类本身所访问。
  • default:默认包权限, 使用方式就是:不添加权限修饰符,那么这个类的成员变量或者方法就是default的了,它的成员变量和方法只能够被同一个包内的类,和这个类本身所访问。
  • Privated:私有访问权限,一个类中被privated所修饰的成员变量和方法,只能够被这个类本身所访问。

在这里插入图片描述
static(静态的)关键字:

特点:
  1.static是一个修饰符,用于修饰成员。(成员变量,成员函数)static修饰的成员变量 称之为静态变量或类变量。
  2.static修饰的成员被所有的对象共享。
  3.static优先于对象存在,因为static的成员随着类的加载就已经存在。
  4.static修饰的成员多了一种调用方式,可以直接被类名所调用,(类名.静态成员)。
  5.static修饰的数据是共享数据,对象中的存储的是特有的数据。

 private static int age;//用static修饰的成员变量静态变量或者叫做类变量
 
 private String name;   //成员变量
 
 public static void show(){//静态函数 可直接用类来调用
     System.out.println("  ");
 }
 public void showDemo(){//成员函数 需要创建对象才可以调用
     System.out.println("  ");
 }

成员变量和静态变量的区别:
  1.生命周期的不同:
    成员变量随着对象的创建而存在随着对象的回收而释放。
    静态变量随着类的加载而存在随着类的消失而消失。
  2.调用方式不同:
    成员变量只能被对象调用。
    静态变量可以被对象调用,也可以用类名调用。(推荐用类名调用)
  3.别名不同:
    成员变量也称为实例变量。
    静态变量称为类变量。
  4.数据存储位置不同:
    成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
    静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

  public class Demo {
      private static int age;//用static修饰的成员变量静态变量或者叫做类变量
      private String name;   //成员变量
      public static void show(){//静态函数 可直接用类来调用
          System.out.println("  ");
     }
     public void showDemo(){//成员函数 需要创建对象才可以调用
          System.out.println("  ");
     }
 
 
 public static void main(String[] args) {
     Demo.age = 1;//静态变量可以直接用类名调用。随着类加载而存在类的消失而消失
     Demo b = new Demo();
     b.age = 10;//静态变量也可以通过对象来调用(推荐用类名来调用)
     b.name="张三";//成员变量只能通过对象来调用。随着对象创建而存在随着对象回收而释放。
     Demo.show();//静态方法也可以直接用类名调用。
     b.show();    //静态方法也可以通过对象来调用。
     b.showDemo();//非静态方法只能通过对象来调用。
  • static修饰的信息是属于类的,它是随着类的加载而加载的。
  • 我们没有被static修饰的信息是非静态/实例的,多个实例/对象之间的信息是相互隔离。而static修饰时被多个实例共享。
  • 被static修饰的信息可以直接采用类名.的形式来调用,也可以使用对象来调用(不推荐)。

运行例图:
在这里插入图片描述加载顺序:

static可以用来修饰属性、方法,还可以用来修饰代码块。

静态代码块 -> 构造代码块 -> 构造方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值