Latest web development tutorials

Les modificateurs de Java

langage Java fournit de nombreux modificateurs, répartis dans les catégories suivantes:

  • Accès modificateur
  • Non-modificateur d'accès

Modificateur utilisé pour définir la classe, méthode ou variable, généralement à l'avant-garde de la déclaration. Grâce à l'exemple suivant pour illustrer:

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

Contrôle d'accès modificateur

Java, vous pouvez utiliser des caractères de contrôle d'accès pour protéger l'accès aux classes, les variables, les méthodes et les constructeurs. Java prend en charge quatre droits d'accès différents.

Par défaut, également connu sous le nom par défaut, visible à l' intérieur du même emballage, ne pas utiliser de modificateur.

Privé, au modificateur privé spécifié, visible au sein de la même classe.

Il y a, dans le but de préciser le modificateur public visible à toutes les classes.

Protégé, modificateur protégé précise que, pour toutes les classes et sous - classes dans le même paquet visible.

Le modificateur d'accès par défaut - ne pas utiliser de mots-clés

Utilisez des variables et des méthodes déclarées dans le modificateur d'accès par défaut pour la classe dans le même package est visible. Interface où les variables sont implicitement déclarés comme finale statique publique, et l'interface où la méthode d'accès par défaut pour le public.

exemple:

Déclaration dans l'exemple, les variables et les méthodes suivantes ne peut utiliser aucune modification.

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

Accès privé modificateur -salle

modificateur d'accès privé est le niveau le plus rigoureux de l'accès, il est déclaré que les méthodes privées, variables, et appartient au constructeur de la classe ne peut être consultée, et les classes et les interfaces ne peut être déclarée privée.

Les variables déclarées en tant que type d'accès privé ne sont accessibles en dehors de la classe par la méthode getter publique de classe.

Accès privé modificateur utilisé principalement pour les détails et les données de mise en œuvre de la classe de protection derrière classe.

Les classes suivantes utilisent le modificateur d'accès privé:

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

Exemple, la variable de format de classe Logger est une variable privée, de sorte que d'autres classes ne peuvent pas obtenir et définir la valeur de la variable directement. Afin d'être en mesure d'opérer l'autre variable de classe définit deux méthodes publiques: GetFormat () (format de valeur de retour) et setFormat (String) (réglage du format)

L'accès du public modificateur -Santé

Il est déclaré que les classes publiques, les méthodes, les constructeurs, et des interfaces peut être tout autre type d'accès.

Si plusieurs visites mutuelles des classes publiques dans différents packages, vous devez importer le package approprié public class réside. Parce que la classe héritage, la classe de toutes les méthodes et variables publiques peut être héritée par ses sous-classes.

Les fonctions suivantes utilisent le contrôle d'accès public:

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

principale méthode programme Java () doit être réglé pour le public, sinon, interpréteur Java ne sera pas en mesure d'exécuter la classe.

modificateurs d'accès protégées -protected

Est déclarée protégée des variables, des méthodes et des constructeurs dans le même paquet peut être tout autre type d'accès, et peut être consulté dans différents paquets sous-classes.

Accès protégé modificateur ne peut pas être modifié classes et interfaces, les méthodes et les variables membres peut être déclaré comme protégé, mais les variables membres et des méthodes de membres d'interfaces ne peut pas être déclarée protégée.

Les sous-classes peuvent accéder à modificateur est déclaré méthodes et les variables protégées, de sorte que nous pouvons protéger les classes sans rapport avec ces méthodes et variables.

La classe parent suivant utilise modificateur d'accès protégé, sous-classes remplacent la méthode openSpeaker () de la classe parent.

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

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

Si la méthode openSpeaker () est déclarée comme privée, puis en plus de la classe AudioPlayer ne peut pas accéder à la méthode. Si openSpeaker () est déclarée comme public, alors toutes les classes sont en mesure d'accéder à la méthode. Si nous voulons rendre le processus visible pour les sous-classes de la classe, la méthode est déclarée comme protégée.

Contrôle d'accès et de l'héritage

S'il vous plaît noter les méthodes suivantes héritées des règles:

  • Classe parent déclaré que les méthodes publiques dans la sous-classe doit également être public.

  • classe Parent déclarée comme méthode protégée dans une sous-classe ou déclarée protégée, soit déclarée publique. Vous ne pouvez pas être déclaré privé.

  • Classe parent déclarée comme méthode privée ne peut pas être héritée.


Non-modificateur d'accès

Afin d'atteindre un certain nombre d'autres caractéristiques, Java fournit également un certain nombre de non-modificateurs d'accès.

modificateur statique est utilisé pour créer des méthodes de classe et les variables de classe.

