Latest web development tutorials

modificatori Java

linguaggio Java fornisce molti modificatori, suddivisi nelle seguenti categorie:

  • modificatore di accesso
  • modificatore di accesso non

Modificatore utilizzato per definire la classe, metodo o variabile, di solito in prima linea della dichiarazione. Attraverso il seguente esempio per illustrare:

public class className {
   // ...
}
private boolean myFlag;
static final double weeks = 9.5;
protected static final int BOXWIDTH = 42;
public static void main(String[] arguments) {
   // 方法体
}

modificatore di controllo accessi

Java, è possibile utilizzare i caratteri di controllo di accesso per proteggere l'accesso alle classi, variabili, metodi e costruttori. Java supporta quattro diversi diritti di accesso.

Per impostazione predefinita, noto anche come il difetto, visibile all'interno dello stesso pacchetto, non utilizzare il modificatore.

Privato, per non viene specificato il modificatore privato, visibile all'interno della stessa classe.

Ci sono, per specificare il modificatore pubblico, visibile a tutte le classi.

Protetta, modificatore protetta specifica che, per tutte le classi e sottoclassi all'interno dello stesso package visibile.

L'accesso predefinito modificatore - non utilizzare le parole chiave

Utilizzare variabili e metodi dichiarati nel modificatore di accesso predefinito per la classe all'interno dello stesso pacchetto è visibile. Interfaccia in cui le variabili sono implicitamente dichiarate come static final pubblica, e l'interfaccia in cui il metodo di accesso predefinito per il pubblico.

esempio:

Dichiarazione Nell'esempio seguente, variabili e metodi non può utilizzare qualsiasi modificatore.

String version = "1.5.1";
boolean processOrder() {
   return true;
}

Accesso privato modificatore-privato

accesso modificatore privato è il livello più rigoroso di accesso, si è dichiarato come metodi privati, variabili, e appartiene al costruttore della classe si può accedere solo, e le classi e le interfacce non può essere dichiarato privata.

Le variabili dichiarate come tipo di accesso privato può accedere solo al di fuori della classe attraverso class metodo getter pubblico.

Accesso privato modificatore utilizzato principalmente per la classe di protezione dettagli di implementazione e dati dietro di classe.

Le seguenti classi utilizzano il modificatore di accesso privato:

public class Logger {
   private String format;
   public String getFormat() {
      return this.format;
   }
   public void setFormat(String format) {
      this.format = format;
   }
}

Esempio, variabile formato classe Logger è una variabile privata, quindi le altre classi non possono direttamente ottenere e impostare il valore della variabile. Al fine di essere in grado di operare l'altra variabile classe definisce due metodi pubblici: GetFormat () (ritorno formato del valore) e SetFormat (string) (Impostazione del formato)

L'accesso del pubblico modificatore -Pubblico

Si dichiara come classi pubbliche, metodi, costruttori e interfacce può essere qualsiasi altro tipo di accesso.

Se più visite reciproche di classi pubbliche in diversi pacchetti, è necessario importare il pacchetto appropriato risiede public class. Perché ereditarietà di classe, la classe di tutti i metodi pubblici e le variabili può essere ereditata dai suoi sottoclassi.

Le seguenti funzioni utilizzano il controllo di accesso del pubblico:

public static void main(String[] arguments) {
   // ...
}

metodo main programma Java () deve essere impostato su pubblico, in caso contrario, Java interprete non sarà in grado di eseguire la classe.

modificatori di accesso protetti -protected

Viene dichiarato come protetto variabili, metodi e costruttori nello stesso pacchetto può essere qualsiasi altro tipo di accesso, e si può accedere a diversi pacchetti sottoclassi.

modificatore di accesso protetto non può essere modificato classi e interfacce, metodi e le variabili membro può essere dichiarato come protetto, ma le variabili e metodi membro di interfacce non può essere dichiarata protetta.

Le sottoclassi possono accedere modificatore è dichiarato metodi e le variabili protette, in modo che possiamo proteggere le classi non correlate che utilizzano questi metodi e variabili.

La seguente classe padre utilizza modificatore di accesso protetto, sottoclassi sostituiscono il metodo openSpeaker () della classe genitore.

class AudioPlayer {
   protected boolean openSpeaker(Speaker sp) {
      // 实现细节
   }
}

class StreamingAudioPlayer {
   boolean openSpeaker(Speaker sp) {
      // 实现细节
   }
}

Se il metodo openSpeaker () è dichiarata come privata, quindi oltre alla classe AudioPlayer non possono accedere al metodo. Se openSpeaker () è dichiarata come pubblico, quindi tutte le classi sono in grado di accedere al metodo. Se vogliamo rendere il processo visibile alle sottoclassi della classe, il metodo viene dichiarata come protetta.

controllo accessi ed eredità

Si prega di notare i seguenti metodi ereditati regole:

  • classe genitore dichiarati come metodi pubblici nella sottoclasse deve essere pubblico.

  • classe genitore dichiarato come metodo protetto in una sottoclasse o dichiarate come protette, sia dichiarato come pubblico. È non può essere dichiarato privato.

  • classe genitore dichiarato come metodo privato non può essere ereditata.


modificatore di accesso non

Per realizzare una serie di altre caratteristiche, Java fornisce anche una serie di modificatori non accesso.

modificatore static viene utilizzato per creare metodi di classe e variabili di classe.

modificatore finale, utilizzato per decorare le classi, metodi e variabili, classe modificata finale non può essere ereditata, il metodo modificato della classe non può essere ereditata ridefinito, variabili modificati costante, non può essere modificato.

