Java核心技术

1、集合

1.1 Collections和Arrays

https://blog.csdn.net/issunmingzhi/article/details/105382588

2、异常

2.1 Java异常类层次结构图

在这里插入图片描述
在这里插入图片描述
在Java中,所有异常的共同的祖先是java.lang包中的Throwable类。
Throwable:有两个重要的子类:Exception(异常)和Error(错误),二者都是Java异常处理的重要子类,各自都包含大量子类。
Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM (Java虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在Java中,错误通过Error的子类描述。Exception(异常):是程序本身可以处理的异常。Exception类有一个重要的子类RuntimeException。RuntimeException异常由Java 虚拟机抛
出。NullPointerException(要访问的变量没有引用任何对象时,抛出该异
常) 、ArithmeticException(算术运算异常,一个整数除以О时,抛出该异常)和ArrayIndexOutOfBoundsException(下标越界异常)。
注意:异常和错误的区别:异常能被程序本身处理,错误是无法处理。

2.2 Throwable类常用方法

在这里插入图片描述

2.3 try-catch-finally

try:捕获异常,后接零或多个catch,若无catch则必须跟一个finally
catch:处理try捕获到的异常
finally:无论是否捕获或处理异常,都会被执行。当try或catch遇到return,finally在方法返回前被执行。
finally不会被执行的特殊情况:
1、finally块第一行异常;
2、在前面用了System.exit(int)退出程序;
3、程序所在线程死亡;
4、关闭CPU。
注意:当try和finally都有return时,方法返回前,finally会被执行,且finally返回值会覆盖原始返回值。

2.4 try-with-finally代替try-catch-finally

P37

3、多线程

3.1 线程、程序、进程的概念和关系

线程与进程相似,线程更小。一个进程在执行中可产生多个线程。不同的是:通类的多个线程共享同一块内存和一组系统资源,所以系统在产生一个线程或在各个线程间切换工作时,负担要比进程小得多。
程序:含有指令和数据的文件,被存储在磁盘或其他数据存储设备,即程序是静态的代码。
进程:程序的一次执行过程,系统运行程序的基本单位,是动态的。系统运行一个程序即一个进程从创建、运行到消亡的过程。一个进程就是一个执行中的程序,在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源。当程序在执行时,将会被操作系统载入内存中。
基本上各进程是独立的,线程不一定,因为同一进程中的线程极有可能互相影响。另一角度,进程属于操作系统的范畴,同一段时间内,可以同时执行一个以上的程序,而线程则是在同一程序内几乎同时执行一个以上的程序段。

3.2 线程的基本状态

在这里插入图片描述
Java线程状态变迁图
线程创建之后它将处于NEW(新建)状态,调用start()方法后开始运行,线程这时候处于READY(可运行)状态。可运行状态的线程获得了cpu时间片(timeslice)后就处于RUNNING(运行)状态。
在这里插入图片描述
当线程执行wait()方法之后,线程进入WAITING(等待)状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而TIME_WAITING(超时等待)状态相当于在等待状态的基础上增加了超时限制,比如通过sleep (long millis)方法或wait (long millis)方法可以将Java线程置于TIMED WAITING状态。当超时时间到达后Java线程将会返回到RUNNABLE状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到 BLOCKED(阻塞)状态。线程在执行Runnable的run()方法之后将会进入到TERMINATED(终止)状态。

4、文件与I/O流

4.1 Java中IO流的种类

按流向分:输入流和输出流;
按操作单元分:字节流和字符流;
按流的角色分:节点流和处理流。
Java IO流的40多个类都是从如下4个抽象类基类中派生:InputStream/Reader、OutputStream/Writer。
按操作方式分类结构图:
在这里插入图片描述
按操作对象分类结构图:
在这里插入图片描述

4.1.1 有了字节流为什么还要有字符流?

本质问:不管是文件读写还是网络发送接收,信息最小存储单元都是字节,为什么I/O流操作要分字节流和字符流?
答:字符流是由Java虚拟机将字节转换得到的,非常耗时,并且若我们不知道编码类型就很容易出现乱码问题。所以,I/O流就提供了一个直接操作字符的接口,方便我们平时对字符进行流操作。如果音频文件、图片等媒体文件用字节流比较好,如果涉及到字符的话使用字符流比较好。

4.1.2 BIO,NIO,AIO的区别

P42


版权声明:本文为qq_43707782原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。