English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Le classi in Java avranno tre tipi di variabili, ovvero statiche (classe), d'istanza e locali.
Variabili locali-Queste variabili appartengono al metodo/blocco/costruttore e sono dichiarate/definite al loro interno. La loro portata si trova all'interno del metodo (o blocco o costruttore), vengono distrutti dopo l'esecuzione.
Variabili d'istanza-Queste variabili appartengono all'istanza della classe (oggetto). Queste sono dichiarate all'interno della classe ma al di fuori di qualsiasi metodo. Queste vengono inizializzate durante l'istanziazione della classe. Possono essere accedute da qualsiasi metodo, costruttore o blocco della classe specifica.
Devi utilizzare l'oggetto per accedere alle variabili d'istanza. Ossia, per accedere alle variabili d'istanza, devi creare l'oggetto della classe e utilizzare l'oggetto per accedere a queste variabili.
Variabili di classe/statiche-Le variabili di classe/statiche appartengono alla classe, come le variabili d'istanza, sono dichiarate al di fuori di qualsiasi metodo nella classe, ma sono dichiarate utilizzando la parola chiave static.
Possono essere accedute a compile-time, possono essere accedute prima/dopo l'istanziazione della classe, c'è solo una copia del campo statico disponibile in tutto il classi, ossia, il valore del campo statico è lo stesso in tutti gli oggetti. Puoi definire un campo statico utilizzando la parola chiave static.
Come sopra, utilizzare il nome della classe per referenziare (accedere) a variabili statiche.
System.out.println(MyClass.data);
Anche se il riferimento statico a variabili significa utilizzare il nome della classe.
Ma per accedere alle variabili d'istanza, è necessario creare un oggetto; prima dell'istanziazione, questi oggetti non sono disponibili nella memoria.
Quindi, non è possibile fare riferimento staticamente a campi non statici in Java. Se lo fai, prova a farlo, generando un errore di compilazione che indica “Impossibile fare riferimento a variabili non statiche da contesto statico matematico”.
Seguendo il programma Java, accetta il segno utente e determina se è promosso.
Qui, dall'espressione statica wasPromroted(), accediamo direttamente alle variabili d'istanza (basta specificarne il nome, come per le variabili statiche). Poiché non è permesso farlo, si genererà un errore di compilazione.
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 wasPromroted(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 = wasPromroted(marks); if(bool) { System.out.println("Congratulations, you've got promoted"); } else { System.out.println("Sorry, try again"); } } }
输出结果
StudentMarks.java:16: error: variabile non statica math non può essere riferita da un contesto statico if(math>=85 && science>=75 && english>=65) ^ StudentMarks.java:16: error: variabile non statica science non può essere riferita da un contesto statico if(math>=85 && science>=75 && english>=65) ^ StudentMarks.java:16: error: variabile non statica english non può essere riferita da un contesto statico if(math>=85 && science>=75 && english>=65) ^ 3 errori
Per far funzionare correttamente il programma, sia necessario dichiarare le variabili d'istanza come statiche, sia utilizzare l'oggetto nel metodo.
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 wasPromroted(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 = wasPromroted(marks); if(bool) { System.out.println("Congratulations, you've got promoted"); } else { System.out.println("Sorry, try again"); } } }
输出结果
Enter your math score: 89 Enter your science score: 85 Enter your english score: 86 Congratulations, you've got promoted