封装的概念

发布于:2023-01-23 ⋅ 阅读:(562) ⋅ 点赞:(0)

封装是Java的三大特性之一

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

封装的原则

1.将属性隐藏起来   使用private 关键字来修饰属性,私有的,私有化的,被private修饰的内容,只能在本类中使用,可以用来修饰属性和方法。

2.对外提供公共的访问方法(赋值,取值),提供getter和setter方法来操作隐藏的属性。

实现封装的步骤

1:私有化属性;

2:创建公共的getter和setter方法;

3:在setter方法中添加公共语句

private  关键字说明

   被private修饰的属性和方法只能在本类中使用,其他类不能直接访问。

封装的好处

1.隐藏了实现的细节,提高安全性

2.符合Java的"高内聚,低耦合"思想

3.提高了软件的独立性和可重用性

包的介绍

作用:

1、文档分门别类,易于查找和管理;

2、解决文件同名冲突问题;

3、有助于实施访问权限管理;

包:package,需要放在java源代码中的第一条语句;以分号结尾。

类似于windows中的文件夹,

包的命名规则:

1、包名由小写字母组成,不能以圆点开头或结尾;

2、包名之前最好加上唯一的前缀,通常是组织倒置的域名;

包的创建方式:

  1. 分别创建包和类
  2. 创建类的同时创建包

包的导入:

如果需要使用其他包下面的类,可以使用import 关键字导入

导入规则:import 包名.类名

如:

import java.util.Scanner;  导入scanner

import java.util.*;    * 表示所有的类,导入java.util包下的所有类

注意:

  1. 一个类同时引用了两个来自不同包的同名类,必须通过完整类名来区分
  2. package和import的顺序是固定的

package必须位于第一行(忽略注释行);

只允许有一个package语句;

其次是import;

接着是类的声明;

3:访问权限控制 

Java 中一共有四种访问权限控制,其权限控制的大小情况是这样的:public > protected > default(包访问权限) > private ,

具体的权限控制看下面表格 

 

  1. public: 所修饰的类、变量、方法,在任何地方均具有访问权限;
  2. protected: 这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问;
  3. 包访问权限(default): 只对同包的类具有访问的权限,外包的所有类都不能访
  4. private: 私有的权限,只对本类的方法可以使用;其他地方均不能访问

static修饰符

static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,他不依赖类的实列,被类的所有实列对象共享。

static修饰的成员变量和成员方法习惯上成为静态变量和静态方法,static修饰的代码块表示静态代码块

static代码块

 static代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,他不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果Static代码块有多个,JVM将按照他们在类中出现的先后顺序依次执行他们,每个静态代码块只会被执行一次。

    静态代码块执行的时机:

静态代码块在对象创建之前执行,每创建一个对象都会执行一次构造方法。而每个静态代码块只会被执行一次。第一次创建对象之前。

static变量,静态变量

按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;

另一种是没有被static修饰的变量,叫实列变量。实列变量必须通过对象来调用。

静态变量特点:

1.被static修饰的变量叫静态变量,非静态变量叫实列变量

2.在内存中只有一个,在加载类的时候创建,被所有方法和对象共享

3.其他类中,可以直接通过类名访问(可以通过类名直接调用)

static方法,静态方法

静态方法就是被static修饰的方法,没有被static修饰的方法叫实列方法,实列方法必须要对象才可以调用

静态方法可以直接通过类名调用,任何的实列也都可以调用

静态方法特点

1.静态方法中不能使用this和super,this当前对象

2.不能直接访问所属类的实列变量和实列方法,    面试题,静态方法能不能访问非静态资源?  可以的

3.可直接访问类的静态变量和静态方法,静态能够调用静态资源,不能直接调用非静态资源

4.可直接通过类名.方法名访问

5.规定:静态只能调用静态,非静态只能调用非静态

面试题:静态方法能不能调用非静态方法?

            静态方法能不能直接调用非静态方法?

类的成员变量包括

类变量(静态变量)

1.被static修饰的变量

2.在内存中只有一个拷贝

3.类内部,可在任何方法内直接访问静态变量

4.其他类中,可以直接通过类名访问

实列变量

没有被static修饰的变量

每创建一个实列,就会为实列变量分配一个内存,实列变量可以在内存中有多个拷贝,互不影响

必须要通过对象来调用

初始化:

静态变量在创建对象之前会被加载

实例变量,随着对象的创建而创建

案列1

 

//使用封装实现电子宠物系统的企鹅类正确输入健康值和亲密度healthy,lovely,name,sex
//保证健康值的有效性(0~100),否则取默认值60
//保证亲密度的有效性(0~100),否则取默认值60

测试类 

案列2

需求说明
//模拟实现选民投票过程:一群选民进行投票,每个选民只允许投一次票,并且当投票总数达到100时,就停止投票
//唯一的一个变量来统计总数-静态变量写一个选民类-投票的方法-定义一个计数器投票方法的时候打印目前总票数,达到100了,就不能在进行投票了


 

测试类