• 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的资源,就到导致双方都不能进行下去住了。解决方法有调用资源时采用相同的顺序,或者获取第三资源,对他进行同步。

    总结

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

  • 相关阅读:
    由于计算机中丢失msvcp110.dll的解决方法与msvcp110.dll丢失修复方法
    【WLAN】【调试】Windows系统下,如何查看无线(WLAN)相关日志
    【PingPong_注册安全分析报告】
    学习前端第二十五天(构造器和操作符‘new’,可选链‘?.’,symbol类型)
    springboot+vue+java药房药店在线销售管理系统
    C++中数组和指针的类似之处
    ENSP中用OSPF协议在MGRE结构中实现全网可达
    Redis事务操作
    js设计模式(观察者模式与发布订阅模式区别)[四星推荐]
    RabbitMQ传统数据持久化和Lazy queue的区别
  • 原文地址:https://blog.csdn.net/xieyang929/article/details/126182798