面向对象
初识面向对象
方法回顾和加深
对象的创建和分析
面向对象的三大特性
抽象类和接口
内部类和oop实战
初识面向对象
面向过程&面向对象:
类=属性+方法
对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍需要面向过程的思路去处理
面向对象编程(oop)
面向对象编程本质:以类的方式组织代码,以对象的形式封装数据
抽象
三大特性:封装,继承,多态
方法回顾和加深
方法的定义:
- 修饰符
- 返回类型
- break:跳出switch,结束循环。return:结束一个方法,返回一个结果
- 方法名:注意规范,见名知意
- 参数列表(参数类型,参数名)
- 异常抛出
方法的调用:
(静态方法和非静态方法)非静态方法直接通过类名调用(类名.方法)
非静态方法要首先实例化一个对象再进行调用(对象名.方法)
-
静态方法
-
非静态方法、
-
形参和实参
-
值传递和引用传递(对象)
-
this关键字
类与对象的关系
类是一种抽象的数据类型,它是对某一种事物的整体描述/定义
对象是对抽象概念的具体实例
使用new关键字来创建对象
一个类即使什么都不写,也会存在一个方法,叫做构造方法(构造器),方法名与类名相同,且没有返回类型
构造方法的作用:使用new关键字本质上在调用构造器,实例化一些初始值
alrt+insert可以快捷生成构造器
注意点:定义了一个有参构造后,如果想使用无参构造,必须显示的定义一个无参构造
创建对象内存分析
封装
程序设计追求“高内聚,低耦合”,高内聚:内部数据操作细节自己完成,不允许干涉。低耦合:仅暴露少量方法给外部使用
封装:禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问。
将属性通过private关键字私有化,提供一些可以操作这些属性的方法,public的get,set方法
继承
本质上是对某一批类的抽象,是类与类之间的关系,两个类之间一个是子类,一个是父类,子类继承父类,使用关键字extends
子类是父类的扩展,子类继承父类会拥有父类的全部方法
在java中,所有的类都默认直接或间接继承object类,java中只有单继承
(一个儿子只能有一个爸爸,而一个爸爸可以有多个儿子)
私有的东西无法被继承
super:
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法之中
- super和this不能同时调用构造方法
super和this的区别:
方法重写
重写都是方法的重写,与属性无关
静态方法:方法的调用之和左边定义的数据类型有关
重写:需要有继承关系,子类重写父类的方法
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但不能缩小;public>protected>default>private
- 抛出异常:范围可以缩小但不能扩大
多态:同一个方法可以根据发送对象的不同而采用多种不同的行为方式
一个对象的实际类型是确定的,但可以指向对象的引用类型有很多
一个对象的实际类型可以是确定的,但其指向的引用类型可以不确定
多态存在的条件:
对象能执行哪些方法,主要看对象左边的类型
父类可以指向子类,但不能调用子类独有的方法
子类能调用的方法都是自己的或者继承父类的
注意点:
不能重写的方法:
instance of和类型转换
instance of用于判断类对象属于何种类,判断对象与类之间的关系
x instance of y x对象是否与y类存在父子关系,若存在则为true,否则为false
类型之间的转换:
父类>子类 父类转换为子类(向下转型)高转低强制转换
子类转换为父类(向上转型)自动转换,可能丢失自己的一些方法
studen类中存在父类person不具有的go方法
方便方法的调用,减少重复代码
static关键字
staic可修饰属性与方法,修饰的属性称为静态属性,方法为静态方法
静态变量可以直接通过类名.属性进行使用,而非静态变量需要实列化对象,通过对象.属性进行使用
静态方法与非静态方法同样如此,静态变量与静态方法随类一起加载,而非静态变量与方法随对象一起加载
1,2,3为其输出的向后顺序,同时静态代码块只执行一次,随类加载
如果一个类被final修饰,则不能被其他类继承】
抽象类
abstract可以用来修饰方法也可以用来修饰类,如果修饰方法,则该方法是抽象方法,修饰类则为抽象类
抽象类中可以没有抽象方法,但有抽象方法的类一定要声明为抽象类
java的类是单继承,接口key多继承
接口
声明接口的关键字为interface
接口中的所有定义的方法其实都是公共抽象的 public abstract,接口中所定义的属性是公共静态常量 public static final
接口都需要有实现类,通过implements来实现,实现了接口的类,必须重写接口中的所有方法
接口的作用:
内部类
内部类:在一个类的内部在定义一个类,分为成员内部类,静态内部类,局部内部类,匿名内部类
内部类可以获得外部类的私有属性私有方法
静态内部类无法访问非静态属性
一个java类中可以有多个class类,但只能有一个public class类
在方法里面写类,称为局部内部类
匿名内部类:没有名字初始化类,不用将实列保存在变量中
异常机制
异常
异常体系结构
java异常处理机制
处理异常
自定义异常
异常
三种类型的异常:
异常体系结构
error类对象是由java虚拟机生成并抛出的,大多数错误与代码编写者所执行的操作无关
exception通常是由程序逻辑错误引起的
抛出异常和捕获异常
异常处理的五个关键字:try,catch,finally,throw,throws
try用来监控该代码块中可能发生的异常
catch捕获异常,要声明异常种类,如果异常种类与声明中的一致,则执行catch中的代码块,同时可以有多个catch块,用来捕捉多个异常,最大的异常要写在最后面,防止前面的异常不会被捕获(从小到大)
final用于处理善后工作,都会被执行
try catch区域必须要有,finally可以不要,finally常用于处理善后工作,如io流或者资源的关闭
throw用于主动抛出异常,一般用在方法中
throws用于在方法上处理异常,方法中处理不了该异常