一、面向对象概述
1、概念
面向对象(Object-Oriented,简称OO)是一种常见的程序结构设计方法。是一种抽象的概念,是相对于面向对象而言的。面向对象与面向过程都是解决问题的思想:
面向过程:强调的是功能行为,一种过程,先干啥,再干啥;
面向对象:将功能封装到对象里,强调的是具备某功能的对象;
面向对象思想的基础是将相关的数据和方法放在一起,组合成一种新的复合数据类型,然后使用新创建的复合数据类型作为项目的基础。
按照面向对象的思想,可以把任何的东西看做对象!
过程和对象在我们的程序中的体现:过程其实就是函数;对象是将函数等一些内容进行了封装。
2、面向对象的三个特征:
封装(Encapsulation);
继承(Inheritance);
多态(Polymorphism)。
3、面向对象的特点:
1)将复杂的事情简单化。
2)面向对象将以前的过程中的执行者,变成了指挥者。
3)面向对象这种思想是符合现在人们思考习惯的一种思想。
4、类
类(class)是Java 语言的最小编程单位,也是设计和实现Java 程序的基础。
1)类的概念
类是一组事物共有特征和功能的描述。类是对于一组事物的总体描述,是按照面向对象技术进行设计时最小的单位,也是组成项目的最基本的模块。类的概念是抽象的,类似于建筑设计中的图纸,是对于现实需要代表的具体内容的抽象。类只包含框架结构,而不包含具体的数据。所以类代表的是总体,而不代表某个特定的个体。
2)类的定义:
[修饰符]class 类名{
1~n个构造方法;
0~n个字段;
0~n个方法
}
定义类,其实就是定义类里面的对象
对象包含:状态(属性);功能、行为(方法);
5、类的成员
1)成员变量
a)定义在类中,在整个类中都可以被访问。
b) 随着对象的建立而建立,存在于对象所在的堆内存中。
c) 成员变量有默认初始化值。
注:成员变量与局部变量的区别
局部变量定义在方法或局部代码快内,存在于栈内存中,制作用于方法内且没有初始化值。
2)成员方法
成员方法描述对象所具有的功能或操作,反映对象的行为,是具有某种相对独立功能的程序模块。它与过去所说的子程序、函数等概念相当。一个类或对象可以有多个成员方法,对象通过执行它的成员方法对传来的消息作出响应,完成特定的功能。成员方法一旦定义,便可在不同的程序段中多次调用,故可增强程序结构的清晰度,提高编程效率。
3) 构造方法
用来构造类的实例(每一个类都默认有一个无参的构造方法,得使用new调用)
字段:类或对象所包含的数据,对类状态的一种描述;
方法:类或对象的特征或行为
作用:给类中的字段进行初始化,可以用来创建对象。
特点:
a)方法名与类名相同
b)不用定义返回值类型
c)不需要写return语句
4)构造代码块
作用:给对象进行初始化。对象一建立就运行,而且优先于构造函数运行。
和构造函数的区别:
a)构造代码块是给所以对象进行初始化。
b) 而构造函数是给对应的对象初始化。
c) 构造代码块中定义的是不同对象共性的初始化内容。
5)静态代码块
格式:
static{
静态代码块中的语句。
}
特点:随着类的加载而执行,执行一次。并优先于主函数。用于给类进行初始化。
6、static关键字
static是一个修饰符,用于修饰成员(成员变量和成员函数)。当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。
格式:类名.静态成员。
1)static特点:
a)随着类的加载而加载。
也就是说:静态会随着类的消失而消失,说明它的生命周期最长。
b)优先于对象存在。明确一点:静态是先存在。对象是后存在。
c)被所有对象所共享。
d)可以直接被类名所调用。
2)静态有利有弊:
利处:对对象共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份。可以直接被类名调用。
弊端:生命周期过长。访问出现局限性。(静态虽好,只能访问静态)。
3)静态使用注意事项:
a)静态方法只能访问静态成员。
非静态方法既可以访问静态也可以访问非静态。
b)静态方法中不可以定义this,super关键字。
因为静态优先于对象存在。所以静态方法中不可以出现this。
c)主函数是静态的。
7、this关键字
this代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
1)this的应用:
当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
但凡本类功能内部使用到了本类对象,都用this表示。
2)this语句:
用于构造函数之间进行互相调用。如:this(name);
thi语句只能定义在构造函数的第一行。因为初始化要先执行。
3)对this的概括总结:
this的两种用法:
a)用于区分同名变量的情况,说的成员和局部同名的时候;
b)用于构造函数间调用。
注:一般函数不能直接调用构造函数,因为this语句不能用在一般函数中,只能用在构造函数间。
二、单例设计模式
设计模式的概念:解决某一问题最行之有效的方法。java*有23种设计模式。
接下来我们讲解其中的一种:单例设计模式。
单例设计模式的作用:使一个类在内存中只存在一个对象。
用代码实现单例设计模式需要做三部:
a)将构造函数初始化。
例:private Single(){}
b)在类中创建一个本类对象。
例:private staticSingle s= newSingle();
c)提供一个访问方法可以获取到该对象。
例:public staticSingle getInstance()
{
returns;
}
单例设计模式只是为了保证内存中的对象唯一,其他在类中该怎么描述吗,还是怎么描述。
单例设计模式有两种写法:
1)饿汉式:也就是刚三部中的示例语句。它的特点是先初始化对象。如:Single类一进内存,就已经创建好了对象。在实际开发中,出于安全考虑,建议使用饿汉式。
完整代码如下:
class Single
{
private static Single s=new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
2)懒汉式:它的特点对象是方法被调用时,才初始化,这也叫对象的延时加载。如:在以下完整代码中,Single类进内存,对象还没有存在,只有调用了getInstance()方法时,才创建对象。
完整代码如下:
class Single
{
private static Single s=null;
private Single(){}
public static Single getInstance()
{
if(s==null)
s=new Single();
return s;
}
}
三、面向对象——封装
1、封装的概念
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。封装即对要操作的实体进行隐藏,使原始功能对外不可见,通过其他对外提供的方法间接的操作真实的实体。
2、封装的实现原理
Java语言中为实现对实体的封装,可以对类内的成员进行私有化(private)声明,使其属性和功能对外不可见,然后为其提供对应的访问器,对原始被封装的实体进行操作。访问器有两种:
获取访问器:getXxx();
修改访问器: setXxx();
3、封装的标准实现
class Person{
private String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
封装通常是对程序变量进行,成员方法也可使用,但是通常意义不大。
boolean型数据由于仅存在两种取值,获取值得方法设置规则与其他类型有所不同,使用如下格式进行:
boolean gender;
public boolean isGender(){
return this.gender;
}
4、封装好处:
1、将变化隔离;
2、便于使用。
3、提高重用性。
4、提高安全性。
5、封装原则:
1、将不需要对外提供的内容都隐藏起来。
2、把属性都隐藏,提供公共方法对其访问。
3、private:关键字
1)用于修饰成员变量和成员方法。
2)被修饰的内容在其他类中是不可以被访问的。
注意:私有仅仅是封装的一种体现而已。