Acessando e modificando variáveis de Classes e Objetos

Visto para que servem os objetos e classe em Java, como declarar, criar uma classe e instanciar um objeto, vamos agora, nesta seção, colocar algumas variáveis dentro de nossa classe e aprender como atribuir valores para elas, bem como acessá-las.

Este tutorial é o primeiro passo para criarmos atributos (características) em nossas classes.


Variáveis de métodos e Variáveis de Classes

A diferença das variáveis declaradas nas classes daquelas declaradas no método 'main' ou em outros métodos (que você aprenderá a criar numa seção futura do curso), é que nos métodos elas são locais e temporárias.

Ou seja, as variáveis locais método podem ser acessadas somente dentro daquele método, e quando este acaba, seu valor é perdido.

Quando declaramos um objeto de uma classe, suas variáveis passam a existir a partir daquele momento até enquanto o objeto existir.
Quanto ao seu acesso, o Java provém artifícios interessantíssimos de segurança. Podemos declarar variáveis de uma classe como 'public' (que podem ser acessados de qualquer lugar do programa), 'private' (só elementos da própria classe podem acessar esses dados) e 'protected' (só elementos da própria classe e subclasses que podem ver essa variável).

Veremos mais isso em Encapsulamento, numa seção futura do nosso curso online de Java, quando falarmos mais sobre Orientação a Objetos. Por hora, saiba apenas que existe e para que servem - segurança e organização.


Criando classes com atributos

Voltando a nossa classe "Aluno", vamos criar 3 variáveis: "Nome", que vai receber o nome do aluno e "notaMat" e "notaFis" que vão receber a nota de matemática e física do aluno.
A nossa classe ficará:

public class Aluno {
    public String nome;
    public double notaMat,
                         notaFis;
}


Sim, simplesmente isso.
Declaramos as variáveis como 'public' porque vamos acessá-las de outra classe, a classe "PrimeiraClasse", que contém o método 'main'.
Quando estudarmos Métodos, mais adiante em nosso curso online de Java, veremos como declarar esses atributos de forma 'private', de modo que eles ficam inacessíveis à outras classes. E como vamos acessar esses dados então? Através de métodos dessa classe.
Assim podemos controlar como essas variáveis serão usadas.

Alterando e Acessando atributos de uma classe

Variáveis criadas, vamos dar valor a elas. Vamos usar a classe Scanner para perguntar ao usuário o nome do aluno e suas notas.

Note que, se estas variáveis estivesse na classe principal, que contém o método main, simplesmente atribuiríamos valores da seguinte forma:
notaMat = [numero]

Porém, essas variáveis não estão nessa classe. Estão em outra.
Então temos que acessar através do nome do objeto.
No meu caso, declarei o objeto Aluno com o nome "patropi", então para acessar seus elementos, simplesmente vamos usar:
patropi.notaMat

Ou seja: nomeDoObjeto.nomeDaVariavel;

Então, nossa classe principal, que instância um objeto, preenche o nome e duas notas do Aluno, depois mostra esses valores e a média será:

PrimeiraClasse.java

import java.util.Scanner;
        
public class PrimeiraClasse {

    public static void main(String[] args) {
        Aluno patropi = new Aluno();
        Scanner entrada = new Scanner (System.in);
        
        System.out.print("Nome do aluno: ");
        patropi.nome = entrada.nextLine();
        
        System.out.print("Nota em Matemática: ");
        patropi.notaMat = entrada.nextDouble();
        
        System.out.print("Nota em Física: ");
        patropi.notaFis = entrada.nextDouble();
        
        //Exibindo os dados
        System.out.printf("O aluno \"%s\" tirou %2.2f em Matemática, "
                + "%2.2f em Física e obteve média %2.2f\n", patropi.nome,
                                                        patropi.notaMat,
                                                        patropi.notaFis,
                                                        (patropi.notaMat+patropi.notaFis)/2);
    }
}

Aluno.java
public class Aluno {
    public String nome;
    public double notaMat, 
                  notaFis;
}


Dentro do printf usamos \" para exibir aspas duplas.

