变量的生命周期:位于内层中的变量可以访问并修改外层变量的值
注意:子类中方法的访问权限 >= 父类
ReultSet不是一个集合,而是在使用jdbc(java database connectivity) 返回的一个结果集
enty中提供有参构造时, 未提供空参构造方法时,通过new空参未报错(java1.8)
mehod.invoke返回的是一个Obeject类型
Object类常用方法:
1.hashcode方法
2.clone
3.toString
4.equals
5.finalize(对象被回收时进行调用)
不可变分为引用不可变和对象不可变,被finall修饰的对象为引用不可变,可以被重新赋值,但不可以被重新new
super()
调用父类的构造方法,从而完成对子类的初始化工作
在Java的多重继承中,孙子类可以访问并且使用爷爷的成员方法
输入和输出是相对于外部输入设备而言的(磁盘)
阻塞是相对于调用方,同步是相对于被调用方
阻塞:调用方发布调用命令后,在数据复制好之前,自身需处于等待状态
非阻塞:调用方发布调用命令后,在数据复制好之前,可以去做其它事。
同步:接到调用命令后,立即去做
异步:承诺会做,不承诺立即去做
阻塞IO模型:在进程发布调用命令后,内核在数据的准备状态,直到数据成功复制,进程在此过程一直在等,什么也不干。
非阻塞IO模型:在进程发布调用命令后,数据没准备好之间,不会一直等,会做其它事,期间通过轮询的方式去询问内核数据是否准备好,返回成功指示后,再进行数据报的处理。
信号驱动IO模型:一遍一遍查看过于麻烦,当数据准备好时,直接提醒即可,进程预先向内核注册一个信号处理函数,当进程收到相应的信号后,处理函数会进行后续的处理,最后进程再进行数据报的处理。弊端:信号处理程序实现复杂,并且只有在数据准备阶段才可以近似为异步的。
IO复用模型:将多个IO注册到一个SELECT上,IO需要的数据都没准备好,SELECT 调用进程会阻塞
异步IO:进程先询问,无数据准备好时,直接返回,内核准备好时,不再返回成功指示,发送信号即可
BIO:Blocking I/O 同步阻塞IO模型,这种IO模型是最笨的
NIO:New I/O 支持阻塞与非阻塞。弊端:实现较为复杂
AIO:异步非阻塞
反射是众多高级特性的基础:如注解、动态代理,包括框架中也有很多地方使用
new 对象的开销很小(可以尝试下new 10000个对象)
try()会进行资源释放,前提是资源类实现了Closeable或AutoCloseable接口 jdk7新增
放在try - catch中的代码发生异常时,程序仍会运行