1.什么是面向对象?
面向对象是一种编程的思想,把现实中事物转化成对象,万物皆对象
2.类和对象的关系
对象是实际中的事物,类用抽象的方式概括相似的对象,通过类来认识新的对象
类是抽象的,而对象是具体的实例
类是对象的模板,对象就是类的实例(实现)
3.怎么定义类(类的组成)?
3.1 属性 field (成员变量)
成员变量写在类里面,但是在方法外面
局部变量在方法里面,也可以方法的参数列表里
成员变量与局部变量的区别
* a. 位置不同
在类中位置不同
在内存中的位置不同,成员变量是在堆内存里面,局部变量是在栈内存
* b. 初始化值不同
成员变量有默认初始化值
局部变量没有默认初始化值
* c. 生命周期不同
局部变量跟随方法的加载而加载,方法使用完了,局部也就被释放掉了
成员变量随着对象创建而创建,随着对象对象的释放而被释放
3.2 方法 method (成员方法)
命名方法的格式:修饰符 返回值类型 方法名(参数列表){方法体}
方法重载:方法名相同,参数列表不同,与返回值无关
(参数列表不同):顺序,个数,类型
方法调用:方法名(实际参数),如果方法重载的话,调用方法的时候就会有选择性,根据实际参数的数据类型来选择调用哪个方法
*构造方法:构造方法是一种特殊的方法
* a. 没有返回值类型,没有具体的返回值return;
* b. 首字母可以大写,因为构造名字和类名相同;
* c. 就是一个构造方法在一个对象里面调用一次;
用来干嘛:给对象进行初始化赋值;
3.3 其他:代码块,静态代码块,内部类
4. 怎么创建对象
格式: 类名 对象名 = new 类名();
4.1对象的创建过程:
Student s = new Student();
1. 加载Student类
2. 声明一个Student类的引用s
3. 在堆内存里面创建对象(开辟内存空间)
4. 给对象里面的属性进行默认初始化
5. 属性显示初始化
6. 调用构造方法堆属性进行赋值,赋值完之后弹栈
7. 将内存地址赋值给s
4.2 匿名对象:
没有名字的对象
*应用场景:方法只使用一次的时候,用完即丢
把匿名对象当成实际参数传递
5.封装
5.1 封装概述
隐藏实现细节(方法体),隐藏属性(成员变量),只提供可外部访问的公共方法
5.2 封装好处
a. 节省代码
b. 提高安全性
c. 隐藏代码细节,仅提供外部访问方法
5.3 封装原则
* 把不需要公开的隐藏起来
* 把属性隐藏,实现细节隐藏
6.常见错误
6.1 NullPointerException
空指针异常
6.2 StackOverflowError
栈溢出异常
6.3 ArrayIndexOutOfBoundsException
数组下标超出了边界异常
6.4 IndexOutOfBoundsException
下标超出边界异常