34 comentários:

  1. Devido o nível da dificuldade do
    assunto abordado creio eu que
    ficaria melhor para fazer...

    1 a classe Aluno com os

    atributos, métodos e variáveis.
    E na classe primeiraClasse
    instanciar ou "chamar" os mesmos
    alunos da classe Aluno.

    exemplo...

    Aluno FulanodeTal = new Aluno();

    ResponderExcluir
  2. Não esqueçam do "Case sensitive"

    ou seja, pro JAVA as variáveis:

    Aluno e ALUNO e aLUNO sao diferentes (!=)



    Mesmo modo criado mesmo modo chamado

    Aluno == Aluno

    ok !!

    ResponderExcluir
  3. Caro Anônimo,

    Seguindo o roteiro do curso, para os iniciantes, o assunto métodos ainda não foi tratado (será a próxima seção).

    Essa lição é ensinando o básico de Classes e Objetos...só declarando, instanciando e acessando os elementos.

    O próximo artigo já é uma introdução sobre os Construtores.

    ResponderExcluir
  4. Olá Anônimo de baixo, você está certo.

    Conforme escrevemos em um dos primeiros artigos do curso, quando ensinamos a cria o primeiro programa em Java, a linguagem é mesmo case sensitive!

    ResponderExcluir
  5. A sequência para mim, está perfeita, sem complicações, estou gostando muito do curso...

    ResponderExcluir
  6. Para mim está perfeito, sem colocar nem tirar nada. Obrigado...

    ResponderExcluir
  7. A equipe agradece seu feedback, Alessandro.

    A apostila de Java é feita pros leitores mesmo. É sempre bom quando retornam alguma sugestão, crítica ou elogio.

    Bons estudos.

    ResponderExcluir
  8. Realmente entender o conceito e funcionamento das classes e objetos é um pouco complicado no início. Mas esse curso tem sido bem esclarecedor. Estou gostando bastante.
    Parabéns!!!!

    ResponderExcluir
  9. Realmente,
    O curso é ótimo.

    Parabéns!

    ResponderExcluir
  10. Execente, Muito bom !!!!

    ResponderExcluir
  11. Perfeito!
    Uma excelente aula. Eu sou totalmente leigo e estou adorando as aulas rsrsrs
    OBRIGADO MESTRE!!!
    =B

    ResponderExcluir
  12. Esta de parabéns as aulas são top, gostaria de saber o significado disso
    %s e %2.2f desde já obrigado e sucesso...

    ResponderExcluir
  13. Bom eu estava estudando os tipos de números e lá vc disse que o computador só entende numero decimal com ponto. Ai eu fui fazer esse exemplo de "Acessando e modificando variáveis de Classes e Objetos". Quando o programa me solicitou a primeira nota eu estava coloca um número decimal com ponto (Ex:7.5). O programa tava dando erro. Fiquem revendo o código várias vezes, quando aí testei o mesmo número com virgula ao invés de ponto e o programa não apresentou erro. Você poderia explicar melhor esse lance dos números decimais na linguagem Java?

    ResponderExcluir
  14. Pois é Tarcísio, pelo que andamos ouvindo, tem algo diferente.

    Creio que se instalar o Java com alguma opção pra língua portuguesa, ele faz essa troca naturalmente, pois para nós brasileiros o certo de um número decimal é com vírgula, e não ponto.

    ResponderExcluir
  15. aquele Aluno como tipo da variavel que ta meio confuso na explicação cara ;s

    ResponderExcluir
  16. Java progressivo me desculpe mas essa é pro último post anônimo (eu sei que vc n vai publicar msm (mas tb sei que ta cheio de vontade)): "Cara você leu o conteúdo? Deixa de ser lerdo ohhh apagado... Um negócio simples desse... Tem que ler pow..."

    ResponderExcluir
  17. Excelente aula!espero conseguir acompanhar tenho dificuldade em abstrair os conceitos de manipulação de classes.

    ResponderExcluir
  18. Excelente aula! gostei muito, parece que programar em Java é muito bom depois que se aprende. É super versátil.

    ResponderExcluir
  19. Muito bom esse material...Um dos melhores que já encontrei até hoje. Descomplicado e fácil de entender. Parabéns!

    ResponderExcluir
  20. O meu esta dando erro fiz igual o que esta ai e mesmo assim esta com erro,uso netbeans 8.0 alguém sabe o que pode ser

    ResponderExcluir
  21. Este comentário foi removido pelo autor.

    ResponderExcluir
  22. Olá,

    Fiz tudo conforme exemplo, mas recebi uma mensagem assim ao executar:

    Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - cannot find symbol
    symbol: class Aluno
    location: class primeiraclasse.PrimeiraClasse


    Parace que ele não consegue achar a classe Aluno, pois não reconhece o comando .

    Alguma ideai do que eu possa ter errado?

    Obrigado

    ResponderExcluir
  23. Q é PATROPI? ALGUEM ME EXPLICA

    ResponderExcluir
  24. Olá, tb me deparei com o erro "Exception in thread...", no meu caso, "alterei" o código que exibe as informações, e funcionou.

    codigo tutorial:

    //Exibindo os dados
    System.out.printf("O aluno \"%s\" tirou %2.2f em Matemática, "
    + "%2.2f em Física e obteve média %2.2f\n", patropi.nome,
    patropi.notaMat,
    patropi.notaFis,
    (patropi.notaMat+patropi.notaFis)/2);

    -----------------------------------------

    meu codigo:
    System.out.printf("O aluno " + protopi.nome + "\nNota em Matematica: " + protopi.notMat + "\nNota em Fisica: " + protopi.notFis + "\nMedia Final: " + (protopi.notFis+protopi.notMat)/2);

    ResponderExcluir
  25. Irá dar um erro se você digitar um numero com ponto = 3.0
    por causa que ele vai ler a formulação do seu teclado que está em PT
    então podemos resolver de duas formas.

    1 - podemos usar tbm input.useLocale(Locale.US);

    2 - donaFifi.notaF = Double.parseDouble(teclado.nextLine());

    ResponderExcluir
  26. Curso show de bola, estou a aqui a cada etapa aprendendo bastante, tenho algum conhecimento, pois faço programações de robo abb, e tb tive uma experiencia em portugol, então muitas funções são bem parecidas. Mais estou aqui com vontade de aprender java.

    Parabens instrutor, que possa ter mais pessoas com atitudes igual a sua, ensinando de um jeito facil e prazeroso de aprender.

    att

    ResponderExcluir
  27. Obrigado está clareando bastante, não sei o que seria se não tivesse o Java Progressivo!

    ResponderExcluir
  28. Boa tarde, muito bom o conteúdo do site e as explicações... Porém pra mim não ficou claro essa declaração:

    System.out.printf("O aluno \"%s\" tirou %2.2f em Matemática, "
    + "%2.2f em Física e obteve média %2.2f\n", Pedro.nome,
    Pedro.notaMat,
    Pedro.notaFis,
    (Pedro.notaMat+Pedro.notaFis)/2);

    esses %2.2f mt confuso

    ResponderExcluir
  29. Perfeito, muito obrigado, o curso é simples e bem objetivo. O jeito vomo ele fala, como ele explica é bem natural, como se fosse de aluno para aluno.

    ResponderExcluir
  30. Cara, parabéns pelo ótimo trabalho. Super obrigado mesmo. Talvez eu tenha chegado atrasado aqui(em 2016), mas está sendo surpreendente o quão bem feito e eficiente é esse curso. Forte Abraço, e que o Universo te dê em dobro o retorno pelo esforço de disponibilizar e dividir o conhecimento com quem precisa. Forte Abraço!! Rodrigo.

    ResponderExcluir
  31. Comecei a acompanhar os tutorias do JavaProgressivo há 4 dias. Haviam uns 10 anos que eu não programava e já estou conseguindo implementar algumas coisas que certamente me ajudarão no meu doutoramento. Os textos são bem leves e os exemplos e exercícios são extremamente didáticos. Vou lembrar de colocar o JavaProgressivo nos agradecimentos na minha tese.

    ResponderExcluir
  32. simplesmente ótimo...
    sou programador a mais de 26 anos ... só que viciado em uma unica linguagem usada por uma grande software house... em busca de mais conhecimentos nunca quis estudar Java pq tinha MEDO ... nao ia entender....
    Obrigado ... até o vovo aqui ta entendendo tudo ... estou me divertindo aprendendo

    ResponderExcluir
  33. Depois de muita pesquisa na net descobri que para solucionar o erro Exception in thread stack overflow error, basta acrescentar static nos objectos do tipo Aluno

    ResponderExcluir