### 1.2 面向过程和面向对象的区别
分步骤,类似于公司的扁平化管理
侧重分模块,类似于公司的层级管理
面向对象是以功能划分的,而不是步骤划分
优点: 维护简单,可扩展性强,可重用性强
面向对象的耦合度较低,而面向过程的耦合度相对较高
对象:
代码角度: new的实例化某一个类的实例,封装特有的数据
数据角度: 封装数据和逻辑的一种方式
人类认知角度: 对象就是具体的个体,一切皆对象
设计角度: 从一个实际的实体抽象出某些属性的一种表示
概念/定义:
就是在我们的思想上对某种事物的唯一性标志,它描述了这一类事物的特性,是我们对客观事物描述的一个标准或者一个模板
类定义标准和模板,而对象就是符合这些标准的个体
我们在抽离某个概念,就能建立相关事物的类,一定通过这些类的属性来形成这个概念,然后通过这些属性就形成类,通过不同的属性值区分不同的对象,通过不同的属性区分不同的类
从类到对象的过程就可以理解为对成员变量赋值的过程
如何选择什么时候使用成员变量或者静态变量:
静态变量属于类级别的,对象无关,静态变量的属性和值所有对象都一致
成员变量是对象级别的,他们拥有相同的属性,但值可以不同也可以相同
堆内存
每个对象的内存空间分为3块
1 数据区域: 成员变量
2 头部: hash值
3 类型: 静态区类文件的空间引用
实例化过程/创建对象过程:
1 对应类载入静态区
2 new 堆内存创建内存空间,把类中的成员属性放入内存空间中
3 执行构造方法,对堆内存中的属性初始化,执行完弹栈
4 把堆内存的内存地址,返回调用处
跨平台,多线程,自动垃圾回收,面向对象
垃圾:没有更多引用指向该对象,该对象被视为垃圾对象,等待被回收
继承性,封装性,多态性
空指针是运行时异常,编译时不报错,一般因为程序员粗心导致
公共类
私有属性
getter和setter方法
构造方法
传值: 传递基本数据类型
传引用: 传递引用数据类型
编译器功能:
把Java文件编译成class文件
检查语法结构是否合法
帮我们把不规范的代码补齐,例如调用静态变量的时候我们一般不加类名访问,但是编译器会帮我们自动加上,如果我们在类中没有写构造方法,编译器自动补全构造方法
创建当前类的实例化对象,并初始化成员属性
[权限修饰] 类名(参数列表){方法体}
权限修饰: public private等等
如果我们不定义构造方法,则默认有一个公共的无参构造方法(public 类名(){})
一旦我们指定了构造方法,则默认的无参构造就没有了
所以一般我们需要指定构造方法时,要考虑再写一个无参构造
可以根据需求,编写多个构造方法,方法名相同,参数列表不同(参数个数和数据类型)
构造方法可以和成员方法重名.就根据返回值判断即可,因为构造方法没有返回值,连void都没有
this是每个对象中,保存自身内存地址的一个引用类型的成员变量
this就表示这个对象,this的类型就是当前类的类型
只能出现在成员方法和构造方法中,不能出现在静态方法中
区分同名的成员变量和局部变量 this.xxx = xxx;
用在构造方法中,重载调用当前类的其他构造方法(this(参数),必须写在构造方法第一行)
return this:返回当前对象的内存地址,做到链式调用
知识回顾:
用类名.静态变量区分同名的静态变量和局部变量
用this.成员变量区分同名的成员变量和局部变量
的成员变量和局部变量 this.xxx = xxx;
用在构造方法中,重载调用当前类的其他构造方法(this(参数),必须写在构造方法第一行)
return this:返回当前对象的内存地址,做到链式调用