面向对象的思想概述
程序员从执行者转化成了指挥者。
完成需求时:
- 先去找具有所需功能的对象来用。
- 如果该对象不存在,那么创建一个具有所需功能的对象。
- 这样简化开发并提高复用。
类(class)和对象(object)是面向对象的核心概念。
- 类是对一类事物描述,是抽象的、概念上的定义
- 对象是实际存在的该类事物的每个个体,因而也称实例(instance)。
- “万事万物皆对象”
- 可以理解为:类 = 汽车设计图;对象 = 实实在在的汽车
- 面向对象程序设计的重点是类的设计
- 定义类其实是定义类中的成员(成员变量和成员方法)
面向对象(OOP)与面向过程
- 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为。面向对象,将功能封装进对象,强调具备了功能的对象。
- 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。
面向对象的三大特征
-
封装 (Encapsulation)
-
继承 (Inheritance)
-
多态 (Polymorphism)
java类及类的成员
现实世界万事万物是由分子、原子构成的。同理,Java代码世界是由诸多个不同功能的类构成的。
现实世界中的分子、原子又是由什么构成的呢?原子核、电子!那么,Java中用类class来描述事物也是如此
- 属 性:对应类中的成员变量
- 行 为:对应类中的成员方法
属性
成员变量 vs 局部变量
相同点:
-
遵循变量声明的格式: 数据类型 变量名 = 初始化值
- 都有作用域
- 不同点:
- 声明的位置的不同 :成员变量:声明在类里,方法外
- 局部变量:声明在方法内,方法的形参部分,代码块内
- 成员变量的修饰符有四个:public private protected
- 局部变量没有修饰符,与所在的方法修饰符相同。
- 初始化值:一定会有初始化值。
- 成员变量:如果在声明的时候,不显式的赋值,那么不同数据类型会有不同的默认初始化值。
byte short int long ==>0
float double ==>0.0
char ==>空格
boolean ==>false
引用类型变量==>null
- 局部变量:一定要显式的赋值。(局部变量没有默认初始化值)
- 二者在内存中存放的位置不同:成员变量存在于堆空间中;局部变量:栈空间中
总结:关于变量的分类:
1)按照数据类型的不同:基本数据类型(8种) & 引用数据类型
2)按照声明的位置的不同:成员变量 & 局部变量
方法
提供某种功能的实现
1)实例:
public void eat(){//方法体}
public String getName(){}
public void setName(String n){}
格式:权限修饰符 返回值类型(void:无返回值/具体的返回值) 方法名(形参){}
2)关于返回值类型:void:表明此方法不需要返回值
有返回值的方法:在方法的最后一定有return + 返回值类型对应的变量
3)方法内可以调用本类的其他方法或属性,但是不能在方法内再定义方法!
对象的产生
class Person {
int age;void shout() {
System.out.println(“oh, my god !I am ”+age);
}
}
Person p1 = new Person();
对象的使用
class TestPerson {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
p1.age = -30;
p1.shout();
p2.shout();
}
}
匿名对象
我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。
new Date(System.currentTimeMillis()
- 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
- 我们经常将匿名对象作为实参传递给一个方法调用。
面向对象编程的思想的落地
1)设计并创建类及类的成分
2)实例化类的对象
3)通过“对象.属性”或"对象.方法"的形式完成某项功能
类的初始化的内存解析
内存划分的结构:
栈(stack):局部变量 、对象的引用名、数组的引用名
堆(heap):new 出来的“东西”(如:对象的实体,数组的实体),含成员变量
方法区:含字符串常量
静态域:声明为static的变量
引用自:https://blog.csdn.net/abelboy/article/details/83689991