【Java】Java核心要点总结 68

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。【Java】Java核心要点总结 68,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在这里插入图片描述

1. 为什么重写 equals() 时候必须重写 hashCode()

因为两个相等的对象的 hashCode 值必须是相等。也就是说如果 equals 方法判断两个对象是相等的,那这两个对象的 hashCode 值也要相等。

如果重写 equals() 时没有重写 hashCode() 方法的话就可能会导致 equals 方法判断是相等的两个对象,hashCode 值却不相等。

2. 字符串常量池

字符串常量池 是 JVM 为了提升性能和减少内存消耗针对字符串(String 类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建。

3. 字符串中的 intern() 方法

String.intern() 是一个 native(本地)方法,其作用是将指定的字符串对象的引用保存在字符串常量池中,可以简单分为两种情况:

● 如果字符串常量池中保存了对应的字符串对象的引用,就直接返回该引用。

● 如果字符串常量池中没有保存了对应的字符串对象的引用,那就在常量池中创建一个指向该字符串对象的引用并返回。

4. try-catch-finally

注意:不要在 finally 语句块中使用 return! 当 try 语句和 finally 语句中都有 return 语句时,try 语句块中的 return 语句会被忽略。这是因为 try 语句中的 return 返回值会先被暂存在一个本地变量中,当执行到 finally 语句中的 return 之后,这个本地变量的值就变为了 finally 语句中的 return 返回值。

以下代码会输出啥:

int a = 10;
try {
    int b = a / 0;
    return a;
}catch (Exception e){
    return 20;
}finally {
    a =  30;
    return a;
}
int a = 10;
try {
    int b = a / 0;
    return a;
}catch (Exception e){
    return 20;
}finally {
    a =  30;
}
int a = 10;
try {
    int b = a / 1;
    return a;
}catch (Exception e){
    return 20;
}finally {
    a =  30;
}

详解

    执行流程:
            1. 先计算返回值, 并将返回值存储起来, 等待返回
            2. 执行finally代码块
            3. 将之前存储的返回值, 返回出去;
    需注意:
            1. 返回值是在finally运算之前就确定了,并且缓存了,不管finally对该值做任何的改变,返回的值都不会改变。 SO:

上面的输出分别为:30 20 10

5. finally 中的代码不一定会执行

在编程中,使用try-catch-finally块时,finally中的代码确实有些情况下可能不会执行。以下是几种情况:

  • 程序终止:如果在try或catch块之前发生了无法恢复的错误或程序异常终止,那么finally中的代码将不会执行。

  • 线程终止:如果在try或catch块中的线程被强制终止,那么finally中的代码也不会执行。

  • 关闭JVM:如果在try或catch块中关闭了Java虚拟机(JVM),则finally中的代码不会执行。

需要注意的是,这些情况属于异常情况,一般情况下finally中的代码都会执行。finally块通常用于确保资源的释放或清理,无论是否有异常抛出。

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/162138.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!