当前位置: 首页 > 后端技术 > Java

Javafinal关键字总结

时间:2023-04-01 18:21:56 Java

final关键字final关键字主要用于防止数据被修改,保证代码安全。可用于修饰:类、方法、变量、类中的参数;修饰类的相关代码finalclassPerson{}//错误,无法继承final修饰类的概念classStudentextendsPerson{}当使用final关键字修饰一个类时,表示该类不能被继承,所有默认情况下,类中的方法是最终的。用final修饰一个类可以防止它被继承。比如JDK代码中的java.lang.String类被final修饰,从而防止被其他类继承,导致内部逻辑被破坏。修改类中的方法代码classPerson{//禁止子类重写该方法并修改其含义}}classStudentextendsPerson{//报错,禁止重写父类的方法@OverridefinalStringgetIdentity(){return"IamaStudent!";}}概念当我们不希望子类重写父类的方法时,可以在修改父类方法定义时使用final修饰。这样子类就不能重写父类的这个方法了。修改变量代码publicstaticvoidmain(String[]args){finalintnum;最终对象o;数=10;o=新对象();//接下来的两行是错误的num=20;o=newObject();}publicclassTest{//类中的final成员变量必须在构造函数中初始化privatefinalObjectobject;publicTest(){this.object=newObject();}//报错,被final修饰的成员变量必须保证在类中的构造函数执行后,该变量被初始化!!!publicTest(Objectobject){}}的概念就是我们使用final关键字修饰变量的时候。当被修饰的变量是内置类型时,一旦初始化完成,变量的值就不能被修改。当被修饰的变量为引用类型时,一旦初始化完成,变量中的对象引用将不会指向其他对象,但可以修改对象内部的内容。我们在使用final修饰成员变量的时候,一定要保证在类中的构造函数执行完之后,这个变量就被初始化了。使用final修饰变量可以防止数据被修改,保证安全。修改参数代码publicvoidtestInnerType(finalintnum){num=10;//错误:无法为最终变量“num”赋值;}publicvoidtestObject(finalObjecto){o=newObject();//error:Cannotassignavaluetofinalvariable'o';}这个概念使用final来修饰参数,虽然可以保持参数不被修改,但是没有任何意义。Java中的内置类型作为参数来复制值。使用final修饰参数保证形参不被修改,但不保证实参一定被修改。Java中的引用类型是作为参数复制的,相当于给实参指向的对象加上一个引用。用final修饰参数保证了形参不会修改它指向的对象,不保证实参一定会被修改。所以用final修饰参数并不能阻止实际参数被修改,所以不需要在参数中加上final。如果形参没有被方法修饰,则需要用final修饰。