English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
As classes no Java terão três tipos de variáveis, ou seja, estáticas (classe), instância e locais.
Variáveis locais-Essas variáveis pertencem ao método/Bloco/Construtor e declaração dentro/Definição. O escopo dessas variáveis está dentro do método (ou bloco ou construtor), e será destruído após a execução.
Variáveis de instância-Essas variáveis pertencem ao instância da classe (objeto). Eles são declarados dentro da classe, mas fora de qualquer método. Eles são inicializados quando a classe é instanciada. Eles podem ser acessados a partir de qualquer método, construtor ou bloco específico da classe.
Você deve usar o objeto para acessar variáveis de instância. Ou seja, para acessar variáveis de instância, você precisa criar o objeto da classe e usar o objeto, você precisa acessar essas variáveis.
Classe/Variáveis estáticas-Classe/Variáveis estáticas pertencem à classe, como variáveis de instância, são declaradas fora de qualquer método dentro da classe, mas declaradas usando a palavra-chave static.
Elas podem ser acessadas em tempo de compilação, você pode acessá-las antes/Acessar sem instanciar a classe, há apenas uma cópia do campo estático disponível em todo o classe, ou seja, o valor do campo estático é o mesmo em todos os objetos. Você pode usar a palavra-chave static para definir um campo estático.
Como mencionado acima, usar referência de nome de classe (acesso) a variáveis estáticas.
System.out.println(MyClass.data);
Isso significa que fazer referência a uma variável usando referência estática é usar o nome da classe.
Mas, para acessar variáveis de instância, é necessário criar um objeto, que antes da instância, não está disponível na memória.
Portanto, você não pode fazer referência estática a um campo não estático (variável) em Java. Se ainda assim, tente fazer isso, gerando um erro de compilação que indica “Impossível referenciar variável não estática matemática a partir de contexto estático”.
Seguindo o programa Java, aceita as marcas do usuário e determina se ele foi promovido.
Aqui, a partir do método estático wasPromroted(), acessamos diretamente as variáveis de instância (apenas especificando seu nome, como em variáveis estáticas). Isso não é permitido e resulta em um erro de compilação.
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("Insira sua pontuação em matemática: "); double math = sc.nextDouble(); System.out.println("Insira sua pontuação em ciências: "); double science = sc.nextDouble(); System.out.println("Insira sua pontuação em inglês: "); double english = sc.nextDouble(); StudentMarks marks = new StudentMarks(math, science, english); boolean bool = wasPromroted(marks); if(bool) { System.out.println("Parabéns, você foi promovido"); } else { System.out.println("Desculpe, tente novamente"); } } }
Resultados de saída
StudentMarks.java:16: erro: não-variável estática math não pode ser referenciada a partir de um contexto estático if(math >=85 && science >=75 && english >=65) ^ StudentMarks.java:16: erro: não-variável estática science não pode ser referenciada a partir de um contexto estático if(math >=85 && science >=75 && english >=65) ^ StudentMarks.java:16: erro: não-variável estática english não pode ser referenciada a partir de um contexto estático if(math >=85 && science >=75 && english >=65) ^ 3 erros
Para que o programa funcione corretamente, ou é necessário declarar as variáveis de instância como estáticas, ou deve-se usar o objeto no 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("Insira sua pontuação em matemática: "); double math = sc.nextDouble(); System.out.println("Insira sua pontuação em ciências: "); double science = sc.nextDouble(); System.out.println("Insira sua pontuação em inglês: "); double english = sc.nextDouble(); StudentMarks marks = new StudentMarks(math, science, english); boolean bool = wasPromroted(marks); if(bool) { System.out.println("Parabéns, você foi promovido"); } else { System.out.println("Desculpe, tente novamente"); } } }
Resultados de saída
Insira sua pontuação em matemática: 89 Insira sua pontuação em ciências: 85 Insira sua pontuação em inglês: 86 Parabéns, você foi promovido