java基本操作与语法
java基本操作与语法,考察很多很细
面向对象的三大特征——封装,继承,多态
封装是将对象的属性隐藏在对象内部不允许外部对象直接访问,而是提供方法来操作属性
继承,子类拥有父类的所有属性和方法,可以对父类进行拓展
多态:分为运行时多态(父类引用指向子类对象),编译时多态(重载)
UML类之间的关系:泛化(继承is-a),实现(接口),聚合(弱依赖has -a),组合(强依赖),关联,依赖(use-a)
包装器与缓冲池:每一个基本数据类型都有对应的包装器,它们之间的赋值可以自动装箱拆箱。
Interger的缓冲池在-128到127之间,通过Integer.valueof()创建的对象直接从缓冲池中获取,==判断为True
stringpool:使用“”修饰的创建方法,自动放入字符串池中,==判断为true
对string对象调用intern()方法,放入常量池并返回
抽象类:一般存在抽象方法,有抽象方法必然是抽象类;不能被实例化,必须被继承才可以使用,子类必须实现所有的抽象方法
接口:抽象类的衍生,所有成员public,字段定义为static final的常量
抽象类定义一种is-a关系,接口是一种实现契约,可以实现多继承。
抽象类也是类,可以有各种访问权限、成员变量、构造器方法、成员方法
接口只有public static final的常量和public abstact的抽象方法,是抽象类的特例。
1.抽象类的使用场景
既想约束子类具有共同的行为(但不再乎其如何实现),又想拥有缺省的方法,又能拥有实例变量
如:模板方法设计模式,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现。
2.接口的应用场景
① 约束多个实现类具有统一的行为,但是不在乎每个实现类如何具体实现
② 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。
③ 实现类需要具备很多不同的功能,但各个功能之间可能没有任何联系。
④ 使用接口的引用调用具体实现类中实现的方法(多态)
重载的要求:不同的参数列表,与修饰符和返回值无关
重写的要求:参数列表完全相同(否则只是同名方法),返回类型是子类型,访问权限更小
super关键字用途:1.调用父类构造方法2.重写父类方法后,调用父类被重写的方法
final关键字用途:
- 修饰数据,基本数据类型表示常量,引用数据类型不能指向其他对象
- 修饰方法不可被重写
- 修饰类不能被继承,所以接口和抽象类不能被final修饰
static关键字用途:静态变量,静态方法,静态内部类等不属于任意实例,类名直接访问
JAVA内部类讲解
成员内部类:最常见,内部类是外部类的一个成员变量,可以访问外部类的所有属性和方法。类似成员变量可以被所有修饰符修饰,要访问成员内部类,必须创建成员内部类的对象。
局部内部类:定义在一个方法里面的类,访问权限仅限于方法内,就像一个局部变量,不能有访问权限修饰符
匿名内部类:匿名内部类必须继承一个父类或者实现一个接口
静态内部类: static修饰的内部类,可以由外部类直接访问(静态成员的公共特点) 类名.变量访问静态变量
创建静态内部类对象的一般形式为: 外部类类名.内部类类名 xxx = new 外部类类名.内部类类名()
创建成员内部类对象的一般形式为: 外部类类名.内部类类名 xxx = 外部类对象名.new 内部类类名()
常见IO模型
同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行;而异步是指用户线程发起IO请求后仍继续执行,当内核IO操作完成后会通知用户线程,或者调用用户线程注册的回调函数。
阻塞和非阻塞的概念描述的是用户线程调用内核IO操作的方式:阻塞是指IO操作需要彻底完成后才返回到用户空间;而非阻塞是指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成。
Unix的四种IO模型
BIO同步阻塞IO模型:
- 用户线程在通过系统调用read发起IO读操作,由用户控件转为内核控件,内核等到数据到达后,将数据拷贝到用户空间,用户线程才能开始工作。对CPU的利用率不够
NIO同步非阻塞IO模型
- 用户线程发起IO请求时立即返回,但不一定读取到数据,通过轮询操作不断发起IO请求,直到数据到达之后继续执行。轮询操作消耗了大量CPU资源。
IO多路复用模型(异步阻塞IO模型)
- 线程首先发起select\epoll调用询问内核数据准备状态,准备就绪才会发起read调用。避免了轮询操作对CPU资源的损耗。
AIO异步非阻塞IO模型
- 基于事件和回调机制,用户线程发起IO请求后直接返回不会发生阻塞,当内核IO任务执行完毕后,通过用户线程直接使用即可。
java中的IO模型
Java中的IO流主要有4个基类:InputStream、OutputStream、Reader、Writer。Java的IO流实现是依附于平台的,换句话说它依赖于上述4种模型,实际上Java的IO流是基于阻塞式IO实现的。阻塞式IO是性能最差的IO模型了,所以Java的IO流并不是一个高效的实现,在Java的早期人们对Java性能的诟病也正源于此。
从1.4开始,Java提供了新的IO模型(NIO),这种IO模型是基于IO多路复用实现的。从1.7开始,Java又对IO模型进行了升级(NIO2),在本次升级中Java提供了异步IO模型(AIO)。这两种IO模型的引入,使得Java处理IO的性能大大的提高了,我们在处理IO问题时也应该尽量选择NIO,而少用IO流。
java中的NIO是IO多路复用模型的实现:它包含三个核心组件,分别是Buffer、Channel、Selector
- NIO是面向缓冲区的,所有的数据都通过缓冲区处理,buffer本质是一个数组
- Channel是一个通道,通过它读取和写入数据,与流不同的是,通道是可以双向数据传输的
- Selector是多路复用器,通过它监听网络IO状态。它可以不断轮询注册的channel,如果有IO事件发生则对应的channel进入就绪状态

浙公网安备 33010602011771号