面向对象编程
面向对象概述
面向过程 & 面向对象
对于描述复杂的事物.为了从宏观上把握、从整体分析,使用面向对象的思想;在微观操作的实现上,采用面向过程的思想
- 面向过程思想
- 顺序结构
- 适合处理简单问题
- 面向对象思想
- 分类的思维模式
面向对象编程(Object- Oriented Programming, OOP):
- 本质:以类的方式组织代码,以对象的组织封装数据
- 思想:抽象
- 特性:封装、继承、多态
- 从分析问题的角度:先有对象,后有类;对象,是具体的事物;类,是对对象的抽象
- 从编写代码的角度:先有类,后有对象;类,是对象的模板
方法回顾
方法的定义
修饰符 返回值类型 方法名(参数列表) {
方法体
...
return 返回值;
}
方法的调用
- 静态方法:加
static
修饰符的方法 - 和类一起加载
- 可以直接通过类名调用:
Demo.test();
- 非静态方法
- 在类实例化之后才存在
- 要先实例化类,才能调用
Method method = new Method();
method.say("june");
值传递
Java为值传递
值传递是对基本类型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
引用传递
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身
str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容.
类和对象的关系
- 类是一种抽象的数据类型,是对一类事物整体描述,并不代表某一具体事物
- 对象是类抽象概念的具体实例,能体现出具体的功能和属性
对象的创建分析
使用new关键字创建对象
在使用new关键字创建对象时,除了会分配内存空间外,还会给创建好的对象进行默认初始化,以及对类中构造器的调用,
构造器
类中的构造器也称为构造方法,是在创建对象时调用的.
查看空类的class文件(反编译代码),发现默认有一个空的方法:
public class Person {
public Person() {
}
}
这个与类同名的方法就是构造器,观察发现构造器有2个特点:
- 必须和类名相同
- 没有返回类型,也不能写void
构造器的作用:
- 使用
new
关键字,本质为调用构造器 - 构造器用于初始化值
构造器分为:
- 无参构造:默认为无参空构造器
- 有参构造:若定义了有参构造,无参就必须显式定义
this
关键字用于表示当前对象
IDEA快速生成构造器:Win: alt + Inset
;Mac:Command + N
内存分析
- 堆内存空间(Heap):保存的是对象中具体的属性信息;
- 栈内存空间(Stack):是保存的堆内存的地址数值
- 方法区:存放所有的类,及其变量和方法,以及被
static
修饰的变量或方法(随类一起加载)
一个对象,调用一个方法
栈中存放引用变量的地址信息,变量p指向堆内存中分配的空间
方法在栈中运行,遵循"先进后出,后进先出"的原则,变量p通过地址信息,寻找堆内存中的方法信息.
两个对象,调用同一方法
类的方法和属性变量都存放在方法区中,对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样不论多少个对象,方法信息只保存一份,节约内存空间
一个对象(引用),作为参数传递到方法
引用类型作为参数,传递的是地址值