本文介绍的也不只是封装,包含零零散散的知识点。其中,主要介绍封装、包和访问限定符、static、代码块等
提示:使用PC端观看,效果更佳!
一、封装
封装是作为面向对象语言之一的特征,下面我们一起来认识
1.为什么要封装
(1)什么是封装
洗衣机举例
- 如我们使用的洗衣机,我们只需要会开关鸡,调节一些选项(洗衣温度和时间等),放洗衣粉或洗衣液即可。
- 内部的细节,如洗衣机怎么运转,怎么脱水等,不需要我们知道
- 用一些手段把内部细节隐藏起来(如套上外壳),这就是封装的思想
(2)为什么要?
例如我们使用的电脑,用户更多关心的是外观,才不会在意内部零件的颜值和长相是怎么样的,也不想看到,所以厂家就会使用电脑壳将内部的细节给封装起来,这就是封装。
我们Java的类中也需要这样的做法,用来屏蔽一些内部功能实现的细节。
2.怎么封装
(1)使用关键字:private
(2)示例:一般都是public和private的相互选择
class Dog { public String name;//没有进行封装 private int age;//使用了private进行了封装 } public class Test2 { public static void main(String[] args) { } }
3.怎么访问被封装的数据
(1)封装前后的访问
可以直接使用对象的引用直接访问到对象中被public修饰的成员变量,却访问不到被private修饰的age
(2)提供对外公开的接口
1)做法
第一步:鼠标右键或者Alt+Ins
第二步:点击框框中的
第三步:点击
第四步:生成了以下的代码
调用get接口可以得到改成员变量的值;调用set接口则是可以给该成员方法赋值
(3)使用以上的接口
1)给private修饰的成员变量赋值
2)获得该成员变量的值
以上就是基本的访问方式
4.封装的一些注意事项
(1)我们是推荐:成员变量使用private封装,而成员方法对外开放
(2)使用封装时,要根据实际情况去设计,而不是滥用
二、访问限定符和包
包可以说是一种文件夹,一个包里面可以有很多个类
1.怎么创建包
(1)包是啥?
下面的图样就是包的样子
(2)创建包
第一步:找到建包的入口
第二步:输入名字(包的阶级用点号隔开,位于后面的级别较高)
第三步:形成三级目录
这样,三个包就创建好了。我们可以在不同包下创建类
2.访问限定符
下面是一些修饰符,在这里只介绍两个
序号 | 封装的范围 | private | default | protected | public |
1 | 同一包中的同一类 | ✔ | ✔ | ✔ | ✔ |
2 | 同一包中的不同类 | ✔ | ✔ | ✔ | |
3 | 不同包中的子类 | ✔ | ✔ | ||
4 | 不同包中的非子类 | ✔ |
(1)private
被这个修饰的字段,只能在同一个类中直接访问;一个包中的不同类,需要通过接口访问
(2)public
这个修饰符不用过多介绍,在任何地方都可以被访问到
3.包的优点
(1)合理创建包,可以更好的管理类和分类
(2)包是对类、接口等封装机制的体现
(3)一个包中的类可以防止被其他包使用
(4)在不同的包中,可以存在相同的类名
三、修饰符static
同样是修饰符,但是static和像public的修饰符不是一类,他们可以一起使用,但是static是用来修饰成员变量或者成员方法的,存在于类中
1.static是什么
(1)static是用来修饰成员变量和方法的,称为静态的
(2)长什么样?
2.被static修饰后如何访问
(1)未被修饰的
在对象中,找不到被static修饰的classId变量
(2)作用机制
1)被static修饰的成员变量和成员方法,不属于对象,而是属于类
2)被static修饰的变量和普通的成员变量位于内存中的不同区域
3)静态成员变量和方法也被称为类变量和类方法
(3)如何访问
因为不属于对象而是属于类,所以访问可以不借助对象来访问,可以直接通过类来访问。
1)类名直接访问
2)对象引用访问(不推荐,但是会警告)
3.static修饰方法
(1)示例
(2)访问
(3)互访机制
1)静态方法中不可以访问非静态的
2)非静态中可以访问静态的
一个不需要对象的,不能调用需要对象的;反之可以
4.注意事项
(1)在static修饰的方法中,不能出现非静态成员变量和成员方法
(2)在static的方法中,不能出现this。this后面一般都要跟着对象
(3)
5.static和非static的总结
(1)成员变量分为:静态成员变量和非静态成员变量/普通成员变量;同样,成员方法分为:静态成员方法和非静态成员方法。
(2)静态成员变量:属于类的,只有一份;类名+点号来访问静态成员变量
(3)非静态成员变量/普通成员变量:属于对象的,每实例化一个对象,都会存在一份;通过对象的引用+点号来访问
(4)静态的成员变量 随着类被加载而创建。类被销毁而销毁
四、代码块
本节讲述三种代码块,下面跟我一起了解
1.代码块简单概述
(1)代码块一共有这四种:普通代码块、构造代码块、静态代码块和同步代码块,但是同步代码块在目前阶段是不会接触到的,所以这里不做讲解。
(2)什么是代码块
一般使用花括号({})括起来的部分称为代码块,又根据代码定义的位置和使用的关键字,就可以将代码块分类,也就是上述的四种。
2.普通代码块
(1)一般定义在方法中的代码块,就是普通代码块,用法较少
(2)样式
1)
2)
(3)局限性
括号中的变量只能在代码块内部使用,出了作用域就不存在
3.构造代码块
(1)构造代码块,又称为示例代码块。定义在类中
(2)作用:用于给类中的成员变量初始化
(3)示例:
运行结果:
4.静态代码块
(1)使用static关键字定义的代码块称为静态代码块
(2)作用:用于初始化静态成员变量(类变量)
(3)示例:
运行结果:
5.两种代码块的执行顺序
上述对代码块有了初步的认识,下面针对实例代码块、静态代码块、构造方法进行比较,实例、静态和构造分别在父类和子类中的执行顺序。
(1)实例代码块、静态代码块和构造方法的执行顺序
执行顺序展示:
由此可知:静态代码块>实例代码块>构造方法
(2)分别在父子类中比较
执行顺序展示:
静态代码块一定是最先被执行的。
(3)静态代码块执行次数
结果展示:
(4)多个静态代码块
1)赋值
结果:
前面的结果会被覆盖掉
2)其他
结果:
(4)关于静态代码块的小结
1)无论实例化多少次对象,静态代码块都只会被执行一次
2)类变量是在JVM加载类时,就已经被初始化好了
3)多个静态代码块,在编译时,会将其合并。后面的会将前面的覆盖
4)而实例化代码块,只有在创造对象时才会被执行
本期的代码到这里就全部结束了,欢迎补充留言……