modificateur final, utilisé pour décorer les classes, méthodes et variables, classe finale modifiée ne peut être héritée, la méthode modifiée de la classe ne peut pas être héritée redéfinies, variables modifiées constante, ne peut pas être modifié.

Résumé modificateur utilisé pour créer des classes abstraites et des méthodes abstraites.

Synchronisé et modificateurs volatils, principalement pour les discussions de programmation.

modificateur statique

  • Les variables statiques:

    mot-clé statique est utilisé pour déclarer des variables statiques indépendantes de l'objet, peu importe le nombre d'objets d'une classe est instancié, il n'y a qu'une seule copie d'une variable statique. Les variables statiques également connus comme variables de classe. Les variables locales ne peuvent pas être déclarées comme variables statiques.

  • Les méthodes statiques:

    mot-clé statique est utilisé pour déclarer un objet est indépendant de la méthode statique. Les méthodes statiques ne peuvent pas utiliser non-statique classe de variables. Méthode statique pour obtenir les données de la liste des paramètres, puis calculer les données.

L'accès aux variables de classe et les méthodes peuvent être utilisées directement classname.variablename et classname.methodname d'accès.

Dans l'exemple suivant, le modificateur statique est utilisé pour créer des méthodes de classe et les variables de 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");
   }
}

Des exemples des résultats de l'opération de montage ci-dessus sont les suivantes:

Started with 0 instances
Created 500 instances

qualification finale

les variables finales:

les variables finales peuvent être explicitement initialisées et initialisés qu'une seule fois. est déclarée référence comme objets finaux ne peuvent pas pointer vers un objet différent. Mais la cible finale où les données peuvent être modifiées. Cet objet de référence final ne peut pas être changé, mais dont la valeur peut être modifiée.

modificateur final est généralement utilisé pour créer une constante de classe de modificateur statique.

exemple:

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

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

méthode finale

méthodes de classe finales héritées par les sous-classes, mais ne peuvent pas modifier les sous-classes.

Le but principal de cette méthode est d'empêcher la déclaration finale de ce procédé est modifié.

Comme indiqué ci-dessous, en utilisant les méthodes de déclaration de modification finale.

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

catégorie finale

les classes finales ne peuvent pas être héritées, aucune classe peuvent hériter l'une des caractéristiques de la classe finale.

exemple:

public final class Test {
   // 类体
}

Résumé modificateur

Classe abstraite:

Une classe abstraite ne peut pas être utilisé pour instancier un objet, le seul but de la déclaration est une classe abstraite pour l'expansion future de cette classe.

Une classe ne peut pas être modifiée abstraite et finale. Si une classe contient des méthodes abstraites, la classe doit être déclarée comme une classe abstraite, sinon, une erreur de compilation.

Une classe abstraite peut contenir des méthodes abstraites et des méthodes non abstraites.

exemple:

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

Résumé méthode

Aucune méthode est une méthode abstraite mise en œuvre, la mise en oeuvre spécifique du procédé fourni par les sous-classes. Les méthodes abstraites ne peuvent pas être déclarés comme définitif et strict.

Toute sous-classe hérite de la classe abstraite doit mettre en œuvre toutes les méthodes abstraites de la classe parente, à moins que la sous-classe est aussi classe abstraite.

Si une classe contient un certain nombre de méthodes abstraites, la classe doit être déclarée comme une classe abstraite. Une classe abstraite ne peut pas contenir des méthodes abstraites.

Résumé déclaration de méthode se termine par un point-virgule, par exemple: échantillon public abstract ();

exemple:

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

modificateur synchronisé

Méthode synchronisée mot de déclarer en même temps qu'un accès fil. modificateur synchronisé peut être appliqué aux quatre modificateurs d'accès.

exemple:

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

modificateur transitoire

objet sérialisé contient modifié par les variables d'instance transitoires, machine virtuelle java (JVM) pour sauter cette variable particulière.

Le modificateur est inclus dans la définition de l'instruction de variables pour pré-traiter les classes de types de données et variables.

exemple:

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

Modificateurs volatils

Volatile variable membre modifié chaque fois qu'il est accessible fils sont obligés de relire la valeur de la variable de membre de la mémoire partagée. En outre, lorsque les membres des changements variables, un fil est forcé de changer la valeur écrite retour à la mémoire partagée. De sorte que, à tout moment, deux fils différents voient toujours la même valeur d'une variable de membre.

Une référence d'objet volatile peut être nulle.

exemple:

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

Dans des circonstances normales, un thread appelle méthode run () (en fil ouvert Runnable) dans un autre thread appels arrêtent () méthode. Si la valeur active dans la première rangée de la mémoire tampon est utilisé, dans la deuxième rangée lorsque le cycle actif est faux ne cesse pas.

Cependant, le code ci-dessus, nous utilisons un actif volatile modifiée, de sorte que le cycle s'arrêtera.