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