关于final关键字说法正确的是,static和final关键字一般在什么情况下使用
如何解决写爬虫IP受阻的问题?立即使用。
前言:
果然,在最后一次面试中,面试官又问了这个问题:请告诉我最后一个关键词的具体含义,并详细说明它的作用和它与static的区别。为了让面试的大家都关注到这个问题,我特意整理了一下答案,供大家参考。
1、最后一个关键字的含义
表面意义是不变的,不变的;类似于C语言中的const关键字,指的是不能改变的量,不同于静态标量static。静态变量仅指一个存储空间,其值可以改变。之所以用final,是从软件设计的角度出发,因为别人看到final这个关键词就知道是什么意思,他们就明白了其中的意思。但是,正是因为这种‘语义’的存在,所以在编程中要谨慎使用,避免误用。
Java中,最后的修饰是常量,变量名要大写;
数学类:公共静态final double e=2.7854.888000000884公共静态final double PI=
.java源代码中很多变量都是用final修饰的。
2、终审的作用
根据最终修改位置的不同功能,有三种情况:
(1)修改变量,final修改的变量必须初始化,初始值赋值后不能重新赋值。
注意:局部变量不在我们讨论的范围内,因为局部变量有自己的作用范围,不会被private、public等词修饰。
(2)修改方法,final modification所代表的方法不能重写。
(3)由final修饰的修饰类不能被继承。
注意:对于最终修饰的类,类中的所有成员方法都被隐式指定为最终方法。
2.1、最终修改变量
final修饰的变量必须通过三种方式初始化:1)在定义时初始化,2)在构造函数中设置值,3)在非静态块中为final实例变量设置值。
一个最终修改的变量意味着这个变量在初始化后不能被改变。这里的不可变是指它的值对于基本类型是不可变的,但是它对于对象变量的引用是不可变的,也就是不能指向其他对象。
公共类Test01{
final int x1=10000
最终int x2
最终int x3
{
x2=20000
}
公共exe3(){
this.x3=3000
}
}如果final修改的变量是对象类型,那么不可变意味着变量不能再指向另一个对象,但是对象的值可以改变,比如:
最终操作Operate=new Operate();//operate有一个公共变量I初始化为10operate.i=11
operate.i=12
system . out . println(operate . I);//Output 12以上是自定义类。即使是数组、列表等集合类型,保存的值也是可以更改的。3.最终和静态的区别
Static作用于成员变量表示只保存一个副本,而final的作用是保证变量不可变。看看网上的一个例子:
公共类测试{
公共静态void main(String[] args) {
my class my class 1=new my class();
my class my class 2=new my class();
system . out . println(my class 1 . I);
system . out . println(my class 1 . j);
system . out . println(my class 2 . I);
system . out . println(my class 2 . j);
}
}
MyClass类{
公共final double I=math . random();
公共静态double j=math . random();
}
//运行结果,打印两次,J的值是一样的。j是静态类型,属于类,所以值两次都一样。不是静态的,因此属于对象,但I的值是不可变的。(学习视频分享:java视频教程)
4.其他最终相关知识
(1)使用final关键字,如果编译器可以在编译阶段确定某个变量的值,那么编译器会将该变量作为编译时常数使用。如果需要在运行时确定,那么编译器不会优化相关代码。
公共类测试{
公共静态void main(String[] args) {
String a= hello2
最终字符串b= hello
String d= hello
字符串c=b ^ 2;
字符串e=D2;
system . out . println((a==c));
system . out . println((a==e));
}
}
//final类型,可以在编译阶段确定值。
//编译时无法确定非最终类型
输出:
真实的
错误的
公共类测试{
公共静态void main(String[] args) {
String a= hello2
最终字符串b=get hello();
字符串c=b ^ 2;
system . out . println((a==c));
}
公共静态字符串getHello() {
回‘你好’;
}
}
//即使是最终类型,在编译阶段也无法确定值。True output (2)注意不要混淆final和finally、finalize()等。
(3)将类、方法和变量声明为final可以提高性能,让JVM有机会估算,然后优化。
(4)接口中的变量都是public static final。
推荐:java面试问答
原文链接:http://www.cnblogs.com/liun1994/p/6691094.html
作者:一个90多岁的浪子就是面试官:请详细解释一下final关键字的作用以及它和static区别的细节。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。