J2SE自学(八)——面向对象之封装
1、
封装定义:隐藏属性,方法与方法实现细节的过程称为封装(这个定义并不是很准确,但是可以这样去理解),可以从两个方面理解:
1)、隐藏属性和方法。
2)、隐藏方法实现细节过程。
补充:
封装的优点:
(1)、隐藏类的实现细节;
(2)、让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;(因为如果直接对属性操作时没有限制的,比如年龄,如果直接调用属性则可以设置负值!(比如:-10),而用方法来访问可以设置一些限制)
(3)、便于修改,增强代码的可维护性;
2、封装的实现需要的知识:
1)、包
2)、访问修饰符
3)、方法
3、
子类可以拥有父类所有public或者protected修饰属性和方法(这里没有强调是否在同一个类中以及是否在同一个包中),如果这个子类和父类在同一个包中,则也可以拥有父类所有默认的属性和方法!但是如果不在同一个包中,则不会拥有,那更别说private修饰的属性和方法了
4、在项目中用的最多的修饰符就是public和private,而protected和默认修饰符用的相对较少!
5、
实体类(entity):又称为值对象(VO——Value Object)或者数据传输对象(DTO—— Data Transfer Object )。我们编写应用程序的目的就是——处理数据,而数据存储在数据库中,而表中的数据如何在应用程序中体现呢?那就是一个一个的实体类,而且这个表名和实体类名是一致的,而且表中有多少个字段,则在实体类中就有多少个属性,并且字段名和属性名也是一致的,同时在这个实体类中添加相应的public修饰的方法(也就是getters和setters)。
实体类中应该有哪些内容?
1)、私有的属性(与数据库中的字段一一对应)
2)、对这些属性有相应的getters和setters方法
3)、无参的构造方法和有所有参数的构造方法(这两个构造方法都是私有的!),当然也可以更具业务需求添加相应的构造方法
4)、在练习或者测试以及打印控制台的时候,可以将toString方法重写——这一点不要求
5)、生成equals方法(尤其是在框架的时候,至于hashCade方法现在在初始学习阶段不是很要求)
其实实体类在运用数据库的知识体现的更加明显
6、
透明的:只关心结果,至于内部具体的执行过程或者细节是不关心的!其实这里说的“透明的”也是看不见的(也就是封装),而这个看不见是指具体的执行细节过程!但是结果我们是可以看见的!这就是“透明的”。如果在以后的学习编程过程说XXX是“透明的”,意思就是放心大胆的用吧,至于是如何的实现(这个实现是由封装实现的)的不用我们管!
7、
客户端与服务器端关系:
1)、狭义的客户端与服务器:一个指的是软件(如应用程序)一个指的是硬件(如数据库)
2)、广义的客户端与服务器:比如现在有两个类A和B,在某个业务中,类A调用类B,则类A就是客户端,类B就是服务器;在另外一个业务中,类B调用类A,则类B就是客户端,类A就是服务器。于是就得出了,说XXX是客户端,XXX是服务器,一定要明确语义环境!(因为二者是相对的)
8、
final关键字:最终的
可以修饰:
1)、类:表示此类不能被继承,如SUN提供的String类、Integer类、Boolean类等
2)、属性:①、必须赋初值;②、一般为public修饰;③、变量名全为大写,而且此时变量的称呼改变了——常量
3)、方法:表示此方法不能被重写
9、
static关键字:静态的,唯一的,static修饰的属性和方法都位于方法区中!
可以修饰:
1)、属性:表示此属性是类属性(或者类变量),解决对象内存空间浪费。访问该属性的时候用“类名.属性名”(而不用对象名.属性名)
补充:一般情况下我们将属性修饰为fianl的时候同时也加上static这个关键字(位于final之前),但是反之,是不可以的
2)、方法:表示此方法是类方法。
①、静态方法中只能访问静态变量,不能访问普通变量,同时也不能调用非静态方法
②、静态方法中不能使用this与super关键字
10、静态块:是系统运行时自动运行,只能调用静态变量和其他静态方法(SUN不推荐使用)
static{
System.out.println("这个就是静态块! ") ;
}
静态块是类加载的时候执行的,而构造方法(或者可以成为构造块)是对象创建的时候执行的!