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程序。