Java高级特性

集合框架和泛型

虚线框代表接口 实线框代表类
空心箭头代表有继承关系

Collection 代表着一个集合框架 ,各种类型集合接口的一个父接口
Collections是指对集合提供一些算法的算法类
了解输入输出的概念
初步掌握Java通过什么API来操作文件或目录
java中的File文件,可以指文件也可以指一个目录
java输入输出是站在程序角度上看的
java.IO.File用于操作文件或者目录
java中路径写法:

File类的常用方法:

流是一组有序的数据序列
以先进先出的方式发送信息的通道

InputStream字节输入流(抽象类-基类)

字节输入流--读
InputStream抽象父类-FileInputStream子类
常用方法:read()几个重载方法作用不同
int read();
从输入流一个字节一个字节的读,返回的是该字节的整数表示形式,如果读到了输入流的末尾,返回-1
int read (byte[] b):
从输入流读取若干字节,将这些字节保存到数组b中。返回的是读取到的字节数,如果读到了输入流的末尾,返回-1
int read(byte[] b , int off, int len):
从输入流读取若干字节,将这些字节保存到数组b中。off值得是字节数组中开始保存数据的起始下标。len指的是读取的字节数目,返回的是实际读取到的字节数,如果读到了输入流的末尾,返回-1




以上这个方法有误,会出现空格


解决乱码问题

BufferReader



关闭流的原则:先开的后关,后开的先关
多线程
一个进程同时运行多个线程,用来完成不同的工作,则称之为多线程。多个线程交替占用资源,而非真正的并行执行。
为什么学习多线程?
*多线程在软件开发领域有着重要地位
*多线程开发优点明显
*多线程是绝大多数面试必问点
多线程的优势:
*充分利用CPU资源,提升代码性能
*简化编程模型,更好的软件设计和架构
*带来良好的用户体验
进程:应用程序的执行实例,有独立的内存空间和系统资源。
线程:CPU调度和分派的基本单元,CPU运算的最小单位,可完成一个独立的顺序控制流程。
进程(运行程序)-->线程(程序的一个个任务)
CPU(工厂)-->进程(车间)-->线程(工人)
主线程:
main()方法即为主线程入口
产生其他子线程的线程
必须最后完成,因为他执行各种关闭操作

如何通过继承Thread创建和启动线程
1.定义MyThread类继承Thread类(extends Thread)
2.重写run()方法,编写线程执行体
3.创建MyThread线程对象,调用start()方法启动线程


这里不可以调用run()方法:
(1)只有主线程一个执行路径
(2)依次执行了两次run()方法

实现Runnable创建线程
(1)定义MyRunnable类实现Runnable接口
(2)实现run()方法,编写线程执行体
(3)创建线程对象,调用start()方法启动线程



在java中创建线程的两种方式
继承java.lang.Thread 类
*编写简单,可直接操作线程,适用于单继承
实现java.lang.Runnable接口
*避免单继承局限性,便于资源共享
推荐使用实现Runnable接口方式创建线程


线程状态

线程调度和线程有优先级

线程调度:优先级和睡眠
让线程暂时进入睡眠指定时长,线程进入阻塞状态

以上这两种都叫做让线程休眠的方法。
线程调度join();

线程调度yield();(线程的礼让)
暂停当前线程,允许其他具有相同优先级的线程获得运行机会。
该线程处于就绪状态,不转为阻塞状态。
yield只是提供一种可能,但不能保证一定实现了礼让。

多线程共享数据
可能带来的问题:
数据不安全
原因:多线程共同操作数据时,引发的冲突(如延迟,操作未全部完成等)



对象在网络编程中的传递就是一个序列化和反序列化的过程