Estratto modificatore utilizzato per creare le classi astratte e metodi astratti.

Sincronizzato e modificatori volatili, soprattutto per i thread di programmazione.

modificatore static

  • Le variabili statiche:

    parola chiave static viene utilizzato per dichiarare le variabili statiche indipendenti dell'oggetto, indipendentemente dal numero di oggetti di una classe è istanziato, è solo una copia di una variabile statica. Le variabili statiche noti anche come variabili di classe. Le variabili locali non possono essere dichiarate come variabili statiche.

  • I metodi statici:

    parola statica viene utilizzata per dichiarare un oggetto è indipendente dal metodo statico. I metodi statici non possono utilizzare la classe di variabili non statica. Metodo statico per ottenere i dati dalla lista dei parametri, e quindi calcolare i dati.

L'accesso a variabili e metodi di classe può essere utilizzato direttamente classname.variablename e classname.methodname dell'accesso.

Nel seguente esempio, modificatore static viene utilizzato per creare metodi di classe e variabili di classe.

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");
   }
}

Esempi dei risultati sopra operazione di modifica sono i seguenti:

Started with 0 instances
Created 500 instances

qualificazione finale

variabili finale:

variabili finale può essere esplicitamente inizializzate e inizializzati solo una volta. Il riferimento è dichiarato come oggetti finali non possono puntare a un oggetto diverso. Ma l'obiettivo finale in cui i dati possono essere modificati. Questo oggetto di riferimento finale non può essere cambiato, ma il cui valore può essere modificato.

modificatore finale di solito è usato insieme per creare una costante di classe modificatore static.

esempio:

public class Test{
  final int value = 10;
  // 下面是声明常量的实例
  public static final int BOXWIDTH = 6;
  static final String TITLE = "Manager";

  public void changeValue(){
     value = 12; //将输出一个错误
  }
}

metodo finale

metodi di classe finale ereditate dalle sottoclassi, ma non possono modificare le sottoclassi.

Lo scopo principale del metodo è quello di impedire la dichiarazione finale di questo metodo viene modificato.

Come mostrato di seguito, con le modalità di dichiarazione modificatore finali.

public class Test{
    public final void changeName(){
       // 方法体
    }
}

ultima categoria

classi finali non essere ereditata possono, nessuna classe possono ereditare una delle caratteristiche della classe finale.

esempio:

public final class Test {
   // 类体
}

Estratto modificatore

classe astratta:

Una classe astratta non può essere utilizzata per creare un'istanza di un oggetto, l'unico scopo della dichiarazione è una classe astratta per la futura espansione di questa classe.

Una classe non può essere modificato astratta e finale. Se una classe contiene metodi astratti, la classe deve essere dichiarato come una classe astratta, in caso contrario, un errore di compilazione.

Una classe astratta può contenere metodi astratti e metodi non astratti.

esempio:

abstract class Caravan{
   private double price;
   private String model;
   private String year;
   public abstract void goFast(); //抽象方法
   public abstract void changeColor();
}

metodo astratto

Nessun metodo è un'implementazione metodo astratto, la specifica applicazione del metodo fornito da sottoclassi. metodi astratti non possono essere dichiarate come definitiva e rigorosa.

Ogni sottoclasse eredita la classe astratta deve implementare tutti i metodi astratti della classe genitore, a meno che la sottoclasse è anche classe astratta.

Se una classe contiene un certo numero di metodi astratti, la classe deve essere dichiarato come una classe astratta. Una classe astratta non può contenere metodi astratti.

Estratto dichiarazione di metodo termina con un punto e virgola, ad esempio: esempio Abstract pubblico ();

esempio:

public abstract class SuperClass{
    abstract void m(); //抽象方法
}
 
class SubClass extends SuperClass{
     //实现抽象方法
      void m(){
          .........
      }
}

modificatore sincronizzato

Metodo sincronizzato parola chiave per dichiarare contemporaneamente un solo accesso thread. modificatore sincronizzato può essere applicato ai quattro modificatori di accesso.

esempio:

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

modificatore transitorio

oggetto serializzato contiene modificato da variabili di istanza transitori, Java Virtual Machine (JVM) per saltare quel particolare variabile.

Il modificatore è inclusa nella definizione di dichiarazione variabili per pre-elaborazione classi di tipi di dati e variabili.

esempio:

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

modificatori volatili

variabile membro modificato volatile ogni volta che si accede discussioni sono costretti a ri-leggere il valore della variabile membro dalla memoria condivisa. Inoltre, quando i cambiamenti variabile membro, un filo è costretto a cambiare il valore scritto torna alla memoria condivisa. Così che in qualsiasi momento, due fili diversi vedono sempre lo stesso valore di una variabile membro.

Un riferimento a un oggetto volatilità può essere nullo.

esempio:

public class MyRunnable implements Runnable
{
    private volatile boolean active;
    public void run()
    {
        active = true;
        while (active) // 第一行
        {
            // 代码
        }
    }
    public void stop()
    {
        active = false; // 第二行
    }
}

In circostanze normali, un thread chiama metodo run () (in filo aperto Runnable) in un altro thread chiamate metodo stop (). Se il valore attivo nella prima riga del buffer è usata, in seconda fila quando il ciclo attivo è falsa non si ferma.

Tuttavia, il codice di cui sopra, si usa una versione modificata volatili attiva, in modo che il ciclo si interrompe.