[RESOLVIDO]Non-static?

Estava fazendo um código simples para começar com um tutorial de JAVA e cheguei em uma parte do código que, pelo menos pra mim, não está fazendo sentido.
É um código bem simples, bem parecido com programação estruturada.


package aula2;

import java.util.Scanner;

public class Aula2 {
    
    Exercicios ex = new Exercicios();
    
    public static void main(String[] args) {
        ex.Exercicio1(Integer.parseInt(new Scanner(System.in).nextLine()), Integer.parseInt(new Scanner(System.in).nextLine())); //o erro está aqui! 
        //non-static variable ex cannot be referenced from a static context
    }
}

package aula2;

public class Exercicios {
    public void Exercicio1(int A, int B) {
        if (A < B) {
            for (int i = A; i < B; i++) {
                if (i % 2 != 0) System.out.println(i);
            }
        }
        else if (A > B) {
            System.out.println("Os dados inseridos foram invertidos e o código foi re-executado!");
            int aux = A;
            A = B;
            B = aux;
            Exercicio1(A,B);
        }
        else {
            System.out.println("Os dois números são iguais!");
        }
    }
}

O código pega 2 números e mostra o ímpares entre eles.
Desculpem minha ignorância. Agradeço.

package aula2;  
      
    import java.util.Scanner;  
      
    public class Aula2 {  
          
        public static void main(String[] args) {  
            // a variavel ex agora é local, não mais uma variável-membro da classe Aula2
            Exercicios ex = new Exercicios();  
          
            ex.Exercicio1(Integer.parseInt(new Scanner(System.in).nextLine()), Integer.parseInt(new Scanner(System.in).nextLine()));
        }  
    }  

O método main é estático e por isso não pode referenciar a um atributo de instância.

Para resolvê-lo, se você só usa seu objeto no escopo estático (sem depender de nenhum instância em particular) resolva como postado acima, simplesmente declarando em escopo local o objeto que vai usar, e se precisar compartilhar o atributo entre diferentes métodos estáticos adicione o modificador estático (static) à variável e ela se tornará acessível a eles.

Se precisar que cada instância tenha um valor diferente nesse atributo adicione esse valor como parâmetro do método.

Espero ter ajudado.

Você tem um método estático (main) acessando um objeto não estático (Exercicios ex = new Exercicios(); )

A solução do amigo aí também é válida, mas tente assim também:

package aula2;  
  
import java.util.Scanner;  
  
public class Aula2 {  
      
    Exercicios ex = new Exercicios();  
      
    public static void main(String[] args) {
        Aula2 aula = new Aula2();
        aula.ex.Exercicio1(Integer.parseInt(new Scanner(System.in).nextLine()), Integer.parseInt(new Scanner(System.in).nextLine()));   
    }  
}  

Valeu gente! Entendi agora. Resolvido.

porque se instanciar um objeto Scanner dentro de um método main

Scanner scanner = new Scanner(System.in);

ele vai gerar uma observação??