English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Klassen in Java haben drei Arten von Variablen, nämlich statisch (Klasse), Instanz und lokale Variablen.
Lokale Variablen-Diese Variablen gehören zu Methoden/Block/Konstruktor und dort deklariert/Definition. Der Bereich dieser Variablen liegt innerhalb von Methoden (oder Blöcken oder Konstruktoren) und wird nach der Ausführung zerstört.
Instanzvariablen-Diese Variablen gehören zu den Instanzen der Klasse (Objekten). Diese werden innerhalb der Klasse, aber außerhalb von Methoden deklariert. Diese werden beim Instantiieren der Klasse initialisiert. Sie können von jedem bestimmten Methoden, Konstruktor oder Block der Klasse aufgerufen werden.
Sie müssen Instanzvariablen über ein Objekt aufrufen. Das bedeutet, dass Sie ein Objekt dieser Klasse erstellen müssen, um auf diese Variablen zuzugreifen.
Klasse/Statische Variablen-Klasse/Statische Variablen gehören zur Klasse, genau wie Instanzvariablen, sie werden innerhalb der Klasse, außer in Methoden, deklariert, aber mit dem Schlüsselwort 'static' deklariert.
Sie können sie zu Compile-Zeiten aufrufen, Sie können sie/Wenn Sie eine Klasse nicht instantiieren, ist nur ein Abdruck des gesamten statischen Feldes in der Klasse verfügbar, das bedeutet, dass der Wert des statischen Feldes in allen Objekten gleich ist. Sie können ein statisches Feld mit dem Schlüsselwort 'static' definieren.
Wie oben gezeigt, wird auf statische Variablen über den Klassennamen referenziert (zugegriffen).
System.out.println(MyClass.data);
Eine Referenz mit dem statischen Bezeichner bedeutet, dass die Variable über den Klassennamen referenziert wird.
Um auf Instanzvariablen zuzugreifen, muss ein Objekt erstellt werden, bevor diese Objekte im Speicher verfügbar sind.
Daher können Sie nicht in Java nicht-statische Felder (Variablen) statisch referenzieren. Wenn Sie dies dennoch tun, versuchen Sie dies, um einen Compilerfehler zu erzeugen, der angibt, dass „Nicht-statische Variable 'math' kann nicht aus einem statischen Kontext referenziert werden.“
Dem Beispiel entsprechend, nimmt das Java-Programm Benutzermarken an und bestimmt, ob er befördert wird.
Hier haben wir aus dem statischen MethodenwasPromoted() direkt auf Instanzvariablen zugegriffen (nur durch Angabe ihres Namens, so wie bei statischen Variablen). Da dies nicht erlaubt ist, wird ein Kompilierungsfehler verursacht.
import java.util.Scanner; public class StudentMarks { Scanner scan1 = new Scanner(System.in); private double math; private double science; private double english; public StudentMarks(double math, double science, double english) { this.math = math; this.science = science; this.english = english; } public static boolean wasPromoted(StudentMarks marks) { if(math >=85 && science >=75 && english >=65) { return true; } return false; } public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.println("Enter your math score:"); double math = sc.nextDouble(); System.out.println("Enter your science score:"); double science = sc.nextDouble(); System.out.println("Enter your english score:"); double english = sc.nextDouble(); StudentMarks marks = new StudentMarks(math, science, english); boolean bool = wasPromoted(marks); if(bool) { System.out.println("Congratulations, you've got promoted"); } else { System.out.println("Sorry, try again"); } } }
Output result
StudentMarks.java:16: error: non-static variable math cannot be referenced from a static context if(math >=85 && science >=75 && english >=65) ^ StudentMarks.java:16: error: non-static variable science cannot be referenced from a static context if(math >=85 && science >=75 && english >=65) ^ StudentMarks.java:16: error: non-static variable english cannot be referenced from a static context if(math >=85 && science >=75 && english >=65) ^ 3 errors
Um dieses Programm ordnungsgemäß auszuführen, müssen要么实例变量声明为静态,要么应在方法中使用对象对其进行引用。
import java.util.Scanner; public class StudentMarks { Scanner scan1 = new Scanner(System.in); private double math; private double science; private double english; public StudentMarks(double math, double science, double english) { this.math = math; this.science = science; this.english = english; } public static boolean wasPromoted(StudentMarks marks) { if(marks.math >=85 && marks.science >=75 && marks.english >=65) return true; return false; } public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.println("Enter your math score:"); double math = sc.nextDouble(); System.out.println("Enter your science score:"); double science = sc.nextDouble(); System.out.println("Enter your english score:"); double english = sc.nextDouble(); StudentMarks marks = new StudentMarks(math, science, english); boolean bool = wasPromoted(marks); if(bool) { System.out.println("Congratulations, you've got promoted"); } else { System.out.println("Sorry, try again"); } } }
Output result
Enter your math score: 89 Enter your science score: 85 Enter your english score: 86 Congratulations, you've got promoted