English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В Java класс будет иметь три типа переменных, то есть статические (класс), переменные объекта и локальные переменные.
Локальные переменные- Эти переменные принадлежат методу/блоку/конструктору и объявлены/определены в них. Область действия этих переменных находится в методе (или блоке или конструкторе), и они уничтожаются после выполнения.
Переменные объекта- Эти переменные принадлежат экземпляру класса (объекту). Они объявлены в классе, но вне методов. Они инициализируются при инстанциации класса. К ним можно обращаться из любого метода, конструктора или блока этого класса.
Вы должны использовать объект для доступа к переменным объекта. То есть, чтобы получить доступ к переменным объекта, вам нужно создать объект класса, и с помощью этого объекта вы можете обращаться к этим переменным.
Класс/статические переменные- Класс/статические переменные принадлежат классу, как и переменные объекта, они объявлены вне методов в классе, но с использованием ключевого слова static.
Они могут быть доступны на этапе компиляции, и вы можете к ним обращаться до/без инстанциации класса. Всякий раз, когда доступ к статическому полю возможен, доступен только один экземпляр поля класса, то есть значение статического поля одинаково для всех объектов. Вы можете определить статическое поле с помощью ключевого слова static.
Как указано выше, использование имени класса для ссылки (доступа) к статическим переменным.
System.out.println(MyClass.data);
Таким образом, ссылка с помощью статического указателя означает использование имени класса.
Однако, чтобы получить доступ к переменным объекта, необходимо создать объект, так как до его инстанциации объекты недоступны в памяти.
Таким образом, вы не можете в Java статически ссылаться на нестатические поля (переменные). Если вы все же это делаете, попробуйте это сделать, чтобы создать ошибку компиляции, которая скажет
Следуя Java-программе, принимает пользовательские маркеры и определяет, был ли он продвижен.
Здесь, мы напрямую обращаемся к переменным объекта из метода wasPromroted(), как к статическим переменным, просто указывая их имя. Из-за того, что это запрещено, будет выведена ошибка компиляции.
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("Введите ваш математический балл:"); double math = sc.nextDouble(); System.out.println("Введите ваш научный балл:"); double science = sc.nextDouble(); System.out.println("Введите ваш английский балл:"); double english = sc.nextDouble(); StudentMarks marks = new StudentMarks(math, science, english); boolean bool = wasPromroted(marks); if(bool) { System.out.println("Поздравляем, вы получили повышение"); } System.out.println("Извините, попробуйте еще раз"); } } }
Результат вывода
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 ошибок
Чтобы программа работала корректно, либо необходимо объявить переменные экземпляра статическими, либо использовать объект в методе для их обращения.
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("Введите ваш математический балл:"); double math = sc.nextDouble(); System.out.println("Введите ваш научный балл:"); double science = sc.nextDouble(); System.out.println("Введите ваш английский балл:"); double english = sc.nextDouble(); StudentMarks marks = new StudentMarks(math, science, english); boolean bool = wasPromroted(marks); if(bool) { System.out.println("Поздравляем, вы получили повышение"); } System.out.println("Извините, попробуйте еще раз"); } } }
Результат вывода
Введите ваш математический балл: 89 Введите ваш научный балл: 85 Введите ваш английский балл: 86 Поздравляем, вы получили повышение