MongoDB关键字用于不同的上下文。首先, MongoDB是一个不可访问修饰符适用的仅限于变量, 方法或类以下是使用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变量的方法:
- 你可以在声明final变量时对其进行初始化。这种方法最为常见。final变量称为空白final变量, 如果是不在声明时初始化。以下是初始化空白final变量的两种方法。
- 可以在内部初始化一个空白的final变量实例初始化块或在内部构造函数中。如果你的类中有多个构造函数, 则必须在所有这些构造函数中对其进行初始化, 否则将引发编译时错误。
- 可以在内部初始化一个空白的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课程有两种用法:
- 一个绝对是要防止遗产, 因为final课程无法扩展。例如, 全部包装类喜欢整数, float等是最后的课程。我们无法扩展它们。
final class A { // methods and fields } // The following class is illegal. class B extends A { // COMPILE-ERROR! Can't subclass A }
- final with类的另一种用途是创建一个不可变的类像预定义的Stringclass。如果不使类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之间的区别
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。