面向对象
面向对象 是一种编程思想,其本身与编程语言无关。
编程思想是我们在编写程序 、 分析问题域的时候采用的一种思维方式。
在编程基础,采用的是“面向过程”的编程思想。
OOA - 面向对象分析
OOD - 面向对象设计
OOP - 面向对象编程
OOT - 面向对象测试
Java 只是在它的语法设计上直接引入了面向对象的概念,在语句层面上能够表现面向对象的各种特征。
C++是第一门在语法中引入OO思想的语言,但是由于它当时的设计还需要兼顾C的特性,
导致它并不能算为纯粹的面向对象编程语言。
Java是第一门纯面向对象对象编程语言,它的整个设计完全是基于面向对象中所需要用到的概念的。
面向对象的设计方案的核心:
1、从问题域场景中“找对象”,找出有哪些对象之外,还要找出这些对象有哪些属性、
哪些行为。
属性 --- 对象身上的值数据。 名词
行为 --- 对象身上的功能。 动词或动宾
结论:
1、万物皆对象;
2、对象因关注而产生;
3、在一个问题域当中我们会找到大量的同类型对象,根据类型进行编码。
这就是“类”的概念。
对象 - 是具体的实际的存在,是我们真正要去操作的东西。
类 - 是通过人脑的抽取,把一系列具有相同属性和行为的对象进行归纳,形成的定义
关键点:
1、类是什么?类就是一种数据类型,这种数据类型可以装很多数据值(姓名、年龄、身高、体
重......),同时还可以定义他们能够做什么事情(行为:上课、跑步、吃饭、休息......)。
String[]usernames
String[]passwords
double[]accounts
2、定义好的类,是不能直接使用的。类是用来产生对象的,具体要用是用对象。
类相当于是一个“模版”,通过这个模版产生出具有相同属性和相同行为的对象。
注意:
相同属性 指的是都有这个属性,但是值可以不一样。
面向对象的情况下,分析和编码的方式步骤:
1、从整个问题域当中找对象,包括对象的属性和行为。
2、编码的时候,先定义类
然后通过类来产生对象,最后使用对象来产生效果。
定义类的语法
创建一个Java文件
public class 类名{
public 类型 属性1;
public 类型 属性2;
public final 类型 属性3 = 值;
public 返回类型 方法名(形参列表){
实现指令
}
}
通过类产生对象 -- new 关键字产生对象
语法: new 类名()
类名 对象名 --- 这句代码不是产生对象,而只产生一个存对象引用的变量空间。
类名 对象名 = new 类名();
表示这个对象名里面的引用指向new出来的这个对象。 说明:类类型是引用数据类型。
操作对象 -- 点操作符
对象名通过点操作符来访问它指向的对象的内部信息,包括该对象的属性或方法。
销毁对象
用new关键字产生了对象,但对象产生在内存中的具体位置,我们是不知道的,所以我们必
须用一个引用变量指向它。然后通过这个引用变量来使用它。
假如有一个对象是没有引用指向的,那么在程序的后续代码中我们将找不到它,也没有办法
使用它。这个时候这个对象就没有意义了,这个时候这个对象就会被销毁掉。
对象的销毁在Java当中是不需要程序员用代码去销毁的,而是由JVM(java虚拟机)自己来
做。它有一个非常著名的机制 --- 垃圾回收机制(GC),这个机制会随时检查内存,一旦
发现某个对象没有引用指向了,那么这个对象就会纳入到它的回收范围中。
这个垃圾回收是自动运行的,它不受程序员的控制。我们不知道垃圾回收是在什么时候发现
没有引用指向的对象,我们也不知道它是不是一旦发现就马上回收,这些都由它内部算法决
定,你只需要信任即可。
程序员在代码级别对垃圾回收的控制,只有一条指令:System.gc();这条指令的任务就是
召唤垃圾回收机制,让它来清理一次。很有意思的是,这条被执行的时候是否马上执行垃圾
回收,是否马上清理干净,都不一定,还是由GC内部算法决定,只能起到喊它一声的作用。
1、销毁对象不是由程序员来完成,而是由GC来完成;
2、没有引用指向的对象会被视为垃圾;
3、GC什么时候回收,回收哪些没有引用指向的对象,都由它自身算法决定;
4、System.gc()方法是用来召唤GC,但是什么时候收,如何收,仍然由GC自己决定。