Java中最后一关键字有什么用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强>一。最终类强>
最后修饰的类,该类不能被继承。当你确认一个类永远不会被继承或不想被继承,那么就可以用最后修饰。
同样,对于接口(接口)和抽象类(抽象类),其本就是为了“多态”而设的计,自然无法用最后的关键字修饰
最终类中的成员方法默认也被隐式指定为最后方法。
<强>二。最后方法强>
最后修饰的方法不可被重写。
例子:
/* * ,*父类 ,* @author LH ,*/public class  FinalDemo1 { ,public final  void 测试(),{ ,, ,} }
<强>三。最后变量强>
最后变量包括成员变量和局部变量。变量类型包括基本数据类型,对象。
通过最后修饰局部基本类型变量(及其包装类),数值一经初始化(可以定义时初始化,也可以在使用前初始化)不可改变。如:
final int a =, 0; 时间=a 1;//报的错 final int b; 时间=b 1;//编译通过
通过最后修饰局部引用类型变量时,其引用的对象(内存地址)(可以定义时初始化,也可以在使用前初始化)不可改变,但对象中存放的数据可以改变
public static void main (String [], args), { ,final String str1 =,“helloWorld";=,str1 “helloChina"//编译出的错,字符串的不可变性,此处返回的是新的对象引用。 ,final StringBuilder sb =, new StringBuilder (“hello"); ,sb.append (“world");//编译通过=,,sb  new StringBuilder (“China");//编译出的错 }
最后修饰的成员变量必须在定义的时候直接初始化,否则会编译出错
public class FinalDemo1 { ,public final  int 年龄;//最后修饰的基本类型,编译出的错 ,public final  int age1 =, 20;//最后修饰的基本类型,编译通过 ,public final  StringBuilder 解决;//,最后修饰的引用类型,编译出的错 ,public final  StringBuilder address1 =, new StringBuilder(“中国“);//最后修饰的引用类型,编译通过 }
那么最后变量与普通变量之间到底有何区别,看下面的例子
public static void main (String [], args), { ,String str0 =,“helloWorldChina"; ,String str1 =,“helloWorld"; ,String str3 =, str1 +,“China";==,System.out.println (str0 str3);//假的 , ,final String str2 =,“helloWorld"; ,String str4 =, str2 +,“China";==,System.out.println (str0 str4);//真实的 , ,final String  str5;=,str5 “helloWorld"; ,String str6 =, str5 +,“China";==,System.out.println (str0 str6);//假的 }
str0==str3运行结果为假,这是因为通过“+”生成了一个新的字符串对象,返回的引用地址和str0不再一样,这在《Java基础(三)字符串深度解析》中有讲解。
那么str0==str4的执行结果为什么是真的吗?
通过最后修饰的变量,如果在编译期都可以知道确切值(定义变量的时候就初始化),那么在编译器会将其当做常量使用,所有用到该变量的地方就相当于直接使用该常量,字符串str4=str2 +“China"在编译期间都已经合并处理成字符串str4=癶elloWorldChina",因此str0与str4引用了常量池中同一个字符串字面量的地址,故而结果为真的。
而str0==str6的执行结果为假也很好理解
str5在编译期并不知道确切值,而是在使用之前才进行初始化,因此编译器无法事先进行合并处理,str6通过“+”生成了一个新的字符串对象,返回的引用地址和str0也不再一样。