目录
面向对象思想
概述
面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。
区别
面向过程:强调步骤。
面向对象:强调对象。
特点
面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。 面向对象的语言中,包含了三大基本特征,即封装、继承和多态。
类和对象
类和方法声明
类声明:class 类名{ 类体 }
方法声明:返回类型 方法名(参数){ return 返回值;}
类体
类的目的是抽象出一类事物共有的属性和行为。
●变量的声明:用来存储属性的值(体现对象的属性)。
●方法的定义:方法可以对类中声明的变量进行操作,既给出算法。
成员变量和局部变量
成员变量的类型可以是JAVA 中向任何一种数据类型,包括基本类型:整型,浮点型、特型、逻辑类型、引用类型;数组、对象和接口。
成员变量和局部变量:
- 成员变量生命在类体中,在整个类内都有效。局部变量声明在方法中,从声明它的位置之后开始有效。
- 局部变量与成员变量的名字相同,那成员变量被隐藏,如果想使用则用this关键字。
- 成员变量有默认值,局部变量没有默认值。
Tips:对成员变量的操作只能放在方法中,方法使用各种语句对成员变量和局部变量进行操作。
方法
方法头 {
方法体的内容}
构造方法与对象的建造
构造方法
① 默认构造方法 : 类名() {执行语句;}
② 自定义构造方法:类名(参数) {执行语句;}
Tips:允许在一个类中编写若干个构造方法,但必须保证他们的参数不同。如果类中没有编写构造方法,系统会默认该类只有一个构造方法,该默认的构造方法无参,且方法体中没有语句。(如果类里定义了多个构造方法,那Java不提供默认构造方法)
创建对象
➊对象的声明
一般格式:
类的名字 对象名字;
❷为声明的对象分配变量
使用 new运算符和类的构造方法为声明的对象分配变量,即创建对象。
如果类中没有构造方法,系统会调用默认的构造方法,默认的构造方法是无参数的,且方法体中没有语句。
❸对象的内存模型
(1)声明对象的内存模型
(2)为对象分配变量后的内存模型
(3)创建多个不同的对象
使用对象
格式:
创建对象
类名 对象名 = new 类名();
使用对象访问类中的成员
对象名.成员变量; 对象名.成员方法();
➊对象操作自己流变量
❷对象调用类中的方法
❸体现封装
对象的引用和实体
(1)避免使用空对象。
(2)一个类的声明的两个对象如果具有相同的引用,二者就具备相同的变量。
(3)一个类的声明的两个对象如果具有相同的引用,二者就具备完全相同的实体,系统就会释放多余内存。
参数传值(不影响原件)
对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别。
参数类型:基本数据类型、引用类型。
可变参数(使用...表示)
对象的组合
- 组合与复用
如果一个对象a组合了对象b.那么对象a就可以委托对象b调用其方法组合的方式复用对象b的方法。
通过组合对象来复用方法有以下特点。
(1)通过组合对象来复用方法也称“黑盒”复用,因为当前对象只能委托所包含的对象调用其方法,这样一来,当前对象对所包含的对象的方法的细节(算法的细节)是一无所知的。
(2)当前对象随时可以更换所包含的对象,即对象与所包含的对象属于弱耦合关系。
- 类的关联关系和依赖关系的 UML图
➊关联关系
如果A类中的成员变量是用B类声明的对象,那么A和B的关系是关联关系,称A类的对象关联于B类的对象或A类的对象组合了B类的对象。
❷依赖关系
如果A类中某个方法的参数是用B类声明的对象或某个方法返回的数据类型是B类对象,那么A和B的关系是依赖关系,称A依赖于B。
实例成员与类成员
实例变量与类变量(static 修饰)
实例变量和类变量都属于成员变量,用关键字static修饰的称作类变量,否则称作实例变量。
实例变量和类变量的区别:
① 不同对象的实例变量互不相同。
② 所有对象共享类变量,当使用new运算符创建多个不同对象时,分配给这些对象的类变量占有相同一处内存。
③ 通过类名直接访问类变量,如果类没有创建对象,那类中的实例变量不会被分配内存,但类变量会被分配内存。
实例方法与类方法
用关键字static修饰的方法成为类方法,否则称作实例方法。
实例方法和类方法的区别:
① 实例方法中不仅可以操作实例变量,也可以操作类变量,而类方法中不可以操作实例变量。
② 可使用类名直接调用类方法。
方法重载(多态性)
方法名相同、参数个数不同或参数类型不同。(返回类型和参数名字不参与比较)
➊参数个数不同
❷参数个数相同,类型不同
this关键字
(1)构造方法中代表对象
(2)实例方法中代表当前对象
import语句(引入库/自定义中的的类)
① 用于引入包中的类和接口,写在package语句和类定义之间。
② 引入一个包中的全部类:import java.util.* 引入java.util包中的Date类:import java.util.Date
③ 如果没用import引入包中的类,也可以直接带着包名使用该类: java.util.Date date = new java.util.Date();
访问权限
public:“公共的”,被其修饰的类、属性和方法不仅可以跨类访问,而且允许跨包访问。
protected:“受保护的”,这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问的。
default:“包访问权限”,只对同包的类具有访问的权限,外包的所有类都不能访问。
private:“私有的”,被其修饰的属性及方法只能被该类的对象访问,其子类不能访问,更不允许跨包访问。
Tips:
➊不能用protected和private修饰类。
❷访问限制修饰符按访问权限从高到低的排列顺序是public(公有)、 protecte(保护)、友好的、private(私有)。
知识点小结
(1)类是组成Java源文件的基本元素,一个源文件是由若干个类组成的。
(2)类体可以有两种重要的成员:成员变量和方法。
(3)成员变量分为实例变量和类变量。类变量被该类的所有对象共享,不同对象的实例变量互不相同。
(4)除构造方法外,其他方法分为实例方法和类方法。类方法不仅可以由该类的对象调用,也可以用类名调用:而实例方法必须由对象来调用。
(5)实例方法既可以操作实例变量也可以操作类变量,当对象调用实例方法时,方法中的成员变量就是指分配给该对象的成员变量,其中的实例变量和其他对象的不相同,即占有不同的内存空间:而类变量和其他对象的相同,即占有相同的内存空间。类方法只能操作类变量,当对象调用类方法时,方法中的成员变量一定都是类变量,也就是说,该对象和所有的对象共享类变量。
(6)通过对象的组合可以实现方法复用。
(7)在编写Java源文件时,可以使用import语句引入有包名的类。
(8)对象访问自己的变量以及调用方法受访问权限的限制。
参考:
《Java2实用教程(第5版)》
https://blog.youkuaiyun.com/weixin_40909604/article/details/84997148
https://blog.youkuaiyun.com/Babybybybybyby/article/details/112470622