final、finally 和 finalize的区别

final:如果一个变量或方法参数被final修饰,就表示它只能被赋值一次,但是JAVA虚拟机为变量设定的默认值不记作一次赋值。

final的用途

  • 可用来定义变量,包括静态变量和非静态变量。
  • 可用来定义方法传入的参数。
  • 可用来定义类。
  • 可用来定义方法。

修饰变量:修饰基本类型,赋予它的值是不可变的,即是常量;修饰的是一个对象,这个对象的引用是不可变的,但是对象本身还是可以变得。修饰变量必须得初始化。

     初始化可在:

  •  自定义时初始化(所有变量)。
  • 初始化块中初始化(非静态变量)。
  • 静态初始化块中初始化(静态变量)。
  • 构造函数中初始化(静态与非静态变量)。

final修饰的变量更有效率,应该尽可能多将普通变量替换为final变量。

修饰方法:final修饰的方法可以被继承但不可以被重写。
修饰类:final修饰的类是不可以被继承的。例如String类就是final的,表示不可变的。final类不可被继承,final的所有方法都默认为final。

finally:finally只能跟在try/catch语句中,并且附带一个语句块,表示最后执行。但是也会有不 一定的时候,当try/catch中有return、break、continue就会改变这种状况。编译器会先执行finally语句块,再执行 return,break,continue。

public final class FinallyTest {  

    // 测试return语句
    public ReturnClass testReturn() {
        try {
            return new ReturnClass();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("执行了finally语句");
        }
        return null;
    }  

    // 测试continue语句
    public void testContinue() {
        for (int i = 0; i < 3; i++) {
            try {
                System.out.println(i);
                if (i == 1) {
                    continue;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                System.out.println("执行了finally语句");
            }
        }
    }  

    // 测试break语句
    public void testBreak() {
        for (int i = 0; i < 3; i++) {
            try {
                System.out.println(i);
                if (i == 1) {
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                System.out.println("执行了finally语句");
            }
        }
    }  

    public static void main(String[] args) {
        FinallyTest ft = new FinallyTest();
        // 测试return语句
        ft.testReturn();
        System.out.println();
        // 测试continue语句
        ft.testContinue();
        System.out.println();
        // 测试break语句
        ft.testBreak();
    }
}  

class ReturnClass {
    public ReturnClass() {
        System.out.println("执行了return语句");
    }
}  

运行结果:

执行了return语句
执行了finally语句

0
执行了finally语句
1
执行了finally语句
2
执行了finally语句

0
执行了finally语句
1
执行了finally语句

finalize:

方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。注意:finalize不一定被jvm调用,只有当垃圾回收器要清除垃圾时才被调用。

时间: 2024-09-21 11:38:33

final、finally 和 finalize的区别的相关文章

Java中final、finally、finalize的区别(转)

Java中final.finally.finalize的区别与用法,困扰了不少学习者,下面我们就这个问题进行一些探讨,希望对大家的学习有所帮助. 方法/步骤 1 简单区别: final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承. finally是异常处理语句结构的一部分,表示总是执行. finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等. END 方法/步骤2 1 中等区别: 虽然这三

final、finally、finalize的区别

1.final 修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 abstract的,又被声明为final的.将变量或方法声明为final,可以保证它们在使用中不被改变.被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改.被声明为final的方法也同样只能使用,不能重载. 一句话:final修饰类时:没有祖先的光棍(不能继承也不能被继承),final修饰变量或者方法时:固定的,只能拿来用,不能改

【动力节点java培训】final, finally, finalize的区别

[动力节点java培训]final, finally, finalize的区别 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承.finally是异常处理语句结构的一部分,表示总是执行.finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等. 如果您对动力节点有兴趣,可以登录官网看看免费教学视频:http://dwz.cn/29yALNN java学习交流QQ群:425

java中final,finally和finalize的区别

final,finally和finalize的区别: final:最终的意思,可以修饰类,成员变量,成员方法 修饰类,类不能被继承 修饰变量,变量是常量 修饰方法,方法不能被重写 finally:是异常处理的一部分,用于释放资源 一般来说,代码肯定会执行,特殊情况,在执行finally之前jvm退出了 finalize:是Object类的一个方法,用于垃圾回收

Android源码中final关键字的用法及final,finally,finalize的区别

Android开发的学习流程 final,finally,finalize的区别 Android的发展越来越快,Android开发人员越来越多,当两种情况碰撞,在诸多开发者中跟紧Android步伐脱颖而出就显得十分必要,虽然Android开发行业薪资高,潜力大,但人往高处走,有更大的上升空间就一定要抓住机会,Android开发行业其实很简单,高技能行业行业唯一重要的要求就是技能,所以学好Android开发直接关系到未来的职业发展,千锋Android培训机构作为行业最具权威的Android研发和人

Java基础知识总结--final、finally、finalize的区别

谈谈final.finally.finalize的区别 1.final修饰符:如果一个类被声明为final,意味着这个类不能再被派生出新的子类,不能作为父类被别的类继承.因此,一个类不能即被声明为abstract又被声明为final.将变量或者方法声明为final,可以保证他们在使用中不会被改变.其初始化可以在两个地方进行:一个就是 在定义处,在final变量定义时直接给其赋值,二就是在构造函数中,这两个地方只能任选其一,并且在以后的引用中只能读取不能修改,别声明为final的方法只能使用,不能

final、finally与finalize的区别?

一.final.finally与finalize的区别 final:final是一个修饰符,可以修饰类,方法和变量.final修饰类表示类不能被其它类继承,并且该类中的所有方法都会隐式的被final修饰.final修饰方法,则该方法不能被重写,若父类中final方法的访问权限为private,将导致子类中不能直接继承该方法,因此,此时可以在子类中定义相同方法名的函数,此时不会与重写final的矛盾,而是在子类中重新地定义了新方法.当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初

Java中final与 static final 修饰的常量的区别

喵喵开车,新手上路,多多关照.有任何错误请在评论区指出. ...........................................我是万恶的分界线( ? ?ω?? )?......................................... final:用来修饰类,变量,方法: final修饰的类不能有子类,也不能被继承. final修饰的变量是一个常量,不能重新赋值. final修饰的方法不能重写 现在就说明final修饰的常量① 与 static final 修饰的常

final 和 static之间的区别和联系

关键字final和关键字static两者的含义并不相似,但是笔者常常使用一段时间后就会忘记它们之间的区别,因为它俩总是相伴着出现.当只出现其中一个时,就对其代表的含义不甚清晰了.故而特地将相关知识点记下,便于每次遗忘时查阅. final final关键字顾名思义代表"最后的",意味着不能被更改.它的定义,可以概括地分为以下三点: 被final修饰的类不能被继承: 被final修饰的方法不能被重写: 被final修饰的变量不能被改变.注:引用类型的变量,引用不可变,但是引用所指向的内容是

final .....finally ...... 和Finalize ......区别

一.性质不同 (1)final为关键字: (2)finalize()为方法: (3)finally为为区块标志,用于try语句中: 二.作用 (1)final为用于标识常量的关键字,final标识的关键字存储在常量池中(在这里final常量的具体用法将在下面进行介绍): (2)finalize()方法在Object中进行了定义,用于在对象"消失"时,由JVM进行调用用于对对象进行垃圾回收,类似于C++中的析构函数:用户自定义时,用于释放对象占用的资源(比如进行I/0操作): (3)fi