011. java 中的异常继承体系
Throwable 类是所有异常或错误的超类,它有两个子类:Error 和 Exception,分别表示错误和异常。其中异常 Exception 分为运行时异常(RuntimeException)和编译时时异常。
Error:一般是指 java 虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常应用程序无法处理这些错误
Exception 异常又分为两种:
Exception:编译时异常,如果异常不处理,则代码无法编译。
RuntimeException:运行时异常,运行时发生,无需处理,对代码进行修改解决问题。
012. java 中常见的运行时异常
1、NullPointerException:空指针异常,调用了未经初始化的对象或者是不存在的对象。
2、ClassNotFoundException :指定的类不存在。
3、ArrayIndexOutOfBoundsException :数组下标越界异常。
4、NoSuchMethodException:方法不存在错误。
5、FileNotFoundException:文件未找到异常,进行 IO 操作时,访问的文件不存在。
运行时异常的直接父类是:RuntimeException,而所有的编译异常的直接父类都是Exception
013. 异常的解决方式 (2种)
1、throws:throws 来告知调用程序此方法可能会抛出的异常,但是不会处理。
2、try-catch:try-catch 块捕获处理异常。
014. throw 和 throws 的区别
throw 语句用在方法体内,表示抛出异常对象,由方法体内的语句处理。
throws 语句用在方法声明后面,表示该方法有异常抛出,由该方法的调用者来处理。
015. java 何时进行类的加载
在第一次使用类的时候进行加载类信息(包括:创建对象,调用静态方法,反射类信息,创建其子类对象等)
类加载的顺序:
1. 父类静态代码块
2. 子类静态代码块
3. 父类构造代码块
4. 父类构造方法
5. 子类构造代码块
6. 子类构造方法
016. jvm 虚拟机的垃圾回收机制(GC) (自己被百度理解)
https://www.cnblogs.com/dolphin0520/p/3783345.html
GC 是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放已分配内存的显示操作方法。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc() 或 Runtime.getRuntime().gc() ,但 JVM 可以屏蔽掉显示的垃圾回收调用。
垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。在 Java 诞生初期,垃圾回收是 Java 最大的亮点之一, 因为服务器端的编程需要有效的防止内存泄露问题,然而时过境迁,如今 Java 的垃圾回收机制已经成为被诟病的东西。移动智能终端用户通常觉得 iOS 的系统比 Android 系统有更好的用户体验,其中一个深层次的原因就在于 Android 系统中垃圾回收的不可预知性。
补充:垃圾回收机制有很多种,包括:分代复制垃圾回收、标记垃圾回收、增量垃圾回收等方式。
标准的 Java 进程既有栈又有堆。栈保存了原始型局部变量,堆保存了要创建的对象。Java 平台对堆内存回收和再利用的基本算法被称为标记和清除,但是 Java 对其进行了改进,采用“分代式垃圾收集”。这种方法会跟 Java 对象的生命周期将堆内存划分为不同的区域,在垃圾收集过程中,可能会将对象移动到不同区域:
伊甸园(Eden):这是对象最初诞生的区域,并且对大多数对象来说,这里是它们唯一存
在过的区域。
幸存者乐园(Survivor):从伊甸园幸存下来的对象会被挪到这里。
终身颐养园(Tenured):这是足够老的幸存对象的归宿。年轻代收集(Minor-GC)过程
是不会触及这个地方的。当年轻代收集不能把对象放进终身颐养园时,就会触发一次完全
收集(Major-GC),这里可能还会牵扯到压缩,以便为大对象腾出足够的空间。
017. 父类的静态方法能否被子类重写
不能。重写只适用于实例方法,不能用于静态方法,而子类当中含有和父类相同签名的静态方法,我们一般称之为隐藏。
018. java 中的集合有哪些
java 中的集合分为单列集合和双列集合,单列集合顶级接口为 Collection,双列集合顶级接口为 Map。
Collection 的子接口有两个:List 和 Set。
List 接口的特点:元素可重复,有序(存取顺序)。
list 接口的实现类:
ArrayList:底层实现是数组,查询快,增删慢,线程不安全,效率高;
Vector:底层实现是数组,查询快,增删慢,线程安全,效率低;【废弃】
LinkedList:底层实现是链表,增删快,查询慢,线程不安全,效率高;
Set 接口的特点:元素唯一,不可重复,无序。
Set 接口实现类:
HashSet:底层实现 hashMap,数组+链表实现,不允许元素重复,无序。
TreeSet:底层实现红黑二叉树,实现元素排序
Map 接口的特点:key-value 键值对形式存储数据
Map 接口实现类:
HashMap:底层数组+链表实现,线程不安全效率高;
TreeMap:底层红黑二叉树实现,可实现元素的排序;
LinkedHashMap:底层 hashmap+linkedList 实现,通过 hashmap 实现 key-value 键值对存储,通过链表实现元素有
序。
019. 线程和进程的区别
1. 线程和进程的区别
1、进程是资源分配的最小单位,线程是程序执行的最小单位。
2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间。而线程是共享进程中的数据的,使用相同的地址空间,因此 CPU 切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。
020. 多线程的实现方式
1、继承 Thread 类
2、实现 Runnable 接口
3、实现 Callable 接口
4、通过线程池获取线程对象,实现多线程