Java中的Final关键字与示例
时间:2020-02-23 14:34:09 来源:igfitidea点击:
在本教程中,我们将看到Java中的Final关键字。
Final关键字可以与下面内容一起使用:
- 变量
- 方法
- 类
当我们想要限制其他更改时,通常会使用Final决定。
让我们一直经历一下。
Final变量
如果我们制作任何可变的Final决赛,则不允许我们稍后更改其值。
它将是常量。
如果我们尝试更改值,则编译器会给我们错误。
让我们拍一个简单的例子:
package org.igi.theitroad; public class FinalExample{ final int count=10; public void setCount() { count=20; } }
在上面的示例中,我们将在突出显示的行下获取文本"Final FieldExamplemain.count"的编译错误。
空白Final变量
空白Final变量是在声明时未初始化的变量。
它只能在构造函数中初始化。
但如果我们没有初始化Final变量,则将获得如下编译错误。
package org.igi.theitroad; public class FinalExample { final int count; }
在上面的示例中,我们将在突出显示的行下获取文本"空白Final字段计数可能未初始化的空白Final的字段计数"。
我们可以在下面的构造函数中初始化Final变量一次。
package org.igi.theitroad; public class FinalExample { final int count; FinalExample(int count) { this.count=count; } public static void main(String args[]) { FinalExample fe=new FinalExample(10); System.out.println(fe.count); } }
以上代码将正常工作。
你可能会想到可能是什么。
假设我们有员工类,它有一个名为empno的属性。
创建对象后,我们不想更改EMPNO。
因此,我们可以在构造函数中宣告Final并初始化它。
静态空白Final变量
静态空白Final变量是静态变量,不会在声明时初始化。
它只能在静态块中初始化。
package org.igi.theitroad; public class FinalExample { static final int count; static { count=10; } public static void main(String args[]) { System.out.println(FinalExample.count); } }
运行上面的程序时,我们将得到以下输出:
10
Final方法
我们无法覆盖子类中的Final方法。
我们可以使用子类对象调用父类Final方法,但我们无法覆盖它。
package org.igi.theitroad; public class Shape{ public final void draw() { System.out.println("Draw method in shape class"); } } class Rectangle extends Shape { public void draw() { System.out.println("Draw method in shape class"); } public static void main(String args[]) { Rectangle rectangle= new Rectangle(); rectangle.draw(); } }
我们将在突出显示的行中获取编译错误,文本"无法从形状覆盖Final方法"。
如果从矩形类中删除绘制方法,它将正常工作。
package org.igi.theitroad; public class Shape{ public final void draw() { System.out.println("Draw method in shape class"); } } class Rectangle extends Shape { public static void main(String args[]) { Rectangle rectangle= new Rectangle(); rectangle.draw(); } }
运行上面的程序时,我们将得到以下输出:
Draw method in shape class
Final类
如果声明了一个类为Final,则没有其他类可以扩展它。
package org.igi.theitroad; final class Shape{ public final void draw() { System.out.println("Draw method in shape class"); } } class Rectangle extends Shape { public static void main(String args[]) { Rectangle rectangle= new Rectangle(); rectangle.draw(); } }
我们将在具有文本的突出显示的行下获取编译错误"类型矩形不能子类中组分Final类形状"。
Final关键字总结
- 我们可以使用变量,方法和类的Final关键字。
- 我们无法使用与构造函数的Final关键字。
- 如果不初始化Final变量(除非在构造函数中分配),则将获取编译错误。
- 一旦初始化,我们无法更改Final变量的值。
- 我们无法覆盖子类中的Final方法。
- 我们无法扩展任何Final程序。