English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Las clases en Java tendrán tres tipos de variables, es decir, estáticas (clase), de instancia y locales.
Variables locales-Estas variables pertenecen al método/Bloque/Constructor y se declara/Definición. El rango de estas variables está dentro del método (o bloque o constructor), y se destruye después de su ejecución.
Variables de instancia-Estas variables pertenecen a la instancia de la clase (objeto). Estas se declaran dentro de la clase pero fuera de cualquier método. Se inicializan cuando se instancia la clase. Pueden ser accedidas desde cualquier método, constructor o bloque de la clase específica.
Debe usar un objeto para acceder a las variables de instancia. Es decir, para acceder a las variables de instancia, debe crear un objeto de la clase y usar ese objeto para acceder a estas variables.
Clase/Variables estáticas-Clase/Las variables estáticas pertenecen a la clase, al igual que las variables de instancia, se declaran dentro de la clase pero fuera de cualquier método, pero se declaran utilizando la palabra clave static.
Pueden ser accedidas en tiempo de compilación, puede acceder a ellas antes de/Al acceder sin instanciar la clase, hay una copia única del campo estático disponible en todo el clase, es decir, el valor del campo estático es el mismo en todos los objetos. Puede definir un campo estático utilizando la palabra clave static.
Como se muestra anteriormente, se usa una referencia de nombre de clase (acceso) a variables estáticas.
System.out.println(MyClass.data);
Incluso cuando se hace referencia a variables mediante una referencia estática, significa que se usa el nombre de la clase.
Pero, para acceder a variables de instancia, debe crear un objeto; antes de su instanciación, estos objetos no están disponibles en la memoria.
Por lo tanto, no puede referirse a campos no estáticos (variables) de manera estática en Java. Si sigue así, intente hacerlo, generando un error de compilación que indique que no se puede referirse a la variable no estática matemática desde el contexto estático.
Siguiendo el programa Java, acepta las marcas del usuario y determina si ha sido promovido.
Aquí, desde el método estático wasPromroted(), accedemos directamente a las variables de instancia (sólo especificando su nombre, como si fuera una variable estática). No se permite hacer esto, lo que produce un error en tiempo de compilación.
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("Ingrese su puntuación en matemáticas: "); double math = sc.nextDouble(); System.out.println("Ingrese su puntuación en ciencias: "); double science = sc.nextDouble(); System.out.println("Ingrese su puntuación en inglés: "); double english = sc.nextDouble(); StudentMarks marks = new StudentMarks(math, science, english); boolean bool = wasPromroted(marks); if(bool) { System.out.println("¡Felicidades, has sido promovido!"); } else { System.out.println("Lo siento, inténtelo de nuevo"); } } }
Resultados de salida
StudentMarks.java:16: error: non-variable estática math no puede ser referenciada desde un contexto estático if(math >=85 && science >=75 && english >=65) ^ StudentMarks.java:16: error: non-variable estática science no puede ser referenciada desde un contexto estático if(math >=85 && science >=75 && english >=65) ^ StudentMarks.java:16: error: non-variable estática english no puede ser referenciada desde un contexto estático if(math >=85 && science >=75 && english >=65) ^ 3 errors
Para que el programa funcione correctamente, debe declarar las variables de instancia como estáticas o usar el objeto en el método.
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("Ingrese su puntuación en matemáticas: "); double math = sc.nextDouble(); System.out.println("Ingrese su puntuación en ciencias: "); double science = sc.nextDouble(); System.out.println("Ingrese su puntuación en inglés: "); double english = sc.nextDouble(); StudentMarks marks = new StudentMarks(math, science, english); boolean bool = wasPromroted(marks); if(bool) { System.out.println("¡Felicidades, has sido promovido!"); } else { System.out.println("Lo siento, inténtelo de nuevo"); } } }
Resultados de salida
Ingrese su puntuación en matemáticas: 89 Ingrese su puntuación en ciencias: 85 Ingrese su puntuación en inglés: 86 ¡Felicidades, has sido promovido!