关于Java中的fianl、finally、finalize的看法

fianl:是一个关键字可以用来修饰变量、方法和类

        1、修饰变量:如果修饰的是一个基本类型的变量(包括静态的和非静态的),那么表示这个变量的值被初始化之后将无法被更改,如果修饰的是一个对象,那么表示这个变量所指向的引用是不会变得,而这个对象里的内容是可以被修改的(类似于C语言中的指针,指针的指向无法被修改而指向的变量的值是可以被修改的)。

             注:被final修饰的变量初始化的方法有

                    1、如果该变量是非静态变量,则可以直接在定义时初始化、在初始块中初始化和在类的构造器中初始化。

                    2、如果该变量是静态变量,则可以直接在定义时初始化或在静态块中初始化。

        2、修饰方法:如果一个方法被final修饰符修饰,那么它就不可以被子类重写,但不影响它被子类继承。

        3.修饰类:fianl类不允许被继承,由于关键字abstract定义的抽象类含有必须由继承自它的子类重载实现的抽象方法,因此二者是冲突的,所以final和abstract不能修饰同一个类,同理fianl也不能用来修饰接口。fianl类相当于给这个类的所有方法加上final关键字,但变量却没有,也就是说fianl类变量的值并不是不可以该变的,要想做到fianl类变量的值不能改变必须给它增加final修饰符(由于final类不允许被继承,编译器在处理时把它的所有方法都当作final的,因此final类比普通类拥有更高的效率,比如String类)。

 

finally:fianlly语句只能用在try/catch语句后并且附带着一个语句块,表示这段语句最终总是被执行。意思是无论异常是否发生,只要执行到try块所包含的语句时,finally语句块总能被执行,而且return、continue、break都无法阻止,在执行这些语句前总要执行完finally块里的语句。

 

finalize:它是一个方法,属于java.lang.Object类,因此所有类都会有这个方法。它的作用是当对象被销毁时会自动调用finalize方法(类似于c++里的析构函数,当对象被delete掉时会被调用),Object的任意子类都可以重写该方法,可以在其中释放系统资源或者做其它的清理工作,如关闭输入输出流。但Java销毁对象的操作是由gc完成的,当对象被gc回收时会自动调用finalize方法,但是gc什么时候运行是由Java虚拟机控制的,有些对象的finalize()可能都没有被运行过,那么怎样保证所有对象的这个方法在JAVA虚拟机停止运行之前一定被调用呢?我们可以用 System.gc(); 来主动启动gc回收,但遗憾的是这个方法是不安全的,它会导致有用的对象finalize()也被调用,因此并不建议使用。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值