Java中最后一关键字有什么用

  

Java中最后一关键字有什么用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强>一。最终类

最后修饰的类,该类不能被继承。当你确认一个类永远不会被继承或不想被继承,那么就可以用最后修饰。

癑ava中最后一关键字有什么用“

同样,对于接口(接口)和抽象类(抽象类),其本就是为了“多态”而设的计,自然无法用最后的关键字修饰

癑ava中最后一关键字有什么用“

癑ava中最后一关键字有什么用“

最终类中的成员方法默认也被隐式指定为最后方法。

<强>二。最后方法

最后修饰的方法不可被重写。

例子:

/* *   ,*父类   ,* @author  LH   ,*/public  class  FinalDemo1  {   ,public  final  void 测试(),{   ,,   ,}   }

癑ava中最后一关键字有什么用“

<强>三。最后变量

最后变量包括成员变量和局部变量。变量类型包括基本数据类型,对象。

通过最后修饰局部基本类型变量(及其包装类),数值一经初始化(可以定义时初始化,也可以在使用前初始化)不可改变。如:

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也不再一样。

Java中最后一关键字有什么用