0
votes

Comment accéder à une variable globale non statique de la méthode statique

J'ai une méthode principale dans mon programme Java, je souhaite stocker des valeurs dans la variable globale car je souhaite accéder à ces valeurs de différentes méthodes de la classe, mais je ne suis pas convaincu d'utiliser une variable globale statique, comme les valeurs du Variable Continuez à changer, alors j'ai peur que les valeurs déclarées comme statiques ne peuvent pas changer, car elles sont définies au niveau de la classe. Je suis donc à la recherche d'une variable globale non statique. Quelqu'un peut-il donner une idée, comment y parvenir.


7 commentaires

Non, cela ne veut pas, veuillez lire ma question, je veux que la variable soit accessible dans toute la classe, pas seulement d'une méthode.


Ouais, mal interprété votre question, désolé. Néanmoins, vous utilisez un champ statique, ou vous utilisez une non-statique que vous ne pourrez pas accéder à partir de méthodes statiques et sera différente pour chaque instance. Je ne suis pas sûr de comprendre pourquoi vous ne voulez pas utiliser de champ statique.


, j'ai donc peur que les valeurs déclarées comme statiques peuvent ne pas changer, car elles sont définies au niveau de la classe, Que voulez-vous dire, voulez-vous que cela soit mutable?


Comme je l'ai dit, j'ai observé au fil des ans que si nous mettons des valeurs différentes ou que nous continuions à modifier les valeurs de la variable statique, cela ne reflète pas vraiment, c'est mon inquiétude


oui je veux qu'il soit mutable afin que je puisse changer les valeurs de celui-ci


@Tulumatinée Venez les gars pourquoi le vote en bas? : ( - regardez Comment puis-je poser une bonne question? et pages d'aide associées; )


Statique ne signifie pas "immuable", cela signifie "appartient à une classe, pas à une instance". Cependant, dans de nombreux cas, en utilisant statique pour des choses qui changent est une odeur de code et mieux résolue d'une autre manière.


3 Réponses :


1
votes

Je vous suggère de créer une classe distincte avec des variables que vous souhaitez stocker, avec des méthodes appropriées de getter et de réglage. De cette façon, vous maintenez le code plus propre et maintenu et vous suivez le principe de séparation des préoccupations, ce qui nous dit que chaque classe devrait avoir son objectif propre.

EG: P>

 public class Person {
   private String name; // private = restricted access

   // Getter
   public String getName() {
   return name;
   }

  // Setter
  public void setName(String newName) {
  this.name = newName;
  }
}

 public class MyClass {
   public static void main(String[] args) {
     Person myObj = new Person();
     myObj.setName("John"); // Set the value of the name variable to "John"
     System.out.println(myObj.getName()); //Prints out name value
   }
 }


2 commentaires

Puisque vous déclarez les variables de la nouvelle classe, sera-t-elle accessible à partir de la classe d'appel (principale)?


vérifier la réponse maintenant



0
votes

Pour démarrer une classe Java utilise la méthode statique "principale" présente dans tous les programmes Java normaux. Cependant, la méthode "constructeur" (vraiment juste "constructeur") est nommée d'après le nom "Classe principale" et est l'endroit où vous initiez les variables, que vous appeliez une méthode déclarée dans la classe ou récupérez une variable statique de la méthode de démarreur "Main" .

La méthode principale ne nécessite aucune méthode de passage pour obtenir une variable statique de celui-ci pour définir une variable statique globale dans la classe car il n'est qu'une étape de la hiérarchie "Portée" dans la classe (c'est pourquoi certains cadres Passez des variables à globales sans taper la méthode, mais plutôt à l'aide de «void» sur la déclaration de méthode), mais vous ne pouvez pas mettre une méthode non statique appeler dans une section statique de code tel que la méthode principale. P>

Le manière que vous supprimez le contexte statique d'une variable consiste à effectuer une autre variable avec le même nom dans un contexte non statique et à lancer la variable statique à l'instance non statique. P>

xxx pré>

tandis que comme engagé en ligne dans les déclarations globales non dans le constructeur, ils sont réputés être chargés dans la classe Constructeur en séquence. P>

NB: Vous pouvez mettre ou faire une méthode statique dans une classe non statique mais pas la méthode non statique dans une classe statique. P>

import.javax.swing.*;
public class ExampleStaticRemoval{
static String uselessRef1 = ""; //  declared globally initialised
String uselessRef1b = ""; 
ExampleStaticRemoval(){

// following is declared in global scope code or in the constructor code
    uselessRef1b = (String)uselessRef1; // (String) cast removes the static context of the String type and copies to non static version of the type 
    printOut();

}// end constructor



    // program start method
    public static void Main(String[] args){
    new ExampleStaticRemoval();
        // static global class variable uselessRef1 is assigned the local method value
    // MUST BE OUTSIDE AT TOP TO BE GLOBAL
        uselessRef1 = args[0] +"  "+args[1]; // join static arguments 0 and 1 from the main method args[] array

}// end main



    public void printOut(){
    JOptionPane.showConfirmDialog(null,uselessRef1b, uselessRef1b, 0);
}//end method


} // end class


1 commentaires

Pouvez-vous s'il vous plaît expliquer avec un petit programme?



1
votes

Puisque Java favorise l'utilisation de classes plutôt que des variables globales, je vous recommande vivement d'utiliser une classe pour stocker les données. De cette façon, vous n'avez pas besoin d'utiliser des méthodes statiques ou des variables statiques.

Un exemple de ceci est indiqué ci-dessous: P>

public class Holder {
        private int val;
        public Holder(int value){
            setValue(value);
        }
        public void setValue(int value){
            this.val=value;
        }
        public int getValue(){
            return this.val;
        }
    }


0 commentaires