Java基础 | 关于Final Static Abstract修饰需要注意的地方

概念:在Java编程语言中,final关键字是指在一些情况下用来定义一个只能被赋值一次的变量。因此一旦一个final变量被赋值,它的值就再也不能改变。而被final定义的类不能被继承。被final定义的方法则不能被重写。

在Java中,final是一个关键字,它只保证基本类型的不变性。并且保证变量只被赋值一次。如果一个对象是可变的,我们可以改变它的内容,即使它被定义为final。在本节中,我们将详细讨论final关键字的使用。

1.Final 修饰符

关键字final是一个非访问修饰符。如果要使用final关键字,必须在变量、方法和类之前指定它。它限制我们访问变量、方法和类。注意,最后的方法不能继承和重写。如果要存储在程序执行过程中不需要更改的值,则必须使用final关键字。通常,它用于赋常数值。例如,值PI=3.14, g=9.8。

在处理最后一个关键词时,要记住以下几点:

  • 在声明最后一个变量时初始化它。
  • 一个空白的final变量可以在实例初始化块或构造函数内部初始化。
  • 一个空白的最终静态变量可以在静态块中初始化。

让我们讨论一下final关键字的使用。

// a final variable  
final double PRICE;
final int COUNT = 5;
// a final static variable PI
static final double PRICE;
static final double PI = 3.141;
// Java Program to demonstrate Final
// with for-each Statement

// Main class
class GFG {

// Main driver method
public static void main(String[] args)
{

// Declaring and initializing
// custom integer array
int arr[] = { 1, 2, 3 };

// final with for-each statement
// legal statement
for (final int i : arr)
System.out.print(i + " ");
}
}

注意:

1. 修饰数据

声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。

  • 对于基本类型,final 使数值不变;
  • 对于引用类型,final 使引用不变,也就不能引用其它对象,但是被引用的对象本身是可以修改的。

final int x = 1;
// x = 2; // cannot assign value to final variable 'x'
final A y = new A();
y.a = 1;

2. 修饰方法

声明方法不能被子类重写。

private 方法隐式地被指定为 final,如果在子类中定义的方法和基类中的一个 private 方法签名相同,此时子类的方法不是重写基类方法,而是在子类中定义了一个新的方法。

3. 修饰类

声明类不允许被继承,声明为final的类称为final class。注意,不能继承final类。final类有两种用途,即防止继承和使类不可变。例如,所有包装器类都是final类,而String类是不可变类。

2.Static 修饰符

Java是一种流行的编程语言,用于生成软件程序和应用程序,它开发于90年代中期。Java与所有现代操作系统兼容。它的流行之处在于它提供了某些条款来确保应用程序范围内的安全性和可重用性,就像静态成员一样。

在Java中,static关键字主要用于确保和启用系统内存的有效管理以及公共属性的可重用性。我们可以对变量、方法、嵌套类以及代码块使用static关键字。Static在Java中用作非访问修饰符。Static关键字指示特定成员属于类型本身,而不是该特定类型的个别实例。这意味着只能创建该静态成员的单个实例,并且在类的所有实例之间共享。

要声明静态成员,无论它是块、变量、方法还是嵌套类,都需要在成员前面加上关键字static。当将成员声明为static时,可以在其任何类对象创建之前访问它,因为它独立于其类对象。

在下面的例子中,我们将创建一个静态方法,并看看如何在不引用其类的情况下调用它:

class Main // declaring a class name called staticTest
{
// Declaring a static method below
public static void myStaticmethod()
{
System.out.println("Hello, I was called from static method.");
}
public static void main(String[] args )
{
// Calling the static method without any object reference
myStaticmethod();
}
}

注意:

为什么main方法在Java是静态的?

Java中的main方法是静态的,因为我们不要求对象能够调用main方法。

如果它是一个非静态方法,那么我们首先需要JVM (Java Virtual Machine)来调用类对象,这将不是一个占用内存的进程,因为这样做将需要额外的内存。

我们可以对所有对象通用的任何属性使用静态变量。例如,如果我们有一个名为Student的类,那么所有Student对象将共享学院名称的相同属性,在这种情况下可以声明为静态变量。当静态变量的值独立于其类对象时,也可以使用静态变量。

存在继承的情况下,初始化顺序为:

  • 父类(静态变量、静态语句块)
  • 子类(静态变量、静态语句块)
  • 父类(实例变量、普通语句块)
  • 父类(构造函数)
  • 子类(实例变量、普通语句块)
  • 子类(构造函数)

3.Abstract 修饰符

如果一个方法只有声明而没有实现,也就是说,方法体中没有语句,那么它就被称为抽象方法。Java中的抽象方法以abstract关键字作为前缀。抽象方法只是子类提供其实现的契约。抽象方法不指定任何实现。方法声明不包含任何大括号,并以分号结束。

Java基础 | 关于Final  Static Abstract修饰需要注意的地方

可能需要一个类作为框架,为其他类提供特定的行为。子类提供它们的应用程序或特定于需求的行为,这些行为添加到现有框架的行为中。这样,就可以使用abstract关键字创建一个框架。抽象类不能实例化,但可以继承。子类必须实现基类中声明的抽象方法,否则必须声明为抽象。

abstract class OutlineProposal {

public abstract void DraftMemo();
public void CalcCosts(){
System.out.println("Costs");
}
}

代码所示,OutlineProposal是一个抽象类。它为派生自它的其他类定义了一个框架。DraftMemo()是在类OutlineProposal中声明的一个抽象方法。该方法的实现因类OutlineProposal派生的每个子类而异。

注意:

抽象方法没有主体(实现),它们只有方法签名(声明)。继承抽象类的类实现了抽象方法。

如果一个非抽象(具体)类继承了一个抽象类,那么这个类必须实现这个抽象类的所有抽象方法。否则,具体类也必须声明为抽象类。

因为抽象方法只有签名,所以它需要在末尾有分号(;)。

以下是与抽象修饰符相关的方法的其他修饰符的各种非法组合:

  • abstract native
  • abstract synchronized
  • abstract static
  • abstract private
  • abstract strictfp

4.总结

通过上面的教程,我们可以得出,Java提供了一些特性和属性,静态和抽象,这些特性和属性使Java在使用时安全、安全和健壮。这些导致Java仍然是开发以安全性为主要关注点的系统的一个非常流行的选择。这也是为什么我现在仍然选择重新学Java。

参考资料:

1.​​https://www.educba.com/final-keyword-in-java/​

2.​​https://www.thegeekdiary.com/using-abstract-keyword-in-java/​

3.​​https://www.tutorialspoint.com/abstract-keyword-in-Java​

4.​​https://www.geeksforgeeks.org/abstract-keyword-in-java/​

发表评论

相关文章