Java中的final关键字介绍和用法指南

2021年3月29日18:37:17 发表评论 715 次浏览

MongoDB关键字用于不同的上下文。首先, MongoDB是一个不可访问修饰符适用的仅限于变量, 方法或类以下是使用final的不同上下文。

Java中的final关键字

final变量

当用MongoDB关键字, 其值本质上不能修改为常数。这也意味着你必须初始化一个final变量。如果final变量是引用, 则意味着该变量无法重新绑定以引用另一个对象, 但是可以更改该引用变量所指向的对象的内部状态, 即可以在其中添加或删除元素final数组或final集合。优良作法是使用下划线分隔单词, 以大写形式表示final变量。

例子 :

// a final variable
final int THRESHOLD = 5;
// a blank final variable
final int THRESHOLD;
// a final static variable PI
static final double PI = 3.141592653589793;
// a  blank final static  variable
static final double PI;

初始化final变量:

我们必须初始化一个final变量, 否则编译器会抛出编译时错误。一个final变量只能通过

初始化器

或分配声明。有三种初始化final变量的方法:

  1. 你可以在声明final变量时对其进行初始化。这种方法最为常见。final变量称为空白final变量, 如果是不在声明时初始化。以下是初始化空白final变量的两种方法。
  2. 可以在内部初始化一个空白的final变量实例初始化块或在内部构造函数中。如果你的类中有多个构造函数, 则必须在所有这些构造函数中对其进行初始化, 否则将引发编译时错误。
  3. 可以在内部初始化一个空白的final静态变量静态块.

让我们通过示例查看以上不同的初始化final变量的方式。

//Java program to demonstrate different
// ways of initializing a final variable
  
class Gfg 
{
     // a final variable
     // direct initialize
     final int THRESHOLD = 5 ;
      
     // a blank final variable
     final int CAPACITY;
      
     // another blank final variable
     final int  MINIMUM;
      
     // a final static variable PI
     // direct initialize
     static final double PI = 3.141592653589793 ;
      
     // a  blank final static  variable
     static final double EULERCONSTANT;
      
     // instance initializer block for 
     // initializing CAPACITY
     {
         CAPACITY = 25 ;
     }
      
     // static initializer block for 
     // initializing EULERCONSTANT
     static {
         EULERCONSTANT = 2.3 ;
     }
      
     // constructor for initializing MINIMUM
     // Note that if there are more than one
     // constructor, you must initialize MINIMUM
     // in them also
     public GFG() 
     {
         MINIMUM = - 1 ;
     }
          
}

何时使用final变量:

普通变量和final变量之间的唯一区别是, 我们可以将值重新分配给普通变量, 但是一旦分配, 就无法更改final变量的值。因此, final变量必须仅用于我们希望在程序执行期间保持恒定的值。

参考final变量:

当final变量是对对象的引用时, 则此final变量称为引用final变量。例如, final的StringBuffer变量看起来像

final StringBuffer sb;

如你所知, 不能重新分配final变量。但是在引用final变量的情况下, 可以更改该引用变量指向的对象的内部状态。请注意, 这不是重新分配。该属性MongoDB叫做非及物性。要了解对象内部状态的含义, 请参见以下示例:

// Java program to demonstrate 
// reference final variable
  
class Gfg
{
     public static void main(String[] args) 
     {
         // a final reference variable sb
         final StringBuilder sb = new StringBuilder( "Geeks" );
          
         System.out.println(sb);
          
         // changing internal state of object
         // reference by final reference variable sb
         sb.append( "ForGeeks" );
          
         System.out.println(sb);
     }    
}

输出如下:

Geeks
lsbin

的非及物性该属性也适用于数组, 因为数组是Java中的对象。具有final关键字的数组也称为final数组.

注意 :

如上所述, final变量无法重新分配, 否则将引发编译时错误。

// Java program to demonstrate re-assigning
// final variable will throw compile-time error
  
class Gfg 
{
     static final int CAPACITY = 4 ;
      
     public static void main(String args[])
     {
         // re-assigning final variable
         // will throw compile-time error
         CAPACITY = 5 ;
     }
}

输出如下

Compiler Error: cannot assign a value to final variable CAPACITY

在方法/构造函数/块内创建final变量时, 它称为局部final变量, 并且必须在创建它的位置初始化一次。有关本地final变量, 请参见以下程序

// Java program to demonstrate
// local final variable
  
// The following program compiles and runs fine
  
class Gfg
{
     public static void main(String args[])
     {
         // local final variable
         final int i;
         i = 20 ; 
         System.out.println(i);
     }
}

输出如下:

20

注意C ++之间的区别

const

变量和Java

MongoDB

变量。声明时, 必须为C ++中的const变量分配一个值。对于Java中的final变量, 没有必要在上面的示例中看到。final变量可以稍后分配值, 但只能分配一次。

MongoDB

foreach循环

:最后带有for-each声明的是法律声明。

// Java program to demonstrate final
// with for-each statement
  
class Gfg 
{
     public static void main(String[] args) 
     {
         int arr[] = { 1 , 2 , 3 };
          
         // final with for-each statement
         // legal statement
         for ( final int i : arr)
             System.out.print(i + " " );
     }    
}

输出如下:

1 2 3

说明:由于i变量在循环的每次迭代中都超出范围, 因此实际上每次迭代都会重新声明, 从而允许将相同的标记(即i)用于表示多个变量。

期末课程

当一个类被声明为MongoDB关键字, 它称为final课程。final课程无法扩展(继承)。final课程有两种用法:

  1. 一个绝对是要防止遗产, 因为final课程无法扩展。例如, 全部包装类喜欢整数, float等是最后的课程。我们无法扩展它们。
    final class A
    {
         // methods and fields
    }
    // The following class is illegal.
    class B extends A 
    { 
        // COMPILE-ERROR! Can't subclass A
    }
    
  2. final with类的另一种用途是创建一个不可变的类像预定义的Stringclass。如果不使类final化, 则不能使它不可变。

final方法

当方法声明为MongoDB关键字, 它称为final方法。final方法不能是覆写。的Objectclass这样做-它的许多方法都是final方法。我们必须使用final关键字声明方法, 在所有派生类中, 我们都需要采用final关键字执行相同的实现。以下片段通过方法说明了final关键字:

class A 
{
    final void m1() 
    {
        System.out.println("This is a final method.");
    }
}

class B extends A 
{
    void m1()
    { 
        // COMPILE-ERROR! Can't override.
        System.out.println("Illegal!");
    }
}

有关final方法和final类的更多示例和行为, 请参阅将final与继承一起使用

请参阅Java抽象关于final和摘要之间差异的文章。

相关面试问题(重要):Java中final, final和finalize之间的区别

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: