java高级阶段的总结

一.异常

描述:当程序没有按程序员的意愿正常执行时,中途出错导致程序中断,就称为异常
异常分类图:
在这里插入图片描述如果一个异常属于RuntimeException异常类的子类,称为运行时异常,可以通过编译,运行时可能抛出异常对象。

如果一个异常属于Exception异常类的子类,称为非运行时异常,无法通过编译,只有处理后才能编译运行。

常见异常原因:
在这里插入图片描述
在这里插入图片描述
处理异常的方法
方式一:try-catch-finally语句
在这里插入图片描述
方式二:throws关键字
在这里插入图片描述

二.集合

集合特点
可以无需也可以有序,集合的容量可变,集合中可以保存不同的数据
集合家族
在这里插入图片描述
ArrayList实现类
常用方法
在这里插入图片描述
LinkedList实现类
常用方法
在这里插入图片描述
ArrayList和LinkedList的区别
ArrayList采用数组实现,对于随机读取效率更高,通常用于查询;LinkedList采用双向链表实现,插入删除不影响其他元素位置,通常用于中间插入删除。
Set接口
TreeSet实现类:
采用红黑树(自平衡二叉树)实现的集合

  • 二叉树表示某个节点最多有两个子节点
  • 某个节点右侧的节点值都大于左侧节点值
  • 只能添加同一种类型的对象且实现了Comparable接口的对象
    • 实现Comparable接口后必须要重写compareTo方法
    • 每次调用添加时,参数会自动调用该方法
  • 添加的元素可以自动排序
  • compareTo方法的返回值决定了能否添加新元素和新元素的位置
    • 如果返回0,视为每次添加的是同一个对象,不能重复添加
    • 如果返回正数,将新元素添加到现有元素之后
    • 如果返回负数,将新元素添加到现有元素之前

常用方法
在这里插入图片描述
HashMap实现类
常用方法
在这里插入图片描述
泛型
描述:一种规范,常用语限制集合中元素的类型,省去遍历元素时的转型的过程
用法:在定义集合时,在接收集合变量的数据类型后,写上<数据类型>

三.流

流用于表示计算机硬盘和内存之间传输数据的通道
在这里插入图片描述
流的分类:
InputStream**字节输入流

FileInputStream文件字节输入流 ObjectInputStream对象字节输入流(反序列化)**

OutputStream字节输出流
FileOutputStream文件字节输出流 ObjectOutputStream对象字节输出流(序列化)**

Writer字符输出流

FileWriter文件字符输出流 **BufferedWriter缓冲字符输出流(包装流) ** OutputStreamWriter字节输出流转换为字符输出流(转换流)

Reader字符输入流

FileReader文件字符输入流 BuffedredReader缓冲字符输入流(包装流) InputStreamReader字节输入流转换为字符输入流(转换流)
FIleInputStream文件字节输入流
常用方法:
在这里插入图片描述
FIleOutputStream文件字节输出流
常用方法:
在这里插入图片描述
ObjectOutputStream对象字节输出流(序列化)
序列化:将对象转换为文件的过程
被序列化的对象,必须要实现Serializable接口。
这个接口是一个特殊的接口,没有定义方法,只是给这个类打上标记,表示该类可以被序列化
常用方法:
在这里插入图片描述

**

四.线程

**
线程是一个进程中的执行单元,一个进程中可以有多个线程。
多线程之间,可以访问同一个进程中的资源。
每个线程都有一个独立的栈空间。这些线程所在的栈空间位于同一个进程空间中。
多线程
如果一个进程中,同时在执行着多个线程,就称为多线程。
其实每个执行的Java程序,都是多线程的,虽然看似只有main方法所在的主线程在执行,其实还有一个gc线程(守护线程)。
如有一个工厂,工厂中有很多车间,车间中有很多流水线。
工厂就是内存,车间就是各个进程,拥有一块属于该进程的内存空间,每个流水线都是一个线程,属于对应进程下的一块子空间。
同步和异步
所有的任务排队执行,称为同步执行。–同步
在执行任务A的同时,执行任务B,称为异步执行。–异步
常用方法
在这里插入图片描述
实现多线程
方式一:继承Thread类

  • 1.让某个类成为Thread类的子类

  • 2.重写Thread类中的run方法,将要让该线程执行的内容写在该方法中

  • 3.创建Thread类的对象后,调用start()方法,启动线程

  • 方式二:实现Runnable接口(建议使用)

  • 由于Java中是单继承,所以如果某个类已经使用了extends关键字去继承了另一个类,这时就不能再使用extends继承Thread类实现多线程,就需要使用实现Runnable接口的方法实现多线程。

  • 1.自定义一个类,实现Runnable接口

  • 2.重写run方法,将要多线程执行的内容写在该方法中

  • 3.创建Thread线程对象,将自定义的Runnable接口实现类作为构造方法的参数

  • 4.调用线程对象的start()方法启动线程

  • 方式三

  • 使用匿名内部类
    线程的生命周期

线程的初始化到终止的整个过程,称为线程的生命周期

新生状态

当线程对象被实例化后,就进入了新生状态。new Thread()

就绪状态

当某个线程对象调用了start()方法后,就进入了就绪状态。

在该状态下,线程对象不会做任何事情,只是在等待CPU调用。

运行状态

当某个线程对象得到运行的机会后,则进入运行状态,开始执行run()方法。

不会等待run()方法执行完毕,只要run()方法调用后,该线程就会再进入就绪状态。这时其他线程就有可能穿插其中。

阻塞状态

如果某个线程遇到了sleep()方法或wait()等方法时,就会进入阻塞状态。

sleep()方法会在一段时间后自动让线程重新就绪。

wait()方法只有在被调用notify()或notifyAll()方法唤醒后才能进入就绪状态。

终止状态

当某个线程的run()方法中所有内容都执行完,就会进入终止状态,意味着该线程的使命已经完成
线程死锁
线程操作是可能会遇到这个问题,这会导致程序不结束,也不执行,出现他的原因是synchronized的原因,意图同步资源,当2个类都在调用资源时,如果使用这个关键字交错使用,会导致A类要用资源的时候,B类也再用,因为synchronized不能把资源给A,B同样也不能用A的资源,就到导致双方都不能进行下去住了。解决方法有调用资源时采用相同的顺序,或者获取第三资源,对他进行同步。

总结

这部分的内容相对于之前就要复杂困难很多了,但在一次次完成小作业之后,收获到的东西也是更多的,对于自己能力的提升也是很大的。线程的操作通过死锁对于他的概念更清楚了,知道他的操作逻辑。流的使用也让我可以操作文件,读取和写入他们。集合的使用相对于数组要方便很多,可以存储不同类型的数据,我会在之后的学习中让我这部分的知识更扎实。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值