final finalize

编程入门 行业动态 更新时间:2024-10-28 00:18:25

<a href=https://www.elefans.com/category/jswz/34/1760418.html style=final finalize"/>

final finalize

finalize() 是Object里面的一个方法,当一个堆空间中的对象没有被栈空间变量指向的时候,这个对象会等待被jvm回收:jdk里面是这样实现的:

protected void finalize() throws Throwable { }
}

1、final变量

final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常,由final定义的变量为常量。

被final修饰的变量是一个常量只能被赋值一次

例如,在类中定义PI值,可以使用如下语句:

public static final double PI_VAULE = 3.14;

规范:被定义为final的常量定义时需要使用大写字母命名,并且中间使用下划线进行连接

全局常量:

我们知道一个被定义为final的对象引用只能指向唯一一个对象,不可以将它再指向其它对象,但是一个对象的值却是可以改变的

比如:

 final StringBuffer sb=new StringBuffer("abc");sb=new StringBuffer("cde");
对sb重新赋值 会出现编译错误,被final修饰的变量是不能重新赋值的;sb.append("ced");
是可以编译通过的。

那么为了使一个常量真正做到不可更改,可以将常量声明为static final。


全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。

全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。

这两者在存储方式上并无不同。

这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。

而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。


1.被final修饰而没有被static修饰的类成员变量只能在三种情况下初始化

/*
1.创建的时候立即初始化
2.创建之后由构造方法初始化
3.创建之后由代码块初始化
*/class Test {final int b = 2;final int c;public Test() {c = 3;}final int a;{a = 1;}
}public class TestMode {static Test abc = new Test();public static void main(String[] args) {System.out.println(abc.a);System.out.println(abc.b);System.out.println(abc.c);}
}

2.被final修饰的类属性会被作为编译期常量加入常量池,以后访问对应类的常量池,不会在常量池中保存一个指向Test类a字段的符号引用,不触发类的初始化

class Test {final static int a = 1;static {System.out.println("访问编译期常量不触发类初始化");}
}public class TestMode {public static void main(String[] args) {System.out.println(Test.a);}
}

主要是为了“效率” 和 “安全性” 的缘故,不可以被继承。

1 性能(效率)

如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。

2 安全性

String类的内部好多方法的实现都不是Java编程语言本身编写的,好多方法都是调用的操作系统本地的API,也就是“本地方法调用”,这种类是非常底层的,和操作系统交流频繁的,那么如果这种类可以被继承的话,如果我们再把它的方法重写了,往操作系统内部写入一段具有恶意攻击性质的代码什么的,这不就成了核心病毒了么?

3 天生服务型

当时设计时,就是不希望别人改,这个类就像一个工具一样,类的提供者给我们提供了,就希望我们直接用就完了,不想让我们随便能改,其实说白了还是安全性,如果随便能改了,那么Java编写的程序肯定就很不稳定。

更多推荐

final finalize

本文发布于:2023-07-28 18:02:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1269888.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:final   finalize

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!