目录
前言
面向过程与面向对象
举例:打扫教室的卫生
对比小结
类和对象
类
对象(Object)
构造方法
成员变量和局部变量的区别
前言
Java不同于C语言的面向过程编程,他是一门面向对象的编程语言。那么问题就来了,面向过程是什么?面向对象是什么?难道面向对象编程是要对着对象才能编程么,那单身狗怎么办(比如我)。所以当然不是这样的,下面让我们来认识一下这两种编程思想。
面向过程与面向对象
面向过程(POP)这种编程思想最具代表性的语言自然就是经久不衰的---C语言。C语言一直都是一门热门的编程语言,除了能对地址操作,无条件相信程序员等特点,面向过程的思想也是它的一大特点。所谓面向过程,就是指对给定需要达到的目标先想好步骤,每一步该做什么,该怎么做,逐步实现的方式。
面向对象(OOP)的编程语言之一---Java。Java语言近年来深受欢迎,而面向对象这种编程思想也是越来越多的人为之称赞。面向对象的思考方式旨在把一切东西都当作一个独立的对象,可以对这个对象进行操作,当要达成目标时,先思考目标的载体是什么,或者说,为了达成目标需要用到什么工具“桌子,椅子,地板,马路等等”,目标本身是什么“学生,房子,工人,猫,狗等等”,只要需要用到的,这些都是能成为对象的东西。
我们可以通过一个对比来更好的理解两种编程思想
举例:打扫教室的卫生
面向过程:思考打扫教室卫生的步骤, 椅子放到桌子上 - > 扫地上垃圾 -> 拖地 -> 椅子放下来 -> 擦窗户 -> 擦桌椅
安排任务: 谁做什么
面向对象:思考打扫教室卫生有哪些任务:地面,桌椅,门窗
安排: 谁适合做对应的任务。 地面劳动强度大,派强壮的同学; 擦桌椅需要细心,派女生做;门窗比较高,派高个子同学
特点:找的人具备业务能力,不需要教他,安排下去基本就不用管,同时每个同学只需要负责属于他的任务。
面向过程中的“谁做什么”就比如C语言的函数调用,需要什么功能就调用对应的函数
int main()
{
putchar(getchar());
putchar(getchar());
putchar(getchar());
putchar('\n');
}
putchar()函数输出字符,getchar()函数获取字符,每个函数完成一项功能。
面向对象中的“各位同学”就是各个对象,他们有自己的属性:高,矮,男,女等等。根据不同的属性分配不同的负责任务,高个子同学打扫窗子,需要完成清洗,擦拭等在一项任务中不同的工作。
对比小结
面向过程:亲力亲为,侧重于分析和处理步骤
面向对象:所有的事情交给相应的对象(具备能力)去完成,侧重于分析完成任务需要哪些(什么样)对象
通过对比我们可以发现,一个对象比一个函数做的事情要多,实现的功能更多。但就跟单个函数虽然功能单一却有很多个函数完成不同功能一样,对象同样也有很多个,那是什么来实现许多相似但不相同的对象呢?这就是类。
类和对象
类
具有相同的属性和行为的对象的集合,称为"一类"。类也可以称为模板。
上文有提到因为“各位同学”有不同的属性所以分配不同的任务,但他们本质都是‘人’,所以可以归为一类,造成他们不同的叫做属性和方法。
属性:描述对象的特征,在程序中,通过定义变量的形式表现属性。
方法:方法就是用来完成解决某件事情或实现某个功能的办法。
在程序中,使用关键字class来定义一个类,再在类中定义各种属性和方法
public class GuessNum {
int initNum;
int givenNum;
void generateNum(){
double random = Math.random();
initNum = (int) (random * 100);
}
}
GuessNum就是类名,initNum,givenNum是属性,GenerateNum()是一个方法。
对象(Object)
是类的一个实例化,是类的具体表现。将抽象的集合类通过关键字new变成一个具体的实例,这个对象有类中的属性和方法,但具体的属性是什么每个对象是可以更改的,是不一样的。
GuessNum guessNum = new GuessNum();
构造方法
在类中有一个特殊的方法---构造方法
构造方法有如下特征:
- 方法名跟类名相同
- 没有返回值(连void都没有,没有返回类型)
- 可以有参数,也可以没有参数
- 如果一个类,没有写构造方法,默认提供一个无参数的构造方法
- 一个类可以有多个构造方法,每个构造方法的参数个数可以不一样
- 一旦一个类写了构造方法,默认的无参的构造方法不再生效
- 构造方法不能通过对象直接调用,在实例化的时候自动调用
默认无参构造方法如下 :
public Car() {
}
//空构造方法new对象
Car car = new Car();
有参构造方法如下:
//构造方法的作用给属性赋初始值
public Car(String brand, String color, int seat) {
// this代表当前对象
this.brand = brand;
this.color = color;
this.seat = seat;
}
//有参数的构造方法new对象
Car car1 = new Car("奔驰", "黑色", 5);
成员变量和局部变量的区别
成员变量:1.定义在类中的变量,称为成员变量。2.它跟数组元素一样,有默认, 所以成员变量可以不初始化直接使用。3.作用域是整个类。
局部变量:1.定义在方法中的变量,称为局部变量。2.局部变量没有默认值,所以必须要先初始化,再使用。3.局部的作用域在它所在的大括号内有效。
生命周期:对象被垃圾回收时,成员变量就消失 ;方法执行完成后,局部变量就消失 。