Não consigo instânciar variaveis na main (iniciante)

Quando criei uma classe nova na classe principal tentei instanciar a mesma na main, só que apareceu que não era possível utilizar variável não statica em um contexto estatico, eu não sei onde errei na instancia dela na main.
CÓDIGO:

package programa.pkg1;

public class Programa {

public static void main(String[] args){

    UmaClasse A;
    A = new UmaClasse();// ta aparecendo "non-static variable cannot be used on a static context"

}

public class UmaClasse{
    
}

}

E aí parceiro, tudo certo?

Você está declarando sua classe “UmaClasse” dentro do escopo da sua classe “Programa”, para que essa sua classe funcione da maneira que está ela precisaria ser uma classe “static”, sendo que neste caso ela não precisaria de uma instanciação, pois membros “static” são membros que fazem sentido independentemente de objetos, portanto, não precisam de objeto para serem chamados, sendo chamados a partir do próprio nome da classe.

Todavia, se você retirar a classe “UmaClasse” do escopo da classe “Programa” você verá que a sua IDE irá acusar um erro, pois só pode haver uma classe “public” por arquivo, então se você retirar o “public” e deixar apenas “class UmaClasse” você verá que não será acusado nenhum outro erro, assim você podendo instanciar da maneira que você queria.

Para finalizar, o que eu recomendo você fazer é: Crie apenas uma classe por arquivo, isso é o que eu costumo fazer na maioria das vezes, assim você irá ter uma classe realizando cada função específica, ou seja, você irá delegar as responsabilidades do seu programa, mas ainda assim, mantendo a sua funcionalidade coesa, e você não terá problemas também para instanciá-lo, a não ser, é claro, que esta dada classe seja um membro estático, já que nesse caso ele não precisaria de uma instanciação.

1 curtida

Boa tarde amigo.

Declarar classes dentro classes é um pouco mais complicado, mas é possível mesmo não sendo estáticas.

public class Programa {

    public static void main(String[] args){
        Programa programa = new Programa();
        UmaClasse umaClasse = programa.new UmaClasse();
        umaClasse.teste();
    }

    public class UmaClasse{
        public void teste(){
            System.out.println("Uma classe");
        }
    }
}

Boa sorte a todos :metal::sunglasses::metal:

3 curtidas

muito obrigado pela explicação ! realmente resolveu o meu problema, irei lembrar de seu conselho :grinning:

1 curtida

Obrigado ! esse método também resolveu o problema, eu não tinha instanciado a classe principal :grin:

1 curtida