无涯教程-Java - Non Access Modifiers函数

74 阅读4分钟

Java提供了许多非访问修饰符来实现许多其他功能。

  • static修饰符 : 用于创建类方法和变量的 。

  • final 修饰符 :用于最终确定类,方法和变量。

  • abstract 修饰符:用于创建抽象类和方法。

  • volatile 修饰符:用于线程的已同步。

static (Static)修饰符

Static变量

static 关键字用于创建独立于为该类创建的任何而存在的变量。无论类的数量如何,static 变量只有一个副本存在。

static 变量也称为类变量。局部变量不能声明为static 。

Static方法

static关键字用于创建将独立于为该类创建的任何存在的方法。

静态方法不使用定义它们的类的任何对象的任何变量。静态方法从参数中获取所有数据,并从这些参数中计算出某些内容,而不引用变量。

可以使用类名称,后跟点和变量或方法的名称来访问类变量和方法。

public class InstanceCounter {

   private static int numInstances=0;

   protected static int getCount() {
      return numInstances;
   }

   private static void addInstance() {
      numInstances++;
   }

   InstanceCounter() {
      InstanceCounter.addInstance();
   }

   public static void main(String[] arguments) {
      System.out.println("Starting with " + InstanceCounter.getCount() + " instances");

      for (int i=0; i < 500; ++i) {
         new InstanceCounter();
      }
      System.out.println("Created " + InstanceCounter.getCount() + " instances");
   }
}

这将产生以下输出-

Started with 0 instances
Created 500 instances

Final修饰符

Final变量

最终变量只能显式初始化一次。声明为final的引用变量永远不能重新分配以引用其他对象。

但是,可以更改对象内的数据。因此,可以更改对象的状态,但不能更改引用的状态。

对于变量, final 修饰符通常与 static 一起使用,以使常量成为类变量。

public class Test {
   final int value=10;

//The following are examples of declaring constants: public static final int BOXWIDTH=6; static final String TITLE="Manager";

public void changeValue() { value=12; //= an error } }

Final方法

最终方法不能被任何子类覆盖。如前所述,final修饰符可防止在子类中修改方法。

您可以在类声明中使用 final 修饰符声明方法,如以下示例所示:

public class Test {
   public final void changeName() {
      //body of method
   }
}

Final 类

使用声明为 final 的类的主要目的是防止该类被子类化。如果将某个类标记为final,则任何类都不能从final类继承任何功能。

public final class Test {
   //body of class
}

Abstract修饰符

Abstract类

抽象类永远无法化。如果将一个类声明为抽象类,则其唯一目的是扩展该类。

一个类不能同时是抽象类和最终类(因为不能扩展最终类)。如果一个类包含抽象方法,则该类应声明为抽象。否则,将引发编译错误。

抽象类可以同时包含抽象方法和常规方法。

abstract class Caravan {
   private double price;
   private String model;
   private String year;
   public abstract void goFast();   //an abstract method
   public abstract void changeColor();
}

Abstract方法

抽象方法是声明的没有任何实现的方法。方法主体(实现)由子类提供。抽象方法决不能是最终的或严格的。

任何扩展抽象类的类都必须实现超类的所有抽象方法,除非子类也是抽象类。

抽象方法以分号结尾。Example:public abstract sample();

public abstract class SuperClass {
   abstract void m();   //abstract method
}

class SubClass extends SuperClass { //implements the abstract method void m() { ......... } }

Synchronized修饰符

这是用于指示一种方法一次只能由一个线程访问的关键字。同步修改器可以与四个访问级别修改器中的任何一个一起应用。

public synchronized void showDetails() {
   .......
}

Transient 修饰符

变量被标记为瞬态,以指示JVM在序列化包含该变量的对象时跳过该特定变量。

该修饰符包含在创建变量的语句中,该语句位于变量的类或数据类型之前。

public transient int limit=55;   //will not persist
public int b;   //will persist

Volatile 修饰符

volatile修饰符用于让JVM知道访问该变量的线程必须始终将其自身的变量私有副本与内存中的主副本合并。

public class MyRunnable implements Runnable {
   private volatile boolean active;

public void run() { active=true; while (active) { //line 1 //some code here } }

public void stop() { active=false; //line 2 } }

通常,在一个线程(您使用Runnable开始的那个线程)中调用run(),从另一个线程调用stop()。如果在第1行中使用了缓存的active值,则在第2行中将active设置为false时,循环可能不会停止,这就是您要使用 volatile 的时候。

参考链接

www.learnfk.com/java/java-n…