初识面向对象
面向过程
步骤清晰简单,第一步做什么,第二步做什么。。。
面对过程适合处理一些较为简单的问题
面向对象
物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类。然后对这些分类进行单独思考。最后,对某个分类下的细节进行面向过程的思索
面向对象适合处理复杂的问题。适合处理需要多人协作的问题
对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们哦使用面向对象的思维来分析整个系统。但是具体到微观操作,仍然需要面向过程的思路去解决。
面向对象编程(OOP)
oop(Object-Oriented Programming)
本质:以类的方式组织代码,以对象的组织(封装)数据
三大特性:封装、继承、多态
从认识论角度考虑是先有对象后有类,对象,是具体的事物,类是抽象的,是对对象的抽象
从代码运行角度考虑是现有类后有对象,类是对象的模板
对象的创建分析
类是一种抽象的数据类型,是对某一类事物整体描述和定义,但是并不能代表具体的事物
对象是抽象概念的具体实例
使用new关键字来创建对象,会分配内存空间之外,给创建好的对象进行默认初始化以及对类中构造器的调用
类中的构造器也叫做构造方法,是在进行创建对象的时候必须调用的,构造器的特点:必须和类的名字相同,必须没有返回值,也不能写void方法
类和对象:类是一个模板:抽象的,对象是一个实例,具体的
方法的定义和调用
对应的引用:引用类型:基本类型(8)对象是通过引用类型来操作的栈—>堆
属性:字段Field 成员变量 默认会初始化:数字:0 0.0 char:u0000 boolean:false 引用:null
修饰符 属性类型 属性名 = 属性值!
创建对象必须使用new,构造器 对象 的属性和方法
类:静态的属性、动态的行为
面向对象的三大特性
封装、继承、多态
封装
程序设计需要:低耦合、高内聚
高内聚就是类的内部数据操作细节自己完程,不需要外部干涉,
低耦合:仅仅暴露少量的方法给外部使用
封装(数据的隐藏):通常应该禁止访问一个对象中数据的实际表示,应通过操作接口来访问,称为数据隐藏
属性私有,get、set
特点:提高代码安全性、保护数据
隐藏代码的实现细节
统一接口
系统可维护性增加
继承
本质就是对某一批类的抽象,实现对现实世界更好的建模
extands的意思就是扩展,子类是父类的扩展
java只有单继承,没有多继承
继承是类和类之间的一种关系,类和类之间的关系还有依赖、组合、聚合等
继承关系的俩个类,一个是子类(派生类),一个是父类(基类)。子类继承父类,使用关键字extands表示
子类和父类之间从意义上讲应该具有 is a的关系
object类
super
super调用父类的构造方法,必须写在第一行
super必须只能出现在子类的方法或者构造方法中
super和this不能同时第哦啊用构造方法
spuer Vs this:
代表的对象不同:this:本身调用者这个对象,super代表父类对象的应用
前提:this:没有继承也可以使用 super:只能在继承条件下使用,
构造方法 this():本来的构造 super父类的构造
重写:需要有继承关系,子类重写父类的方法
方法名必须相同
参数列表必须相同
修饰符:范围可以扩大但不能缩小,public>protected>default>private
抛出异常:范围可以被缩小,但是不能被扩大:classNotFoundException–>Exception
重写子类的方法必须和父类的方法一致,方法体不同!
为什么要重写,父类的功能子类不一定需要,或者不一定满足override
多态
就是同一个方法可以根据发送对象的不同而采用多种不同的行为方式
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多
多态存在的条件:有继承关系、子类重写父类的方法、父类引用子类的对象
注意多态是方法的多态,属性没有多态性
父类和子类,有联系,类型抛出异常ClassCastException
存在条件:继承关系、方法需要重写,父类引用指向子类对象 Father f = new son();
哪些不能用:static方法,属于类,不属于实例;final常量;private方法;
instanceof (类型转换) 引用类型
抽象类和接口
抽象类
用abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,就叫做抽象方法,修饰类就叫做抽象类
抽象类中没有抽象方法,但是抽象方法里面一定要声明为抽象类
抽象类不饿能用new关键之创建对象,它是用来让子类继承的
抽象方法只有方法的声明,没有方法的实现,用来让子类实现的
子类继承抽象类,那么必须实现抽象类没有实现的抽象方法,否则子类也要声明为抽象类
注意: abstract抽象方法只有方法名字,没有方法的实现
不能new这个抽象类,只能靠子类去实现它,约束
抽象类中可以写普通的方法
抽象方法必须在抽象类中
抽象的抽象:约束
接口
普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有
接口:只有规范
接口就是规范,定义的是一组规则,体现现实思想,OO的精髓就是对对象的抽象,最能体现的就是接口。声明类用class,声明接口用interface
接口的作用
约束
定义一些方法,让不同的人实现
public abstract
public static final
接口不能被实例化,接口中没有构造方法
implement可以实现多个接口
必须要重写接口中的方法
内部类及OOP实战
内部类
就是在一个类的内部在定义一个类,比如a类中定义b类,那么b类相对a类来说就是内部类,a类相对比b类就是外部类
成员内部类、静态内部类、局部内部类、匿名内部类
异常机制
实际工作中,遇到的情况不可以是非常完美的;程序运行中,可能会遇到的异常问题,就叫做异常,Exception。异常指的是陈鼓型在运行过程中出现的不期而遇的各种问题,比如文件找不到、网络连接失败。异常发生在程序运行期间,影响正常的程序执行流程。
分类:检查性异常、运行时异常、错误
检查性异常:最具代表的检查性异常就是用户错误或者问题引发的异常,这是程序员无法预见的
运行时异常:可能时被程序员避免的异常,与检查性异常相反,运行时异常可以在编译时被忽略
错误:不是异常,而是脱离程序员的控制,错误在代码中通常被忽略
异常体系结构
Java把异常当作对象处理,定义了java.lang.Throwable作为异常的超类,在API中定义许多异常类,分别为Error和异常Exception。
Error
Error类对象由Java虚拟机生产并抛出,大都数错误与代码编写者的操作无关
java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执行操作所需要的内存资源时,将出现OutOfMemoryError,发生这些异常时,虚拟机一般会终止线程
Exception
RuntimeException 运行时异常
NullPointerException 空指针异常
ArithmeticException 算术异常
MissingResourceException 丢失资源
ClassNotFoundException 找不到类异常
这些都是不检查异常,程序中可以选择捕获,也可以不处理
这些异常一般都是优程序逻辑错误引起的,程序应该从逻辑角度尽可能的避免这些异常产生
Error和Exception的区别
Error通常时灾难性的致命的错误,时程序无法控制和处理的,当出现这些异常时,java虚拟机一般会终止程序,Exception通常情况下可以被程序处理的,并且在程序中尽可能的去处理这些异常
异常的关键字
try catch throw throws finally
自定义异常
使用java内置的异常可以描述在编程时出现的大部分异常情况,但是用户也可以自定义异常,只需要继承Exception即可。
自定义异常大概分为以下几个部分:
1.创建自定义异常类
2.方法中通过throw关键字抛出异常对象
3.如果在当前抛出异常的方法中处理异常,可以使用try…catch语句捕获并处理,否则在方法的声明处通过throws关键字指出要抛出给方法调用者的异常,继续下一步操作
4.在出现异常方法的调用者捕获并处理异常
总结:
处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
对于不确定的代码,可以加上catch处理潜在的异常
尽量去处理异常,切忌只是通过调用printStackTrace()去打印出书
具体如何处理异常,要根据不同的业务需求和异常类型来决定
尽量添加finally语句块去释放占用的资源,IO~Scanner