封装大讲解~小码人快来透彻理解封装~老码人回顾学生时期的热血~
目录一.包(一).包的定义(二).导包(三).自己写包:二.封装的实现(一).权限限定符(二).static:1.静态变量的特性:2.静态成员的引用方式:3..静态变量的初始化4.使用static的注意事项(三).提供接口1.构造方法:2.getter/setter 方法三.补充1.普通代码块2.静态代码块四.小结首先什么是封装封装就是把成员变量成员方法构造方法包装在类中通过公共的接口允许外界访问类的内部的这种思想。那么怎么实现封装要了解这个问题我们要先来看包。一.包(一).包的定义包的主要作用是命名空间和类组织管理。相同性质或作用的类放在同一个包中进行 组织管理。不同包中可以存在相同名称的文件。(二).导包因为JAVA中提供了各种各样的功能的包方便我们有需求的时候直接进行导入使 用。导包的三种格式为1.import 包名.类名 例如import java.util.Arrays2.import 包名*例如import java.util.*这种方法可以导入目标文件夹下所有的包3.可以使⽤import static导⼊包中静态的⽅法和字段例如import staticjava.lang.Math.*注意导包的操作只能在类的顶部进行导入而写导包的时候最好具体到某一个类 而不是到包的名字就结束了。(三).自己写包:我们也可以自己来写一个包自己写包的时候包的名称一般都是公司类名的反 写。在新建包的时候我们就可以输入:com.baidu.wwwidea就会根据点来创建好包。 包名一般采用小驼峰的形式。了解了包是什么我们就可以来看封装的实现二.封装的实现(一).权限限定符常见的权限限定符及其限定范围如下表1.private [ˈpraɪvət]被private修饰的成员变量和成员方法只能在当前类中被访问否则 会报错2.default [dɪˈfɔːlt]default的翻译是 违约不履行规定,在这里是什么(权限限定)修饰符 都不加的意思什么修饰符都不加的时候我们可以在当前包中的不同类访问该变量或 方法。3.protected [prəˈtekt]:protected的中文是受保护的意思被protect修饰的可以在不同 包中的子类中访问(子类的知识我们在继承中分享)4.public [ˈpʌblɪk]:public是我们在认识封装之前使用频率最多的一个修饰符被public修 饰的成员变量和成员方法可以在整个项目中都访问使用到。(二).static:我们来认识第二个实现封装的关键字,static:static可以把成员变量和成员方法变成静态 的.1.静态变量的特性:(1).被static的属性属于类而不再属于方法.(2).存储位置从堆变成方法区静态的不依赖于对象可以不通过对象的引用来访 问。2.静态成员的引用方式:class Student{ public static String name; } class Test{ public static void main(){ Student student new Student(); Student.name;//推荐因为静态的name属于Student类所以可以直接通过类名引用 student.name;//通过对象引用但是编译器会把其解析成Student.name } }因为静态的成员变量是属于类的而不依赖于对象所以我们可以直接通过类名.成员变 量名来引用。3..静态变量的初始化(1).直接赋值: Student.name 丹丹;(2).通过set赋值:调用set()方法(下文会讲到)。(3).通过构造方法(4).使用代码块4.使用static的注意事项(1).static只能用来修饰成员变量和成员方法不能修饰局部变量。static修饰的变量 名叫做类变量修饰的方法叫做类方法(2).static修饰的成员变量的修改具有一针见血的特性也就是说只要在一个地 方修改静态变量所有使用到静态变量的地方会随之修改。(3).static修饰的方法中不能使用this关键字因为this表示的是当前引用代表的对 象依赖于对象但是static修饰的方法不依赖于对象。(4).static修饰的方法中不能直接调用非静态变量和非静态方法因为非静态的变量 和方法依赖于对象但是static修饰的方法不依赖于对象都没有实例化这个对象 怎么能调用这个对象的变量和方法呢除非在static修饰的方法中创建对象再进行调 用非静态的方法和对象(5).非静态的方法中可以直接调用静态的变量和方法因为静态的变量和方法是随 着类的加载而出现随着类的消失而销毁生命周期是整个类的存在周期所以静 态的方法和变量在非静态的方法出现的时候已经存在可以直接调用。(三).提供接口把成员变量和成员方法包装起来之后我们要提供接口被外界调用和访问除了上 文的punlic还有构造方法和setter/getter方法下面我们来一一介绍1.构造方法:构造方法是用来对类的成员变量初始化的一个方法构造方法的书写格式如 下public class Cat { private String name; private int age; private String color; public Cat(String name, String color, int age) { this.name name; this.color color; this.age age; } }构造方法是没有返回值的格式抽象出来就是:public 类名构造方法的注意事项:(1).因为要让外界调用构造方法所以构造方法要使用public修饰(2).实例化对象的时候会自动调用构造方法(3).构造方法是可以发生重载的,在实例化对象的时候通过不同的参数值来确 定使用哪个构造方法(4).使用this(参数列表)可以通过参数的个数和类型在构造方法中调用本类其他 的构造方法但是this()必须在方法的第一行这是JAVA的硬性规定(5).当我们不写任何的构造方法的时候java会默认提供一个不带任何参数的 构造方法但是如果有一个构造方法java就不会提供任何构造方法(6).借助idea自动生成构造方法AIT Insert → constructar补充代码构造方法的重载class Dog{ private String name; private String color; private int age; //定义带参构造 public Dog(String name,String color,int age){ this.name name; this.color color; this.age age; } //定义无参构造可以后续使用setter方法进行初始化 public Dog(){ } }使用this()调用本类其他的构造方法class Dog{ private int age; private String name; //定义带参构造 public Dog(int age,String name){ this.name name; this.age age; } //定义无参构造在方法中使用this()调用带参构造 public Dog(){ this(2,小白);//会把2赋给age, 小白赋给name } }2.getter/setter 方法getter和setter方法同样也是对成员变量进行初始化的方法可以作为类的对外接 口。有getter/setter的类才是一个风格优美功能完善的封装类。(1).getter/setter的定义和使用首先我们需要在功能类中定义getter/setter方法代码展示如下我们注意到,setter/getter的修饰符都是public ,返回值就是对应成员变量的返回值 名字一般为get/set 成员变量名。这三点就是定义一个getter/setter方法的要求。接下来我们看getter/setter方法的使用:class Fish{ private int age; private String name; public Fish(int age,String name){ this.age age; this.name name; } public Fish(){ } public int getAge() { return age; } public void setAge(int age) { this.age age; } public String getName() { return name; } public void setName(String name) { this.name name; } } public class Test{ Fish fish new Fish();//调用无参构造 fish.setName(彩鳞); fish.setAge(1); System.out.println(fish.getName()); System.out.println(fish.getAge()); }输出如下只需要传递过去参数就可以完成对对象属性的初始化。三.补充上文讲的是把成员封装以及对外接口的提供这里我只好把接下来要说的代码块单独作为补充来介绍代码块分为两种普通代码块(实例代码块)静态代码块他们各自的作用和触发机制不同这里我们一一介绍1.普通代码块(1).书写格式普通代码块就是把一块区域的代码使用{}包装起来{ //代码块 }(2).触发机制在创建该类的对象的时候触发。2.静态代码块(1).书写格式静态代码块的书写格式是在 普通代码块的基础上增加一个static:static{ //静态代码块 }(2).触发机制因为静态的成员属于类所以静态代码块在类加载的时候触发,只触发一次。四.小结本文作者的期望原本是一篇文章介绍完封装继承和多态但忧于读者的时间和耐心问题小编就分三篇文章来介绍各位看官若觉得有所收获欢迎大家关注继承和多态篇的更新