1. try-catch-finally中 如果 catch 中 return 了,finally 还会执行吗?
会执行的。
当try块中发生异常时,控制流会立即转到相关的catch块,执行其中的代码。如果在catch块中出现了return语句,那么该方法或函数的执行就会结束,并且不会再返回到try块或finally块中。
但是,无论是否出现异常,finally块中的代码都会在try块之后或者catch块之后执行。这意味着即使在catch块的return语句中完成了对返回值的处理,finally块中的代码仍然会被执行。
2. 常见的异常类有哪些
Java中的异常可以分为两种:
受检查异常(Checked Exception):编译器会在代码中强制要求通过try-catch或者声明抛出异常来处理这类异常,否则代码就无法编译通过。
ClassNotFoundException
FileNotFoundException
IOException
SQLException
非受检查异常(Unchecked Exception):不需要强制要求进行处理,程序可以处理也可以不处理,但是这种异常发生后如果不对其进行捕获和处理,则程序会抛出运行时异常并终止执行。
ArithmeticException
ArrayIndexOutOfBoundsException
ClassCastException
NullPointerException
此外,还有一种特殊的异常类型——Error,表示JVM自身的错误,通常不由应用程序处理。比较常见的错误有:
OutOfMemoryError
StackOverflowError
在Java中,异常是一个非常重要的概念,它可以帮助我们更好地管理代码中的错误情况并提高程序的健壮性。
3. hashcode 是什么 ,有什么作用
hashCode()是Java中的一个方法,用于返回对象的哈希码(hash code)值。哈希码是通过将对象的内部状态与某个固定值结合得到的一个整数,通常用于在散列表(hash table)等数据结构中确定对象的存储位置或查找索引。
每个Java对象都有一个默认的hashCode()方法实现:它将对象的内存地址转换为一个整数值,并且通常会重写该方法,以实现自定义的哈希算法,以提高哈希表等数据结构的性能。
哈希码具有以下作用:
在散列表中,哈希码使得程序可以快速定位并访问散列表中的元素,从而提高了程序的运行效率。
作为一种敏捷且可靠的方式来比较对象之间的内容,由于Java的equals()方法在判断两个对象是否相等时依赖于它们的哈希码,因此可以通过重写hashCode()方法确保equals()方法的正确性和一致性。
计算哈希码也是编写好的缓存、排序等算法中的非常重要的一部分,因为哈希算法可以对数据进行预处理,通过将不同的数据映射到不同的哈希值上,来提高算法的运行速度并降低耗时。
4. java中操作字符串有哪些类,他们之间有什么区别
在Java中,常用的操作字符串的类包括:
String:一个不可变、线程安全的字符序列。
StringBuilder:可变字符序列,线程不安全。通常应用在单线程环境下使用。
StringBuffer:可变字符序列,线程安全。通常应用在多线程环境下使用。
它们之间的主要区别在于可变性和线程安全性:
String是不可变的,即一旦字符串被创建,就不能被修改。因此,对String进行拼接、删除、插入等操作时会产生大量的中间对象,影响性能。
StringBuilder和StringBuffer都是可变字符序列,可以通过一系列方法对字符串进行操作,比如追加、删除、插入等。两者非常相似,但是StringBuffer是线程安全的,而StringBuilder是不安全的。
对于单线程场景,建议使用StringBuilder,因为其高效而且线程安全检查会降低程序运行速度。
对于多线程场景,由于StringBuilder不是线程安全的,可能会导致一些问题,这时候应该使用StringBuffer。
在日常的开发中,我们可以根据实际情况选择不同的操作字符串的类,并且尽量避免使用String进行频繁的字符串操作。
5. Java 中有哪些引用类型
在Java中,常见的引用类型包括以下几种:
强引用(Strong Reference):直接指向对象并且可达的引用,只要强引用存在,垃圾回收器就不会回收该对象。
软引用(Soft Reference):当系统内存空间不足时,垃圾回收器会根据一定的策略将软引用指向的对象进行回收。软引用通常被用于实现某些缓存机制,允许系统按需地回收内存。
弱引用(Weak Reference):比软引用的生命周期更短,在垃圾回收时会优先被回收。弱引用通常被用于实现某些特殊的数据结构,如关联数组、哈希表等。
虚引用(Phantom Reference):无法通过虚引用获取到对象的实例,其主要作用是在对象被垃圾回收器回收之前,提供对对象被回收的一种通知机制。
使用不同的引用类型可以帮助我们解决内存管理方面的问题,控制对象的生命周期,避免内存泄漏等情况。在实际开发中,我们应该根据实际需求和场景选择合适的引用类型,从而使得程序具有更好的性能和可靠性。