在学习Java的过程中,面向对象的思维是贯穿整个Java体系的。要想透彻学习Java,就必须理解并且学习这个面向对象的思维,可谓是Java语言的核心和基础。根据视频学习中的知识点和对面向对象的理解,总结出以下一些内容。
ps.在学习面向对象之前,先来学习一下在Java中,参数传递的特点:
Java中的参数传递:在Java中,只有值传递;对于基础数据类型,传递的是实际参数的值,并不是实际参数本身;对于引用数据类型,传递的是地址值。
那么,在这样的规则下,就会出现以下两种情况:
A:基础数据类型,形式参数的改变,不会影响实际参数的值
B:引用数据类型,形式参数的改变,直接影响实际参数的值,这里相当于两个引用同时指向同一个对象。
一、理解面向对象
要想理解面向对象,首先要理解什么是面向过程。因为面向对象是相对于面向过程而言的。
面向过程:是以函数为基础,强调的是过程还有函数能实现什么样的功能。
面向对象:是以对象为基础,强调的是该对象所具有的属性和行为,还有该对象能实现的功能。
那么,面向对象都有哪些特点?
A:面向对象更符合人们的思考习惯;
B:面向对象将复杂的问题简单化;
C:面向对象使程序员从执行者转变为指挥者;
既然学习了面向对象,那么来谈谈什么是面向对象吧(公司一般都会面试到哦)
面向对象,是相对面向过程而言的。面向过程也是一种编程思想,是以函数为基础,强调的是过程和函数能实现的功能;而面向对象思想,是以对象为基础,强调的是对象所具有的属性和行为,以及对象能实现的功能。
面向对象有三大特点:
1、面向对象更符合人们的思考习惯;
2、面向对象将复杂的问题简单化;
3、面向对象使程序员从执行者转换成指挥者。
举个例子:就拿我们要烧水喝这件事来举例。
用面向对象思想来思考这件事:1、我们要去取水;2、然后去烧水;3、要计算烧水的时间,不要干烧;4、待水烧好,我们去盛水喝。。要完成喝水这件事,我们最少要通过以上4个步骤来完成。
然而用面向对象思想来重新思考这件事:我们要喝水,我只需要找一个或者创建一个对象来帮我们来完成烧水的过程,我们只管去盛烧好的水来喝。
步骤:1、找到一个饮水机,调用饮水机的烧水功能;2、我们去取烧开的水喝。
那么在面向对象思想里,我们要完成这件事,只需要做这两个步骤就可以。至于在烧水过程中,饮水机是如何运作的,我们不需要去知道,因为这些行为,饮水机内部最清楚如何实现,我们只管去调用功能,然后使用实现功能后的结果就行。
在现实生活中,如果用面向对象的思维来描述一个事件?
例:将一个大象放进冰箱
A:分析该需求中有哪些对象(名词提取法)
B:分析每个对象都能做什么(动词提取法)
C:分析各个对象之间的关系
D:分析完A后,把每一个对象都单独写成一个类。每个对象能做什么,那么就在该类中定义出对应的方法。以后在main()方法中,只有对象调用方法,没有逻辑语句。
二、类与对象的关系
以图为例:
类就相当于汽车的图纸
对象就相当于根据图纸造出来的每一个实实在在存在的汽车个体。
在Java中,类、对象、属性、行为学术词的解析:
A:类——是属性和行为的集合,是一个抽象的概念
B:对象——是该类中实实在在的一个个体,是类的具体实现
C:属性——就是成员变量(可以描述一个类的属性,不能描述一个特有的属性的,不应该定义来成员变量位置上)
D:行为——就是成员方法(能描述一个类应该具备的行为)
那么,该如何来描述一个学生类?
A:分析该事物所具有的属性和行为学生这类事物应该具有年龄属性,姓名属性等等;还应该具备学习的行为;
B:将这类属性定义成学生这类事物的成员变量
C:将行为定义成学生这类事物的成员方法
代码体现如下:
public class Student {
//定义学生的属性
String name;
int age;
//定义学生应该具备的行为
public void study(){
System.out.println("好好学习!");
}
}
如何使用学生类?
public class StudentTest{
public static void main(String[] args) {
//创建Student对象
Student s = new Student();
s.name="小苍";
s.age=20;
s.study();
}
}
三、什么时候将变量定义成成员变量
应用场景:
成员变量实际上就是该类的属性,只有能用于描述该类的属性,才能定义成变量,否则一律定义成局部变量
成员变量和局部变量的区别:(定义位置、初始化值、存储位置)
定义位置:成员变量定义在类中方法外;局部变量定义在方法中
初始化值:成员变量有默认的初始化值;局部变量没有默认初始化值
内存中存储位置:成员变量存储在堆内存中,随着类的存在而存在;局部变量存储在栈内存中,依托于方法而存在
变量的使用规则:
先在局部位置上找,如果有则使用,否则就在成员位置上找,有则使用,如果还是没有,那么就会在父类中寻找,如果父类中也没有定义该变量,编译会报错。
四、匿名对象
概述:匿名对象就是指没有名字的对象。
应用场景:
1、当对象只使用一次,或者对对象中的方法只调用一次
2、匿名对象可以作为实际参数进行传递
ps 方法中的形式参数,不仅可以传入4类8种的基本数据类型,还可以传入引用数据类型