0
votes

Référencer une liste de matrices non statiques dans un environnement statique?

Je viens de commencer à apprendre Java un mois il y a environ un mois et que vous avez maintenant un problème de "StudyList variable non statique, ne peut pas être référencé d'un contexte statique". J'essaie d'avoir une méthode distincte de Main pour renseigner la liste des étudiants, au lieu de copier des trucs de Addstudent pour chaque élève; Mais je ne peux pas obtenir les méthodes d'écrire sur la flambée. (Erreur: (14, 27) Java: une variable non statique StudyList ne peut être référencée à partir d'un contexte statique). Je comprends comment la matrice n'est pas statique car elle a une taille indéfinie, mais comment puis-je le faire fonctionner comme ça? Y a-t-il une meilleure approche? Puis-je avoir la matrice faire partie de la méthode principale puis l'avoir transmis à Addstudent, si oui? xxx

et ma classe "étudiante": xxx


3 commentaires

Les variables non statiques appartiennent à votre instance (chaque fois que vous utilisez nouvel étudiant () vous en créez un). Les variables statiques appartiennent à votre classe, ce qui signifie qu'ils sont partagés dans toutes les instances. Vous ne pouvez pas utiliser une variable d'instance dans un contexte statique car vous n'avez pas d'instance réelle pour commencer. Si vous deviez passer un à la méthode par ses paramètres, alors cela fonctionnerait


TLDR: Faites votre StudentList variable statique pour le faire fonctionner


Duplicaillard possible de ne peut pas faire référence à une référence statique au non- Champ statique


4 Réponses :


1
votes
import java.util.ArrayList;

public class Main {
    static ArrayList<Student> studentList = new ArrayList<>();

    public static void main(String []args) {
        addStudent("Adam", "Goldsmith", 70, 50);
        addStudent("John", "Smith", 20, 40);
        addStudent("Lewis", "Peterson", 90, 85);

        for (Student obj: studentList){
            System.out.println("Name: " + obj.studentForename + " "+ obj.studentSurname);
        }
    }

    public static void addStudent(String forename, String surname, int coursework, int test) {
        Student newStudent = new Student(forename, surname);
        newStudent.setForename(forename);
        newStudent.setSurname(surname);
        newStudent.averageMark(70, 65);

        studentList.add(newStudent);
    }

}
It was not due to undefined size but was because you were trying to access it without creating an object from a static method.
So just write static before it and it will work.

0 commentaires

0
votes

pensais que la réponse ci-dessus répond à vous question, mais peu de mots sur les modifications statiques VS non statiques de Java

Caractéristiques des méthodes statiques

  • Une méthode statique est appelée à l'aide de la classe (nom de classe.methodname) par opposition à une référence d'instance (nouvelle instanceOfclass = classe; instanceofclass.methname.)
  • Les méthodes statiques ne peuvent pas utiliser de variables d'instance non statiques: une méthode statique ne peut référence à aucune variables d'instance de la classe. La méthode statique ne connaît pas la valeur variable de quelle instance à utiliser.
  • Les méthodes statiques ne peuvent pas appeler des méthodes non statiques: les méthodes non statiques utilisent généralement l'état variable d'instance pour affecter leur comportement. Les méthodes statiques ne peuvent pas voir l'état de variable d'instance, donc si vous essayez d'appeler une méthode non statique à partir d'une méthode statique, le compilateur devrait se plaindre, si la méthode non statique utilise une variable d'instance ou non.

    Méthodes non statiques

    • Une méthode non statique n'a pas le mot clé statique avant le nom de la méthode.

    • Une méthode non statique appartient à un objet de la classe et vous devez créer une instance de la classe pour y accéder.

    • Les méthodes non statiques peuvent accéder à toute méthode statique et toute variable statique sans créer une instance de la classe.

      Vous préférez donc penser si vous avez besoin de définir StudentList comme statique ou non, et si vous modifiez votre code en conséquence.

      P.s. au-dessus de l'écrit est pris de ici < / a>


0 commentaires


0
votes

la différence entre statique (global, niveau de classe) et non statique (une instance de cette classe, un objet) est important.

créer un objet par nouveau principal () permet de fonctionner sur cet objet et ses champs.

Le statique vide (chaîne []) est le point d'entrée unique à l'application.

à l'intérieur de la principale que vous avez accès uniquement aux champs statiques et aux méthodes statiques. Donc c'est lourd. xxx


0 commentaires