一、封装
Java语言中提供了 private、 默认的(package/friendly/default 不写)、 protected 和 public 四个访问限制修饰符来限制用户的访问权限。
所谓的封装,就是指使用private修饰成员变量,private是私有的意思,它修饰的成员变量只能在类体内被引用,如果外界想要访问私有属性,需要提供一些使用public修饰的公有方法,其中包括用于获取属性值的getXxx方法和设置属性值的setXxx方法。简言之,就是“属性私有化,方法公有化”。
关于set get方法,我理解就是成员方法与构造方法互相结合的一个产物,既可以为属性赋值,也可以在方法体内添加控制语句
二、两个关键字
1、static
1)静态变量
在一个Java类中,可以使用static关键字来修饰成员变量,该变量被称作静态变量,也叫类变量。静态变量是一块公共内存,跟类绑定,被所有实例共享,可以使用“类名.变量名”的形式来访问。所以静态变量可以用 “类名.变量名” 和 “对象名.变量名” 来赋值和使用。
static关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错。
2)静态方法
static关键字还可以修饰方法,被static修饰的方法称为静态方法,也叫类方法。跟静态变量一样,静态方法不必和对象绑在一起,可以使用“类名.方法名”来访问。所以静态方法既可以用 “对象名.变量名” ,也可以用 “类名.变量名”来调用。
3)静态变量与实例变量区别
(1)、占用内存空间不同。
系统会为每个对象分配对应的实例变量内存空间,而所有对象会共享一个静态变量及其内存空间
(2)分配变量时间不同。
静态变量在类一加载到内存时就分配了相应的内存空间;而实例变量只有在创建了对象后才为每个对象实例变量分配相应内存空间
(3)在具体使用上,实例变量只能由对象名调用,而静态变量类名或对象名均可。
4)静态方法与实例方法区别
在类中static修饰的成员方法称为静态方法或类方法,没有static修饰的成员方法为实例方法,静态方法跟类绑定,实例方法跟对象绑定。
关于它们的调用问题:
在一个静态方法中只能访问用static修饰的成员(包括静态变量和静态方法),不能访问实例成员,原因在于实例成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。反过来,实例方法既可以访问静态成员,也可以访问实例成
员。因为实例方法能被调用的时候,静态变量已经在内存中存在,静态方法也已经被加载。他们之间的调用关系可以用下面这幅图表示:
2、this
Java中提供了this关键字来指代当前对象,用于访问类中的其他成员。
它可以用于实例方法,也可以用于构造方法。
1)在构造方法中使用this
this关键字出现在构造方法中时,谁来使用该构造方法创建对象,this就该代指谁。
2)在实例方法中使用this
this关键字出现在实例方法中时,this代表正在调用该方法的当前对象。
3)注意
(1)无论在构造方法还是实例方法中,当方法内有同名的局部变量时,this不能省略。所以用this关键字区分成员变量与局部变量是一种非常常见的做法。
(2)this关键字不可以出现在静态方法中,因为静态方法与类关联,所有对象共享,无法用this代指当前对象
三、包
Java中为了更好地管理类,引入了包
1、包的创建
通过关键字package声明包语句。package语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。
语法格式:package 包名;
Java允许同名类出现在不同的包中
2、包命名规范
包名由小写字母组成,不能以圆点开头或结尾。自己设定的包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名。
3、包的使用
为了使用不在同一包中的类,需要在Java程序中使用import关键字导入这个类,导入格式有一下两种:
import 包名 . * ;//该包下所有的类都可以被引用
import 包名 . 类名;//只能引用类名指定的类
eg:import java . util . Scanner;
属于第二种,表示引用java . util包中的Scanner类
同一包中的类不需要导入,直接可以使用。
4、Java . lang包
Java . lang包是Java语言的核心类库,它包含了运行Java程序必不可少的系统类,系统自动为程序引入java . lang包中的类(System 、String等),不需要使用 import 引入就可以使用,所以之前的开发使用 System 、String,但是没有写 import 语句。
四、UML类图
UML类图又称统一建模语言,是一种为面向对象软件设计提供统一的、标准的、可视化的建模语言。它提供了一系列框图表示对象模型,为开发人员阅读和交流系统架构和规划提供便利。
类图是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。
1、类图
在UML中,类图使用包含类名、属性和操作且带有分隔符的长方形来表示。
(1)类图的第一层是类名,类名如果是常规字形,表明该类是抽象类;如果是斜体字,表明该类是抽象类。
(2)类图的第二层是属性层,也称为变量层,列出了类的成员变量及类型。UML规定变量的表示方式为:
可见性 变量名字:类型【= 缺省值】
其中:“可见性”表示该变量对于类外的元素而言是否可见,包括公有(public)、私有(private)和受保护(protected)三种,在类图中分别用符号 +、 - 和 # 表示。“缺省值”是一个可选项,即变量的初始值。
(3)类图的第三层是方法层,也称操作层,列出类中的成员方法。UML规定操作的表示方式为:
可见性 名称(参数列表)【:返回类型】
其中:“可见性”同上“名称”即方法名“参数列表”表示方法的参数,其语法与属性的定义相似,参数个数是任意的,多个参数之间用逗号“ ,”隔开。“返回类型”是一个可选项,表示方法的返回值类型,可以是基本数据类型,也可以是引用数据类型,还可以是空类型(void),如果是构造方法,则无返回值类型。
2、类与类之间的关系
在软件系统中,类并不是孤立存在的,类与类之间存在各种各样的关系。在UML类图中,类与类之间有以下几种关系:泛化,实现,关联,聚合,组合,依赖。
(1)泛化含义:泛化关系是指类之间的继承关系,表示一般与特殊的关系。
具体表现:class 子类 extends 父类{ }
图示:空心箭头+实线,箭头指向父类
(2)、实现含义:实现关系是一种类与接口的关系,表现类实现接口所有属性和行为。
具体表现:class 类名 implements 接口名{ }
图示:空心三角箭头+虚线,箭头指向接口
(3)关联含义:对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。关联又分为一般关联、聚合关联与组合关联。聚合和组合只有概念上的区别,在Java中的代码实现上没有区别。具体表现:成员变量
图示:普通箭头+实线,箭头从实用类指向被关联的类。
(4)聚合含义:聚合关系是关联关系的一种,是强的关联关系;表示是整体与部分的关系,且部分可以离开整体而单独存在。关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
具体表现:成员变量
图示:空心菱形+实心线,菱形指向整体
(5)组合含义:组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。组合关系也是表示整体与部分的关系,但部分不能离开整体而单独存在。如人和大脑是整体和部分的关系,人不存在了大脑也就不存在了。
具体表现:成员变量
图示:实心菱形+实线,菱形指向整体
(6)依赖含义:依赖关系是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖。
具体表现:局部变量、方法的参数或者对静态方法的调用
图示:普通箭头+虚线,箭头指向被使用者