过程性的编程思想
大学里学的汇编,全凭0,1
结构性的编程思想
单片机,嵌入式之类解决问题的思想(行动要求直接输出结果)类似学生时代做题,性能较高
C语言里面有几个能表现出结构化思想的地方:分支(if), 循环(while,for),结构体(struct). 只要你会用这三个,那么你就可以写出结构化的程序,但不一定你就了解什么是结构化的编程方法。什么叫做结构化?为什么说goto会破坏程序的结构化?结构体有什么作用,你能说出结构体的哪些好处?(C语言的"数据结构")
面向对象的编程思想(oop)
类与对象
万事万物皆为对象,面向对象是把事物解析成对象,描绘各个对象之间的交互,和交互后的状态(类似于人与人之间的联系)
对象:指代一个具体的事物,比如人
类:描绘一个对象的属性的集合,比如[红色衣服,白色眼镜,男]
类实例化成对象: 一个穿红色衣服,戴白色眼镜的男人
对象是类的具象化
方法
有参方法:方法带参数
无参方法:方法不带参数
对象数组
一个元素是对象的数组
重载和构造
重载:可以有多个同名但是参数类型或者参数个数不同的方法。(仅指方法)
构造:一个用来创建对象,且用来赋值的方法。分有参构造和无参构造
this、static、单例模式
this
当前对象
static
静态方法和属性可以类名直接调用,它是公有的。静态方法只能调用静态的方法和属性(静态方法是属于类的,动态方法属于实例对象,在类加载的时候就会分配内存,可以 通过类名直接去访问,非静态成员(变量和方法)属于类的对象,所以只有该对象初始化之后才存在,然后通过类的对象去访问。)如果要调用的话,可以new一个对象出来调用
动态没有限制
单例模式
无论调用多少次都是只是一个对象。是spring默认的初始化的类的配置
懒汉式:在真正需要使用对象时才去创建该单例类对象Double Check(双重校验) + Lock(加锁)
饿汉式:在类加载时已经创建好该单例对象,等待被程序使用
@Scope注解默认单例饿汉式模式生成(如果要变成懒汉式,添加@Lazy注解),但是设置成prototype
则会变成多例模式懒汉式加载(getBean()的时候创建)
单例模式在容器启动的时候创建/通过注解或者xml或者配置类创建,之后set设置属性值,initMethod()初始化,最后调用 destroyMethod() 销毁(容器关闭时调用销毁流程)(销毁时可以调用bean后置处理器(BeanPostProcessor
接口)自定义销毁前后的特殊处理)
多例模式getBean()创建,然后赋值,最后被gc回收时销毁
后续讲bean时会细讲
面向对象三大特性
封装
相关数据封装成类(类的属性设置成private,但是提供公开的get,set以供赋值)
继承
子类继承父类的特性(各种属性和方法),之后就可以使用父类的属性方法,同时不影响自己新增的属性和方法。Spring框架的底层bean就是继承factorybean接口。类的继承是单向的。但是一个接口是可以继承多个父类的。
多态
一个父类的多个子类继承了父类的方法并且重写了,导致表现不同的情况(要求必须得是有继承关系的两个类)
多态的向上转型:父类调用子类方法
多态的向下转型:父类强转成子类
instanceof
(object) instanceof 类(class) object是否和class是一致的或者有继承关系(向下转型的情况下必用,否则可能报错)
接口
接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,继承的关键字为interface
我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的,这样怎么可能产生具体的实例呢?但是,我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法。(实际上就是使用了Java中多态的特性)
接口类似于一个动作的集合,例如一个usb上传功能的接口,它只需要被继承被调用实现usb口的键盘和鼠标的信号数据传输上来,至于数据的承载和处理,需要这个usb接口实现的键盘类和鼠标类来分别承载然后进行处理。只要实现了这个接口,就等同于具备了这个接口代表的功能。比如在当下这个usb接口被实现了,说明具备了usb数据传输的功能。
异常
异常处理
try{
代码逻辑块
} catch(报错信息)(
异常捕获(可以选择throw、throws 抛出,如果不抛出,程序将可以再运行下去。如果外面调用的代码需要捕获异常的话,一定要抛出)
) finally {
结束后进行处理(包括异常处理后)
比如io流的关闭(曾经因为创建文件夹且生成文件的程序没有关闭io流导致下次再创建时异常)
}
异常种类
Java异常
可以继承RunTimeException接口返回自定义异常
Exception:所有异常的根类,不知道会报什么异常的话选这个准没错
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常
SQLException
输入输出异常
IOException