面向对象
一、面向对象和面向过程
1、面向对象—> 一种看待问题、解决问题的思维方式,强调的是完成功能的对象
面向过程—> 强调的是功能行为
2、对象:具有特定功能、能够解决特定问题的实体(实例)
类:若干个具有相同特征和行为的对象的组合的集合(抽象)
总结:类是对象的集合,对象是类的个体
3、识别类的小技巧:一般来说,名词
都是类(名词提炼法
)
类与对象详述
1、类的设计(会)
- 从若干个具有相同类型的特征和行为的对象中,提取出这些相同的特征和行为,设计为一个类。
- 类中定义所有的对象共有的特征和行为,其中,特征用
属性
表示,行为用方法
表示。 - 所谓属性,其实就是定义在类中的一个全局变量。
- 使用关键字**
class
**来定义类。
-
语法:
[ 访问权限修饰符 ] class 类名 {
// 类体
// 属性: 描述所有对象共有的特征。
// 方法: 描述所有对象共有的行为。
}
-
类设计注意事项:
- 类名:是一个
标识符
,遵循大驼峰
命名法。 - 一个Java文件在可以写多个类,但是只有与文件名相同的类,可以使用
public
修饰。 - 每一个类在遍以后都会生成一个
.class字节码文件
,以内的名字命名。
- 类名:是一个
2、对象的实例化(会)
1、实例化
-
实例化对象,其实就是从类中找到一个实体。
-
使用关键字
new
进行实例化。e.g. Person zhangsan = new Person();
2、对象的内存分析(了解)
凡是遇到new
,都表示在堆上
开辟空间。因此,对象的实例化,也是在堆上开辟空间。
3、匿名对象(会)
-
定义:匿名对象就是没有名字的对象。
因为没有名字,所以当我们使用匿名对象是实现功能时,
只能在创建对象的这个时刻使用一次
。一旦使用完毕,这个对象就无法再次调用,变成了垃圾。系统会通过垃圾回收机制
在某个时刻进行内存回收。 -
**作用:**灵活使用内存,节省内存
-
使用场景:
- 用作方法参数;
- 用作匿名内部类。
-
多引用指向同一个对象(了解)
原理说明:对象和数组都是引用数据类型,都是通过
栈区
中的引用(变量
)保存堆区
中的对象地址
。所以当我们让多个引用保存同一个对象的地址,通过任何一个变量都可以访问这个对象(址传递)。
4、类中的成员访问(会)
- 成员分类:
- 使用关键字
static
修饰的属性、方法,被称为静态属性、静态方法
。 没有
使用关键字static
修饰的属性、方法,被称为非静态属性、非静态方法,又被称为是你属性、实例方法。
- 使用关键字
- 空间分配:
- 静态的成员是属于类的,在内第一次被加载到内存中的时候,就已经分配空间了。
非静态的成员是属于对象的,在实例化对象的时候才会分配空间。
- 访问;
- 静态成员需要使用类来访问,非静态成员需要使用对象访问;
静态方法
中可以直接访问本类中的静态成员,不能直接访问本类中的非静态成员;
- 非静态方法中可以直接访问本类中的静态成员,也可以直接访问本类中的非静态成员。
- 成员变量的理解
- 成员变量的特点:(这里特指非静态成员)
- 在创建对象的时候会赋默认值;
- 可以在类中定义变量的时候,直接赋值;
- 非静态的成员变量可以在除了static修饰的方法外任何地方使用。
成员变量和局部变量的区别:
- 作用域: 成员变量是整个对象;局部变量是从定义开始到所在的方法/if /for结束。
- **默认值:**成员变量会有默认值;局部变量没有默认值,要想使用必须先赋值。
- **释放机制:**成员变量跟对象保持一致,通过垃圾回收机制回收:局部变量使用完立即释放。
- 存放的位置:成员变量放在堆区中的对象中;局部变量放在栈区中的方法中。
- 成员变量的特点:(这里特指非静态成员)
5、static (会)
-
定义:关键字,被static修饰的成员就变成了静态的,具有保值功能。
-
static的作用(会)
-
用于保值
static int a = 3; 只要我们不手动改变a的值,到程序结束前a的值会一直存在。
-
用于工具类的创建
工具类内部都是使用的静态方法,这样就不需要在调用方法时再创建工具对象,节省内存,提高效率。
-
-
类是一种自定义的数据类型(了解)
- 类,是一种自定义的引用数据类型,可以作用于属性、方法参数、返回值…
注意:
一个类型一旦创建出来,就是一个独立的数据类型,在它可见的范围内都是可以使用的,包括自己的内部。
6、this关键字(会)
- 概念:是一种
引用数据类型
,本身是一个关键字
,用在类的实例方法或者构造方法中
,代表的是当前的对象
,保存的是当前对象的地址
。 - 场景:当我们想在当前类的内部拿到当前对象的引用时,可以使用
this
。 - this的功能总结:
用来区分成员变量和局部变量
。可以在构造方法内部调用其他重载的构造方法
,提高代码的复用性,简化代码。
- this关键字的省略
- 当需要访问的属性与局部变量
没有重名
的时候,this关键字可以写,也可以不写。
- 当需要访问的属性与局部变量
重名
的时候,this关键字必须写,不可以省略。
- 当需要访问的属性与局部变量
7、构造方法(会)
-
概念:构造方法,其实也是一个方法。用于实例化对象,在实例化对象的时候调用。
-
和普通的方法的区别:
构造方法的名字,必须和类名一致。
构造方法没有返回值,返回值类型部分不用写。
-
构造方法的意义:
一般情况下,使用构造方法,是
为了在实例化对象的同时,给一些属性进行初始化赋值。