面向对象
概念
什么是面向对象
一切看待问题的思维方式,着眼于找到一个特殊功能的具体的个体,然后委托这个个体去做某些事情,我们称之为“对象“;
1、在java中,把所有的一切事物都看作对象,一种是可见的,一种是虚拟的物体
2、面向过程编程和面向对象编程的区别是什么?
面向过程编程主要描述一件事或者一个过程的执行
面向对象编程主要用语言描述将现实世界中存在的事物,或者规律。无限接近机器语言。
3、对象:在java 中所有对象都是Object,对象包含哪些属性和特征?
对象的属性,属性是区别于其他事物的特征。
对象的行为特征,所有的对象都有自己的属性和行为,两者加起来是区别于其他事物的标准。
4、在java用什么来描述一个类?
类和对象的关系 Class 和 Object的关系
类的概念:类是所有对象抽象概念,对象类的具体体现(实体),对象称为类的具体实例。
类是抽象的,对象是具体的
5、类——>实例化对象
对象实例化:new 关键字 实例化对象或者创造一个对象
对象和对象引用的关系 电视机和遥控器的关系,拿到了遥控器就可以控制电视机
类名 变量名/对象的引用 关键字 构造方法
在new一个对象的过程中,计算机做了什么?
在内存中申请一片独立的空间,表示可以使用独立空间来运行程序
person-> | 实体 | ---变量—----> | 地址 |
int——> | | | |
. | | | |
. | | | |
. | | | |
float--> | | | |
6、面向对象的三大特性:
封装:隐藏实现的细节、对外提供公共的访问方法(接口)
好处:从代码设计者的角度,一个是安全性,防止代码被修改破 坏。从调用者的角度,忽略实现的细节,只关注功能调用。
如何设计封装:成员变量尽量私有化,对外提供公有的方法
继承:(后续)
多态:(后续)
7、package 包的概念引入:
对所有的class进行分类:以方便管理。包命名规则:小写字母,一般都是四级目录
com.公司名.项目名.模块名称
如何编译包
javac -d . 类名.java(注意空格)
如何执行:
Java 全路径(包名/../../类名)
cd 到指定的目录去执行java 命令
8、构造方法:什么是构造方法?
构造方法是一个类在初始化时自带的特征,改变不了。
jvm在构建一个类的时候,默认会构建一个默认的构造方法
javap 全路径 xx
构造方法的特点:
公有的、和类名相同、没有返回值
构造方法的用处在哪里?
初始化成员变量(this 本类对象的引用(拿到地址))
构造方法越多,代表在这个类初始化的时候,形态越多,功能越强大。
构造方法的重载(overload):
参数类型不同,参数个数不同,参数次序不同 ,都能构成重载。仅限于本类。
9、类的成员方法:
方法的概念:方法是一个类接受外部信息的一种渠道。
方法在一个类中专门解决业务逻辑的。
public 返回值 方法名(参数列表){
//return 返回值;
}
10、方法参数的传递:传值或者传递引用
方法的参数传递只能传递两种类型:
如果要是传值,就是一个具体的值,
如果要传递引用,那么传递的该对象的地址
11、static 用来修饰静态的方法、静态代码模块、成员变量
如果使用static所修饰的方法或者变量,最标准的方法:可以使用类名直接调用,不需要new对象来调用,可以使用类名直接调用的,不需要new对象。
static 修饰的变量在内存中只有唯一的一个地址,
使用场景:只有在工具类中才可以使用,该方法被频繁的调用,确实节省内存空间
12、类的继承 extends
类与类的关系有哪些?
第一种是关联(has-a)关系(聚合)、第二种是继承(is-a)关系
如果是关联关系,那么就是类调用类的关系
所有的对象都是继承Object类,java是单根继承的特点
单根继承的好处是什么?不好的地方?
子类可以调用父类的方法,减少代码的冗余度。
在父类的角度考虑问题,继承可以延伸父类的功能(扩大功能),减少代码冗余度
保证纯正的血统
多继承的好处是什么?
如果子类 继承父类,子类可以调用父类的公有方法,不能调用父类的私有方法
子类调用父类的时候,父类的构造方法会被调用。
super关键字只能存在子类中,主要在子类的方法中调用父类的方法,包括构造方法
super可以在子类的构造方法中可以调用父类的构造方法super(),默认调用无参的构造函数,super可以指定
重写(override)子类覆盖父类的同名方法,好处在于扩充子类的方法功能。
里氏替换原则:如果b类c类具有相同的属性和方法,就应该把相同的属性和方法提取到a类中,让b类和c类继承a类
13、final关键字
表示最终的,如果用final所修饰的变量,称为常量(不能被改变或者赋 值),如果final修饰一个方法,那么该方法在子类中不能被重写,如果 final修饰一个类,那么这个类不能被继承。
14、抽象类 abstract关键字
抽象类和普通类的区别是什么?
抽象类是不能被实例化的,也就说不能使用new 关键字,普通的类是可以 实例化的
如果一个类有抽象方法,那么这个类必然是抽象的,反之抽象类不一定有 抽象方法。
定义一个抽象类的用途在哪里?
抽象的概念是不需要实际去做的,但是在实际应用中有两种场景的用途
1、父类某一个功能或者方法,需要子类强行去重写的那么该方法必须是 抽象类。
2、父类对于某一个方法,无法预知子类会怎么实现,那么该方法必须是 抽象的。
抽象类在继承关系图中起到什么作用?
承上启下的作用
15、接口 interface
接口的概念 : 接口是一种标准,所以实现该接口的子类都要实现这个标 准。
接口也是一种契约,所有实现该接口的子类都要实现该契约的条款。
接口也是一种身份特征,所有的子类都具有该身份特征。
接口内的方法都是公有的,接口里面的所有方法都是抽象的、公有的。
接口可以继承吗?
接口可以继承接口。
16、多态
什么事多态?一个事物在不同的条件下,所表现的多种形态。
在开发中使用多态的场景,主要是使用在方法的参数的传递上,可以传递 接口,也可以传递抽象类。
17、异常 Exception
异常就是错误,是在程序编译阶段或者执行过程中的错误。
学习异常主要是调试程序的错误信息,根据错误信息来发现程序的bug
异常的分类:运行时态异常和编译时异常
异常的级别关系:Error和Exception
Error:表示不可抗阻的因素造成的。
Exception:表示程序运行错误,是可以调试的。
捕获异常的语法
Try{
//假设代码运行正常.....
}catch(异常类型){
//程序出错了,要做什么,比如打印错误信息
}finally{
//不管程序是否出错,都执行
}
异常的类型必须是明确,这样才能准确的找出错误。
Throw 和 throws 的区别:声明异常 和 抛出异常
声明异常要大于等于抛出异常
自定义异常信息:标准的异常中无法描述错误信息,我们需要自己定义一 个异常信息。
什么时候捕获异常?什么时候抛出异常?
如果我们调用的是标准API文档的方法,如果该类或者方法抛出异常,我 们必须要捕获,在实际开发中,我们所编写的程序的功能执行成功与否, 与外界有紧密关系(比如,参数传递、调用关系) 必须抛出异常。