面向对象编程
1.结构化开发(面向过程)
面向功能划分的软件结构
从上到下,按步执行
最小的粒度是方法
步骤繁琐,制约了软件的可维护性和可扩展性
代码一次成型,后续修改非常麻烦
2.面向对象开发
把软件系统看成各种对象的集合
系统结构稳定
子系统相对独立
软件的可维护性,可扩展性强
面向过程编程关注点在于每一个细节,每一步的具体操作。
面向对象关注点在于整个事件的参与对象,将系统中的
参与者全部看成模块化的对象。
汽车 司机 北京 天津
面向对象程序设计(Object Oriented Programming)OOP
就是把世间万物都看成一个个对象,
OOP是一种编程思想,思维模式,将程序中的所有参与者
模块化为对象,然后通过各种对象之间的相互作用关系来
完成程序的需求。
类和对象
类是对象的模版,抽象化的对象 Scanner工具类
Scanner scanner = new Scanner(System.in);
scanner.next();
Scanner scanner2 = new Scanner(System.in);
对象是类的具体实例化,具体化的类 scanner对象
程序中区分不同的个体,或者如何描述个体的特征
属性:对象具有的各种特征
每个对象的每个属性都拥有特定值
张三 李四
属性:name,birthday,height,weight
属性是描述对象的特征的,是静态的
车的品牌,颜色,排量都是静态的,是属性
让车跑到北京,是动态的功能,程序中用方法来描述
对象执行的操作,即其动态功能。
程序中使用方法来描述对象的动态功能,使用属性
来描述对象的静态特征,所以,对象是由一组属性和
方法构成,用来描述客观存在的一个实体。
与对象密不可分的另外一个概念是类。
类:具有相同属性和方法的一组对象的集合,类是对象
的抽象化描述,对象是类的具体实例。
对象和类是面向对象编程的核心。
所有的Java程序都是以类class为组织单元,一个Java文件就是一个类
真正执行程序是通过类的具体化对象来完成的。
具体的开发步骤:
1.定义类
public class 类名(首字母大写){
访问权限修饰符(public) 数据类型 属性名;
访问权限修饰符(public) 数据类型 属性名;
...
访问权限修饰符 返回值类型 方法名(参数列表){
方法体
}
...
}
2.根据类来创建对象
通过调用类的构造函数/构造方法来创建
每一个类都有一个默认的无参构造方法,该方法不需要创建,由类自动生成。
构造方法语法:
访问权限修饰符 方法名/必须跟类名一模一样(参数列表){
方法体
}
有参构造需要手动创建。
无参构造只创建对象,不完成对属性的赋值,需要在外部手动进行赋值。
有参构造边创建对象边完成对属性的赋值。
每个类都会有一个默认的无参构造,
如果手动在类中创建一个有参构造,会将默认的无参构造抹掉,如果一个类中有参和无参都需要,那么就必须手动将两种构造函数进行创建。
编写学员类,创建学员对象并输出相关信息
编写教师类,创建教师对象并输出相关信息
面向对象编程思想
Java:类和对象
对象是程序中的每一个参与角色的具体的模块化,可以用来表示世间万物中任何一个个体。
类是对象的模版,具有相同属性和方法的一组对象的集合,对象的抽象化的描述。
对象是类的具体化的描述
由类产生对象
类是构成Java程序的单位,Java程序通过类来组织其结构,是指在开发期间,静态。
对象是Java程序在运行时的单位,运行期间的Java程序是通过多个对象之间的相互作用关系来完成需求,动态。
开发代码时,是通过编写类来完成程序的需求。
程序在运行期:1.将编写好的类加载到JVM中,有了模版。
2.根据需求通过模版(类)来创建对应的对象,完成业务需求。
类是静态的,写完之后就存在于硬盘中。
对象是动态的,随着程序的运行而创建,同时随着程序的关闭而销毁。
JVM中类只有一份,对象有多份。
类的静态特征通过属性来描述
类的动态功能通过方法来描述
null指空指针,用来描述内存地址的一个值,指空,不存在。
垃圾回收机制GC:是一个独立的巡查线程,GC是一个定时任务,隔一段时间执行一次。
GC,main
应用类型的变量可以赋值null,
基本数据类型的变量不能赋null
基本数据在栈内存中开辟空间,同时直接将具体数值保存在栈中
引用类型在栈中开辟空间,同时在堆中创建对象,将堆内存的地址保存在栈中
虽然属性和方法是在类中定义的,
但是如果需要访问属性或者调用方法,必须通过
对象来完成,不能通过类来完成。
方法调用需要注意的事项:
参数的数据类型,顺序必须与类中方法定义时的列表一致。
基本数据类型传递是值,在方法内部改变变量的值,
并不会影响到外部调用该方法时传入的变量值。
引用数据类型传递是地址
一个景区根据游人的年龄收取不同价格的门票。
编写游人类,根据年龄段决定门票价格并输出。
5位学员参加了Java知识竞赛,输出竞赛的平均成绩和最高成绩,定义一个工具类来完成。
程序开发步骤:
1.需求分析
2.定义类(对象的模版)
3.创建对象,通过调用类的构造方法/函数来创建对象,
构造方法:有参构造和无参构造(每个类都有一个默认的无参构造)
无参构造只创建对象,不对对象的属性进行赋值。
有参构造创建对象,并且对对象的属性进行赋值。
this关键字:指当前类
this可以来修饰类中的属性和方法,只能在方法中使用。
this.属性名
this.方法名(参数)
this(参数):只能在构造方法中使用,不能在普通方法中使用,并且必须写在构造方法的第一行。
通常情况下,在类的方法中的具体代码,this可加可不加。
当方法中的参数和属性名一致时,通过参数名无法区分参数和属性时,需要通过this来修饰属性。
当方法中的参数和属性名不一致时,通过参数名可以区分参数和属性时,不需要加this。
用来描述现实生活中的具体事物的类我们把它叫做实体类,
entity
递归:方法自己调自己
static:静态
方法重载:
1.同一个类中
2.方法名相同
3.参数列表不同(个数或者数据类型不同)
4.与返回值,访问权限修饰符无关
方法的定义:动态参数,参数列表中,数据类型后添加...
动态参数实质上是一个数组,当外部在调用方法时,
根据外部传入的参数个数来动态生成一个数组,记录所有的参数。
成员变量和局部变量
成员变量:定义在类中,方法体外的变量,属性
局部变量:定义在方法体中的变量
区别:
1.作用域不同:变量的可用范围
局部变量的作用域仅限于定义它的方法,出了方法就无法访问。
成员变量的作用域在整个类中都是可见的。
2.初始值不同
属性/成员变量都有一个初始值,初始值根据属性的数据类型来决定,
基本数据类型:byte int short long:0
double float:0.0
char:' '
boolean:false
引用类型:null(描述的是内存地址信息,表示空,不存在的地址)
局部变量没有初始值
同一个方法中,不允许有同名的局部变量。
在不同的方法中,可以存在同名的局部变量。
在同一个方法中,存在同名的局部变量和成员变量时,局部变量的优先级更高。