Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?
Mostrando postagens com marcador tutorial de java. Mostrar todas as postagens
Mostrando postagens com marcador tutorial de java. Mostrar todas as postagens

Exibindo mensagens de textos na tela: print, println e printf em Java

 Agora que já aprendemos como configurar nosso ambiente de desenvolvimento para programar bem como criar e executar nosso primeiro programa em Java, vamos modificar este primeiro programa que fizemos, para entender melhor como exibir mensagens de texto na tela.

Vamos aprender o que é, como funciona e como usar os comandos print, println e printf.


Imprimir mensagens na tela, em Java

print, em inglês, significa imprimir. A primeira coisa que vem em nossa mente, quando falamos em imprimir, é lembrar de uma impressora, não é verdade?

Mas imprimir tem um significado mais amplo. O que fizemos no nosso primeiro programa, o Olá, mundo! também foi uma impressão. No caso, imprimimos uma frase na tela de nosso computador (especificamente, no terminal de comando do Netbeans).

Mas também é possível imprimir um texto para um arquivo, por exemplo. Ou seja, você roda o programa, e o Java envia um texto para um arquivo, como um .txt e salva ele no seu computador. Aprenderemos isso mais a frente, em nosso curso, na seção de Files.

Nesse tutorial, vamos aprender como usar três comandos para imprimir mensagens de texto na tela:

  • print
  • println
  • printf

Esses comandos, que são chamados de métodos, fazem parte do objeto System.out
Não se assuste com os termos, bem em breve você vai entender o que são objetos, métodos, classes e toda essa sopa de nomes esquisitos.


O método System.out.print do Java

Vamos começar por um código que já fizemos, usando o método print. Como vocês perceberam no tutorial anterior, eles simplesmente imprimiu uma mensagem na tela. 

Em programação, chamamos um pedaço de texto de string, ok? Vamos mudar a string passada "Olá, mundo!", para "Curso Programação Progressiva", nosso código fica assim:

  1. package enten.meuprimeiroprograma;
  2.  
  3. public class MeuPrimeiroPrograma {
  4. public static void main(String[] args) {
  5. System.out.print("Curso Java Progressivo");
  6. }
  7. }

Teste e rode novamente.

Como exibir imagens de texto em Java

O caractere de quebra de linha em Java: \n

E se quisermos exibir a mensagem:
"Curso Java Progressivo"
"Aluno: [seu nome]"

Como fazer? Simples, use o comando duas vezes.
Veja como fica o código:

  1. package enten.meuprimeiroprograma;
  2.  
  3. public class MeuPrimeiroPrograma {
  4.  
  5. public static void main(String[] args) {
  6. System.out.print("Curso Java Progressivo");
  7. System.out.print("Aluno: Bill Gates");
  8. }
  9. }

Agora teste e veja o resultado:

Como exibir texto no Java
Opa...calma aí. Eu queria:
"Curso Java Progressivo"
"Aluno: Bill Gates"

E não "Curso Java ProgressivoAluno: Bill Gates"
Deu erro! O que houve?

Simples, o método print enviou a primeira string ("Curso Java Progressivo") e logo em seguida enviou para a tela a segunda string ("Aluno: Bill Gates"). E o que tem entre uma string e outra?
Nada. Por isso ele não exibiu nada entre as strings, o que fez ela saírem coladas.

Aqui vai o grande segredo: entre um texto e outro, queríamos dar uma quebra de linha (famoso Enter, do teclado). E a quebra de linha também é um caractere!

Esse caractere é representado por: \n
Sempre que o Java se deparar com este código (uma barra e a letra n), ele vai inserir uma quebra de linha na tela. Teste o seguinte código, com o caractere de new line no final da primeira string:

  1. System.out.print("Curso Java Progressivo \n");
  2. System.out.print("Aluno: Bill Gates");
E o resultado vai sair perfeito! Outra maneira seria usar da seguinte forma, no começo da segunda string:

  1. System.out.print("Curso Java Progressivo");
  2. System.out.print("\nAluno: Bill Gates");
Desafio de Java:
Crie um programa, em Java, usando o método print, apenas uma vez de modo a imprimir o texto na tela:
"Curso
 Java
 Progressivo"

Ou seja, uma palavra em cada linha. Mas repetindo: usando o comando System.out.print apenas uma vez! A resposta você pode conferir em nossa Apostila Java Progressivo.

O método System.out.println do Java

O 'ln', no comando println vem de...line, ou linha em inglês.

Esse comando faz a mesma coisa que o print, porém ele pula de linha automaticamente, ao final da string. 

Faça o teste com o código abaixo:

  1. package enten.meuprimeiroprograma;
  2.  
  3. public class MeuPrimeiroPrograma {
  4.  
  5. public static void main(String[] args) {
  6. System.out.println("Curso Java Progressivo");
  7. System.out.print("Aluno: Bill Gates");
  8. }
  9. }

E o resultado:

Como exibir uma frase na tela em Java

Veja que usamos os dois comandos. Primeiro o println, que exibiu a primeira frase e em seguida deu a quebra de linha automaticamente, colocando o cursos no início da linha debaixo, no terminal de comando. Depois, o print normal, pois não necessitamos de mais uma quebra de linha.


O método System.out.printf do Java

E, por fim, o método printf, que serve para exibir mensagens formatadas. Com esse recurso, você tem uma gama bem maior e melhor de possibilidades para imprimir mensagens de texto. Por exemplo, teste o seguinte código:

  1. package enten.meuprimeiroprograma;
  2.  
  3. public class MeuPrimeiroPrograma {
  4.  
  5. public static void main(String[] args) {
  6. System.out.printf("Minha idade é: %d anos", 2112);
  7. }
  8. }

O resultado vai ser:
"Minha idade é: 2112 anos"

Agora vamos entender o que aconteceu. Dentro da string tem um código especial, o %d, ele serve para representar números inteiros. Ele é um tipo de especificador de formato, no caso o formato de dados é o número 2112, que é um inteiro, que foi colocado dentro do comando printf, depois da string.

Dizemos que "Minha idade é: %d anos" e 2112 são argumentos (informações), que demos para o método printf. O especificados %d vai pegar a informação do próximo argumento, que é o número inteiro 2112.

Uma string, por exemplo, é representada pelo especificador %s. Teste o código:

  1. System.out.printf("%s: %d anos", "Minha idade é: ", 2112);

Temos aí três argumentos:

  1. string: "%s: %d anos"
  2. string: "Minha idade é: "
  3. número inteiro: 2112
O especificador de formato %s foi no próximo argumento e pegou a string 'Minha idade é: ' e colocou no lugar do código %s. Em seguida, foi próximo no argumento (inteiro 2112) e colocou no lugar do especificador %d, para exibir a mensagem final no terminal de comando:
  • "Minha idade é: 2112 anos"

Ao longo de nosso curso, vamos aprender a usar melhor o printf, quando aprendermos mais sobre os tipos de dados (números inteiros, números decimais, números binários, caracteres, booleanos etc).

JRadioButton - Botão de Rádio ou de Opção (Tutorial de Java GUI)

Neste Tutorial de GUI em Java, vamos falar dos Radio Buttons, também conhecidos por botão de opção ou botão de rádio, que são usados para fazer escolhas únicas:

Curso de Java completo online grátis com certificado

Apostila de Java completa para download pdf

JCheckBox - Como Usar Botões de Checagem (CheckBox ou Caixa de Seleção) (Tutorial de Java)

Neste Tutorial de Java sobre GUI, vamos saber o que é, para que serve e como usar o JCheckBox, um componente muitíssimo importante e usado em aplicações gráficas, que serve para 'checar' ou marcar uma opção.

Apostila de Java para download, Curso de Java, Tutorial online completo

Tratando evento e ações em GUI - Event Handling, ActionListener, ActionEvent e actionPerformed

No artigo passado de nossa apostila de Java, ensinamos como criar botões em Java através da classe JButton, e vimos que nossos aplicativos gráficos estão começando a ter um aspecto mais agradável e estão se tornando cada vez mais profissionais.

Neste tutorial de Java vamos ensinar como tratar eventos e ações, e a partir de agora nossas ações (como clicar, apertar alguma tecla etc) na GUI irão dar disparar qualquer funcionalidade que queiramos.

Tutorial de Java - Strings e Caracteres

A tecnologia, ou computação de um modo geral, sempre foi sinônimo de mudança constante.
Você compra uma novidade, como um celular, hoje e mês que vem ela já vai estar defasada.
Sem dúvidas, a computação está bem mais interativa e com multimídia (vídeos, sons, comunicação visual etc).

Porém, mesmo com todas essas mudanças, uma coisa nunca mudou e nunca vai mudar: as informações textuais. Sempre será necessário escrever (nem que seja para programar), ler, fazer contratos, mandar recados, lembretes, preencher formulários etc etc.

E quando falamos em textos, duas ideias básicas vem à tona em Java: os caracteres e as strings.
Nesta seção iremos aprender a manipular strings e caracteres, que são atividades importantíssimas para qualquer programador.

Você poderá extrair informações de textos, verificar se a senha correta foi digitada, se o usuário forneceu a data da maneira pedida (dd/mm/aa ou dd/mm/aaaa , etc), validar um número de CPF, entrar em determinado site e baixar as informações de texto, e selecionar automaticamente só aquilo que deseja (por exemplo, entrar no site da Caixa e extrair somente o resultado da loteria dele), manipular e editar informações de arquivos etc etc etc.

Tutorial de Java - Caracteres e Strings


01. A Classe String
02. A Classe StringBuilder 
03. A Classe Character
04. Regex: Usando as Expressões Regulares em Java

Tutorial de Java - Arquivos (Files)

Você já parou para perceber o que acontece quando você fecha os aplicativos que programou em Java?

O que ocorre com as variáveis, decisões que tomou, loopings que foram executados, o placar dos jogos que você criou e jogou?
Tudo se perdeu ao ser fechado, não é verdade?
Mas é assim no seu dia-a-dia e nos programas que usa?

Já imaginou, fazer um trabalho, desligar o computador e ter que fazer tudo de novo?
E aquele filme que você passou horas para baixar, só teve tempo de assistir uma parte. Imagina se ele é apagado toda vez que você desliga seu computador.

E aquele jogo que você dedicou horas do seu dia passando de fases e obtendo pontos, será que alguém iria jogar tudo de novo do começo, se todos os dados fossem apagados quando se desliga o computador?

Óbvio que não. Então nossos programas também não deve perder suas informações.
E para não perder esses dados, eles devem ser salvos em sua máquina, na forma de arquivos (files em inglês).

Neste tutorial de Java iremos aprender como criar um arquivo, inserir informações, ler, apagar, salvar e fazer o que quisermos com nossos dados, de modo que eles não sejam perdidos ao desligar seu aplicativo nem quando o computador for desligado.

Você poderá criar programas úteis com bancos de dados em seu computador, poderá guardar as pontuações nos jogos que fez e terá a liberdade de nunca mais perder nenhum dado.

Tutorial de Java - Arquivos (Files)


01. Arquivos (Files) - O que são, para que servem e o que é possível fazer
02. Entrada, Saída e Tipos de Dados - Fluxo (stream) e o Pacote Java.io
03. Como ler caracteres, Strings e Bytes de um arquivo
04. Class File ( a classe File ) - Obtendo informações de arquivos e diretórios
05. Class Formatter ( a classe Formatter ) - Escrevendo em arquivos
06. Class Scanner ( a classe Scanner) - Lendo e Recebendo dados de arquivos

Curso Java Progressivo - Tutorial Inicial

Bem-vindos ao Curso Java Progressivo.

Antes de mais nada, gostaríamos de parabenizar você por estar acessando um curso de programação online, por sua própria vontade e desejo de aprender, afinal nosso site é totalmente independente de empresas, faculdades ou cursos presenciais. Se está aqui, é por interesse próprio, o que é raro hoje em dia.

O que é o Curso Java Progressivo

O Curso Java Progressivo é um projeto totalmente independente que visa ensinar a linguagem de programação Java, online e de maneira totalmente gratuita, não sendo necessário sequer fazer algum cadastro para começar a aprender a programar em Java.

O Curso Java Progressivo é uma apostila online, onde seu vasto conteúdo é dividido em seções, com aulas, tutoriais, vídeo-aulas, exercícios, códigos comentados, programação de jogos, dicas de apostilas, sites para estudar, review dos melhores livros, fórum de discussão sobre a linguagem e tudo mais que envolver a linguagem Java.

Como estudar pelo Curso Java Progressivo

Se você for iniciante, simplesmente acesse a seção Índice, que lá você irá encontrar todo o conteúdo de nosso curso, mas com um diferencial inédito na internet: na ordem lógica de estudo.
Ou seja, comece do primeiro tutorial, e vá avançando de um por um, e só vá para o próximo quando tiver aprendido bem o tutorial atual.

O tutorial que se seguem irão depender dos conhecimentos ensinados nos tutoriais passados.
Assista as vídeo-aulas, adquiria um livro para estudar offline, baixe as apostilas que indicamos e procure sempre estudar pelo maior número de fontes possíveis, pois é isso que irá tornar você um programador Java diferenciado.

Não é iniciante?
Então basta navegar pelas seções que deseja aprender.
Por ser bem dividido em assuntos, o Curso Java Progressivo é uma ótima fonte de referência e consulta, ideal para relembrar aquele comando ou código que você estudou e não lembra mais.

Basta acessar nosso site, do seu computador, tablet, na escola/curso/faculdade e ler o tutorial que está precisando. Nossa apostila online é indicada por dezenas de professores, de diversas instituições de ensino superior pelo país.

Pode confiar, estudamos, pesquisamos e escrevemos todos os nossos tutoriais com cuidado, responsabilidade e passando uma grande quantidade de informação, para que sua formação Java não deixe a desejar a de nenhuma outra pessoa, curso ou faculdade.

Qual o diferencial do Curso Java Progressivo

É possível sim encontrar todo o conteúdo de nossa apostila online, de qualquer livro ou curso, pela internet. Porém, este material se encontra na forma de tutoriais desconexos, em diferentes sites, sem uma ordem lógica ou preocupação didática.

E mesmo que existam materiais para estudar na internet, seria preciso saber que ordem deve ser estudada. É muito comum e fácil achar um site que ensina a fazer o "Hello World" em Java, e em seguida já manda um tutorial sobre o uso do banco de dados em MySQL no Eclipse, sem a menor preocupação com o estudante.

A diferença do Curso Java Progressivo é que ele começa do básico, do zero mesmo, perfeito para iniciantes em programação, e vai se desenvolvendo aos poucos, com calma, se preocupando com a aprendizagem, onde cada tutorial é sequência de outro, como se fosse um livro.

Aliás, o Curso Java Progressivo possui cerca de 200 artigos, cada um contendo conteúdo suficiente para encher de 3 a 4 páginas de um livro, o que torna nossa apostila maior e mais completa que muitos materiais por aí.

Diferente da maioria das outras fontes de estudo, também indicamos livros para você estudar, apostilas gratuitas na internet e as melhores vídeo-aulas do Youtube, totalmente liberadas para uso didático.

Como obter o Certificado do Curso

Para emitir a certificação do curso, é necessário nos certificar de que você estudou, avaliar seus conhecimentos e aprendizados.

Infelizmente o Curso Java Progressivo não tem uma estrutura e equipe pedagógica para emitir tal certificação, pois somos um projeto totalmente independente.

Porém, como muitas pessoas nos perguntam se o curso emite certificado, se iremos dar algum comprovante de estudo para colocar em currículo, portfólio ou mesmo como atividade extra curricular em sua faculdade, decidimos buscar uma empresa que fosse profissional no ensino a distância.

Assim, firmamos parceria com a Brava Cursos, reconhecida pelo MEC e em todo território nacional e desempenha um fantástico e conceituado trabalho em formar e emitir certificados nas mais diversas áreas, e por um valor que, de tão baixo, beira ao inacreditável.

Simplesmente não perca essa oportunidade e obtenha já seu certificado do Curso de Java:
Curso de Orientação a Objetos com Java, com certificado

Tutorial de Java - Array e ArrayList

Se você notar bem em nossos tutoriais passados de Java, sempre criamos algumas variáveis, geralmente não muitas. Raramente usamos mais de 10 variáveis.
Isso é normal, principalmente em tutoriais mais básicos, já que estamos no início de nosso curso.

Porém, quando você se tornar profissional irá trabalhar em grandes empresas, com dezenas ou centenas de funcionários. Talvez tenha que fazer um sistema em Java para uma escola, com milhares de alunos, ou criar um banco de dados com milhares de produtos de um supermercado.

E aí haja criatividade para criar milhares de variáveis, haja tempo para fazer isso, e o principal: haja paciência e calma para não se perder no meio de tantas declarações, correto?
Errado.

A programação serve para facilitar nossas vidas. Criar centenas ou milhares de variáveis, uma por uma, é algo totalmente absurdo e desnecessário.

Nesta seção de nosso curso iremos aprender a manipular diversas variáveis, dezenas, centenas, milhares, milhões ou quantas mais você desejar, de uma maneira bem simples e lógica.
Você verá como é simples e extremamente útil dominar a programação com Arrays e ArrayLists, pois estas classes nos permitirão manipular uma quantidade gigantes de dados, nos permite achar dados, organizar, criar filas, fazer cálculos e outras particularidades que não são possíveis de se fazer 'na mão'.

Podemos dizer que há dois propósitos básicos nos computadores: fazer cálculos e trabalhar com quantidades de informações que um ser humano jamais poderia trabalhar. E é isso que iremos aprender nestes tutoriais.

Tutorial de Java - Array e ArrayList


00. Introdução ao estudo de estrutura de dados em Java: Array, ArrayList, Listas, Filas e Pilhas
01. Arrays (ou vetores): como declarar, usar e acessar seus elementos
      Vídeo-aula: Arrays
02. Foreach: O laço for para Arrays
03. Array multidimensional ou Matriz: um Array de arrays
      Vídeo-aula: Matrizes ou Arrays Multidimensionais
04. Arrays em métodos: passagem por valor e passagem por referência
05. Classe Arrays (Arrays Class): aprenda a manusear (copiar, ordenar, buscar e manipular) Arrays
06. ArrayList: para que serve e como usar os principais métodos da ArrayList em Java
      Vídeo-aula: Como usar ArrayList
Apostila Caelum resolvida: Capítulo 5 - Um pouco de Arrays

Jogo usando if else, métodos, arrays, arrays multidimensionais e laços.
Jogo: Batalha Naval em Java [modo texto - humano x computador]


Como ser um excelente programador


Antes, gostaríamos de sugerir o nosso texto 'Como ser um excelente programador', nele a gente vai te orientar sobre o que estudar, como estudar, o que é importante, quais linguagens é bom saber, qual a melhor, como entrar no mercado do trabalho, como se portar numa entrevista de emprego e a característica mais importante que um programador deve ter.

Acesse nossa apostila para ler:




Tutorial de Java - Métodos (methods)

Nesta série de tutoriais de Java, iremos aprender a usar uma das ferramentas mais importantes, poderosas e flexíveis da linguagem: os métodos.

Métodos nada mais são que trechos de códigos, que fazem algo específico e que podem ser executados em qualquer lugar de seu código, sempre que for necessário, sem existir a necessidade de repetir aqueles comandos em Java.

Vimos como automatizar nossas tarefas, criando loopings que executavam códigos quantas vezes quiséssemos através de laços, como o for e o while.
Porém, uma vez que esses laços terminavam, eles ficavam para trás.
Com os métodos não, os métodos podem rodar sempre, de qualquer lugar.

Outra vantagem dos métodos, é a reutilização de código.
Por exemplo, você pode criar um método que faz uma soma, outro que calcula o quadrado de um número, outro que calcula o delta da equação do segundo grau, e qualquer método com funções em específicas.

No futuro, quando quiser esses códigos para fazer uma calculadora, por exemplo, eles já estarão prontos na forma de métodos, e você não terá que programar tudo de novo.
Não, basta chamar os métodos, a qualquer instante, e quando quiser, sem ser necessário repetir uma linha de código.

Aprenda bem o que são métodos, faça os seus com objetivos bem simples e definidos, e o principal: guarde e organize seus métodos, você irá usá-los pelo resto de sua vida como profissional de Java.

Tutorial de Java - Métodos


Apostila de Java, Capítulo 3 - Variáveis primitivas e Controle de Fluxo - Tipos primitivos e valores

Nesse artigo iremos comentar e resolver os exercícios propostos no capítulo 3, sobre Variáveis primitivas e Controle de Fluxo - Tipos primitivos e valores da apostila FJ-11: Java e Orientação a Objetos, da Caelum.
Clique aqui para saber sobre a Caelum e sua apostila.

O que são e como usar os métodos getWidth() e getHeight()

No artigo anterior de nossa apostila de Java, mostramos como criar um frame, adicionar um panel nele e criar uma linha nesse panel.

Porém, aplicações gráficas não são estáticas. Ao minimar, maximizar, mover de lugar, colocar a janela de outro programa por cima de nossa janela e uma infinidade de outros fatores fazem com que nosso aplicativo mude durante sua execução.

Altura e Largura

Note que no exemplo do código de nosso último artigo, criamos uma linha que vai do ponto (0,0) e vai até o ponto onde a largura (width) é 250 e a altura (height) é 250.
Ou seja, aquela linha liga os pontos (0,0) até o (250,250), e só.

Tente maximizar a tela e veja o que ocorre: a linha só existe de (0,0) até o (250,250).
E se você quiser sempre uma linha que ligue a extremidade superior esquerda até a extremidade inferior direita?

Você precisará das atuais informações de tamanho da tela do aplicativo, mas o Java armazena essas informações e podemos obter esses dados através dos métodos getWidth() e getHeight().


Os métodos getWidth() e getHeight()


Usamos os métodos getWidth() e getHeigth() para pegar as informações atuais da largura e altura da janela que o usuário está visualizando.

Agora, em vez de criar um desenho que liga o ponto (0,0) até o (250,250), vamos ligar a origem ao ponto (getWidth(), getHeight()).
Ou seja, sempre a linha sai da origem e termina na extremidade inferior direita, criando uma diagonal

Veja como ficou quando alongamos a tela:

Como usar os metodos getWidth e getHeigth para desenhar em Java
Usando getWidth() e getHeight(), a linha sempre toca a ponta inferior direita

Exemplo de código: Desenhando duas linhas em Java, usando getWidth() e getHeight()

Vamos agora, finalmente, desenhar algo em nosso frame/panel.
Vamos criar uma linha que saia da origem e termine no canto inferior direito.
As coordenadas dessa linha serão: origem(0,0), fim(getWidth() , getHeight() )

E outra que vai ligar a outra diagonal.
Ou seja a origem é no (0, getHeight()) e o término da linha em (getWidth(), 0).
Concorda?

Caso tenha dúvidas no código, ele foi inteiramente explicado no artigo passado.

Nosso código para desenhar essa linha será:

-->Lines.java

import javax.swing.JFrame;

public class Lines {

    public static void main(String[] args) {
       DrawLines panel = new DrawLines();

       JFrame frame= new JFrame("Desenhando Linhas - Curso Java Progressivo");

        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.setSize( 250, 250 );
        frame.setVisible( true );
        frame.add( panel );
} }

-->DrawLines.java


import java.awt.Graphics;
import javax.swing.JPanel;

public class DrawLines extends JPanel{
    
    public void paintComponent( Graphics g ){
    super.paintComponent( g );
        
    g.drawLine( 0, 0, getWidth(), getHeight() );
    g.drawLine( 0, getHeight(), getWidth(), 0 );

    }
}


Você deverá ver o seguinte desenho em sua aplicação Java:



Como criar um desenho de X em Java

Desenhando Linhas

Como é o eixo de coordenadas em programação Java
Vamos começar esta seção de programação gráfica com um conceito muito importante: as coordenadas da tela.

A origem é no canto superior esquerdo da tela.
O eixo x (horizontal) começa na esquerda e cresce em direção a direita.
O eixo y (vertical) começa de cima e cresce para baixo.

JFrame e JPanel: como criar uma aplicação gráfica em Java

No artigo passado, de Introdução ao estudo de GUI, demos uma explicação teórica e bem simples de entender sobre JFrame e JPanel. Agora vamos, de fato, usar JFrame e JPanel.

A partir deste ponto de nossa apostila de Java, iremos criar nossa própria 'janela', ou seja, não vamos usar as janelas já feitas, como nas caixas de diálogo.

Jogo da Velha em Java

Após estudar Herança, Polimorfismo, Classes e Métodos Abstratos chegou a hora de colocarmos nossos conhecimentos em prática para fazer algo realmente útil e bacana:
um jogo da velha.

Essa é uma versão simples, para ser jogada com duas pessoas. Note que, em uma aplicação Java simples como esta, o resultado saiu por volta de 300 linhas de código.

Mas deixamos as classes e tudo pronto para que, em um próximo tutorial de Java, possamos adicionar o computador em dois modos: modo fácil e modo infalível.

Sim, existe uma estratégia que podemos adotar (ou o computador pode adotar) para nunca perder uma partida de jogo da velha:
http://pt.wikihow.com/Ganhar-no-Jogo-da-Velha

Herança em Java - o que é, para que serve, exemplos e quando usar

Chegamos em um ponto muito importante em nosso curso de Java no que se refere a Programação Orientada a Objetos.
Herança é uma das maiores características desse tipo tão importante e usado tipo de programação.

Através desse recurso, você irá criar classes de uma maneira bem mais rápida, eficiente e fácil de manter: baseando classes em outras.

set e get: o que são e como usar esses métodos de forma correta

Vamos aprender nesta aula de nosso curso online de Java os dois métodos mais usados pelos programadores Java: os getters e setters.

O que são e para que servem os métodos get e set

get e set nada mais são que métodos, que freqüentemente vemos em classes de Java.
Eles servem para pegarmos informações  de variáveis da classe que são definidas como 'private', porém esses método são definidos como 'public'.

Daí surge uma pergunta natural: por que criar métodos para acessar variáveis, se podemos acessar elas diretamente?
Simples: questão de segurança.

As variáveis 'private' só podem ser acessadas de dentro da Classe. É como se elas fossem invisíveis foram do escopo da classe/objeto. Assim, evitamos que outros métodos, classes ou hackers tenham acesso aos dados de determinada classe, que muitas vezes podem ser dados privados, como é caso de aplicações para empresas e bancos.

Como tratar, então, essas variáveis?
Aí que entra a questão dos métodos. Vamos permitir o acesso a essas variáveis, claro (senão não haveria sentido em usar esses atributos).
Porém, vamos ter um total controle sobre essas variáveis através dos métodos.

Por exemplo: suponha que você tenha que criar uma aplicação para um banco, onde vai limitar o número de saques de um cliente.
Os valores do saldo desse cliente ficarão armazenados na variável 'saldo'. Se você der acesso total a essa variável, o cliente poderia usar de forma descontrolada os serviços do banco.

Porém, podemos criar um método em que, cada vez que o cliente saque dinheiro ele ative um contador:

public void setSaque(double valor){
saldo -= valor;
contador++;
}


Nesse trecho de código, quando o usuário tenta sacar, através do menu do caixa eletrônico, ele vai para o método 'saque()'.
Então cada vez que ele saca, seu saldo diminui em 'valor' e um contador (que é uma variável da classe) é incrementado. É impossível fugir desse método!
Sacou? O contador roda! Sempre!

Sabemos que temos um limite diário de saque, vamos supor que seja três. Então vamos limitar o número de saques:
public void setSaque(double valor){
if(contador <=3){
saldo -= valor;
contador++;
   } else {
System.out.println("Você atingiu o limite de saques diários");
   }
}

Pronto. Se você sacar 3x, o contador terá valor 4 (supondo que seu valor inicial seja 1), e agora é impossível ele sacar mais, pois sempre vai cair no else.
No próximo artigo criaremos uma aplicação que simula um banco.

Como usar os métodos get e set

Usamos get para obter informações. Esse tipo de método sempre retorna um valor.
Usamos set para definir valores. Esse tipo de método geralmente não retorna valores.

Usando o exemplo da classe "Funcionario", do artigo passado sobre this e uso de métodos em Classe e Objetos, temos o código:



getSet.java


public class getSet{
    
    public static void main(String[] args){
        String nome = "Neil Peart";
        int ID=2112; 
        double salario = 1000000;
        
        Funcionario chefe = new Funcionario();
        
        chefe.setNome(nome);
        chefe.setID(ID);
        chefe.setSalario(salario);
        
        chefe.exibir();
    }

}


Funcionario.java


public class Funcionario {
    private String nome;
    private int ID;
    private double salario;
    
    public void exibir(){
        System.out.printf("O funcionário %s, de número %d recebe %.2f por mês", getNome(),getID(),getSalario());
    }
    
    public void setNome( String nome ){
        this.nome = nome;
    }
    
    public void setID( int ID ){
        this.ID = ID;
    }
    
    public void setSalario( double salario ){
        this.salario = salario;
    }
    
    public String getNome(){
        return this.nome;
    }
    
    public int getID(){
        return this.ID;
    }
    
    public double getSalario(){
        return this.salario;
    }
}

Como invocar métodos de dentro do construtor

Outra maneira de inicializarmos as variáveis de um Objeto, é usando os métodos 'set', direto do construtor:

setGet.java


public class setGet{
    
    public static void main(String[] args){
        String nome = "Neil Peart";
        int ID=2112;
        double salario = 1000000;
        
        Funcionario chefe = new Funcionario(nome, ID, salario);
        
        chefe.exibir();
    }

}


Funcionario.java


public class Funcionario {
    private String nome;
    private int ID;
    private double salario;
    
    public Funcionario( String nome, int ID, double salario){
        setNome(nome);
        setID(ID);
        setSalario(salario);
    }

    public void exibir(){
        System.out.printf("O funcionário %s, de número %d recebe %.2f por mês", getNome(),getID(),getSalario());
    }
    
    public void setNome( String nome ){
        this.nome = nome;
    }
    
    public void setID( int ID ){
        this.ID = ID;
    }
    
    public void setSalario( double salario ){
        this.salario = salario;
    }
    
    public String getNome(){
        return nome;
    }
    
    public int getID(){
        return ID;
    }
    
    public double getSalario(){
        return salario;
    }
}

Uso errado do get e set

Qual a diferença entre alterar e pegar o valor de uma variável diretamente (caso ela seja pública), e alterar e pegar o valor dela através de set e get (se ela for privada) ? Não é segurança, já que podemos alterar seu valor como bem quisermos, através dos métodos set.

Definir get e set para todas as variáveis, de forma direta, é um exemplo de péssimo hábito de programação. Infelizmente é uma técnica bem comum e muitos programadores, até os mais experientes, cometem esse ato inútil.

Para que servem então? Quando usar?
Só use set e get quando você for fazer algo além de simplesmente mudar o valor de uma variável 'private'.
Lá no começo de nosso tutorial, usamos o exemplo de contador, que limita o número de saques de um cliente a um caixa eletrônico.

Outro exemplo disso, seria em um aplicativo de vendas.
Ao comprar, o método set ou get automaticamente define o valor de desconto ou juros. Assim esse método faz algo mais além do que mudar a variável. Assim, sua aplicação se torna robusta e segura, pois se torna impossível mudar o valor da variável sem que seja alterada o valor do juros ou desconto.

Sempre que seu método set do tipo for:
retorno metodo(tipo valor){
this.nome_da_variavel = valor;
}

Muito provavelmente ele é inútil. Para saber quando usar é simples: use quando for fazer algo além de fornecer valor.

Um exemplo util:
retorno metodo(tipo valor){
this.nome_da_variavel = valor * juros;
};

Vamos treinar!

Exercício: Caixa Eletrônico em Java - Caixa.java
Crie um protótipo de caixa eletrônico em Java. No início, ele pede seu nome e valor $$ inicial que tem na conta. O programa deve fornecer um número de 4 dígitos - número da conta - para o usuário (use Random). Esses dados serão usados para criar um objeto da classe "Conta.java"

A seguir, mostra um menu com as opções (esse menu deverá ser um método):
- Extrato: exibe o nome, número da conta, saldo e quantos saques já foram realizados
- Sacar: recebe o valor a ser sacado, informa se pode ser sacado (não pode ficar negativo) e mostra o saldo
- Depositar: recebe o valor a ser depositado e mostra o novo saldo
- Sair

Esse menu aparece até o usuário escolher sair. As outras opções são métodos que devem fazer parte da "Conta.java" (setters e getters). Note que o usuário pode sacar no máximo 5 vezes por dia.

Solução comentada

Auto-referência com o this - Invocando métodos de Classes e Objetos

No tutorial de Java passado relacionado a Orientação a Objetos, falamos como criar construtores, com ou sem parâmetros, em nossas classes.

Nesta pequena aula, iremos aprender como referenciar membros de um objeto através da keyword 'this', que é uma ferramenta bastante usada por programadores Java em métodos dentro de Classes.

Referenciando membros da classe com this

Imagine que criemos uma classe chamada "Funcionario", onde seu construtor padrão recebe uma String com o nome do funcionário, um inteiro com seu número de identificação e um double com seu salário.
Se esses dados, dentro da classe são:

private String nome;
private int ID;
private double salario;

E o cabeçalho do construtor é:
public Funcionario( String nome, int ID, double salario)

Como faríamos a atribuição? Ora, do mesmo jeito que fizemos antes:
nome = nome;
ID = ID;
salario = salario;

Epa! Notou que as variáveis da classe e as variáveis do cabeçalho tem o mesmo nome?
E agora, como o Java vai saber que as variáveis da esquerda se referem as variáveis 'private' da classe a as da direita são as que o usuário mandou pra criar o objeto?

Já sei! Basta criar o método com nomes de variáveis diferentes, como fizemos antes:
public Funcionario( String Nome, int id, double Salario){
nome = Nome;
ID = id;
salario = Salario;
}

Ok, isso funcionaria perfeitamente. Mas seria extremamente incômodo, e desorganizado, criar dois nomes pra um mesmo tipo de variável.
Não pode parecer problema agora, com essa simples aplicação. Mas em uma situação real, em que seu programa em Java terá centenas de variáveis e você tiver que criar e decorar nomes de variáveis, isso vai ser um baita problema.

Para isso, existe o 'this', que referencia - ou seja, aponta - a própria classe!
'this' em inglês, significa 'isso', 'isto'. É bem fácil seu uso, veja como ficaria nosso construtor:

public Funcionario( String nome, int ID, double salario){
this.nome = nome;
this.ID = ID;
this.salario = salario;
}

Pronto.
Agora ficou óbvio que 'this.nome' é a variável 'nome' da classe "Funcionario" e 'nome' é a variável que a classe recebeu para criar um objeto!

Usamos o 'this' dentro da classe. Assim, sempre que colocarmos 'this.' antes de uma variável, fica implícito ao Java que estamos nos referindo aos atributos daquela Classe.
Podemos usar, inclusive, em um print, caso esteja dentro da classe. Em um método, por exemplo, como veremos a seguir.

Outra utilidade do 'this' é passar o objeto atual como parâmetro.
public Object getObjeto(){
     return this;
}

Outro exemplo disso é criar o método...:
public String toString()

...na sua classe, e usar 'this' dentro de um print. O Java entenderá que deve ser impresso o que estiver dentro desse método 'toString()'.

Outra utilidade do 'this' é invocar outros construtores. Para invocar um construtor dentro de outro, essa chamada deve ser o primeiro comando do construtor atual.
Por exemplo, fazendo simplesmente:
this;

Estamos chamando o construtor padrão, que não recebe parâmetros.
Fazendo:
this(2112);

Estamos invocando o construtor que recebe um inteiro como parâmetro.
Lembrando que quando criamos um construtor que não é o padrão, o Java não vai mais criar o construtor padrão vazio.
Esse construtor padrão vazio só é criado automaticamente quando não criamos nenhum construtor.


Como invocar métodos de objetos que criamos


Vamos criar um método, dentro da classe "Funcionário", que exibe todas as informações de um objeto dessa classe. Vamos chamar de 'exibir':

public void exibir(){
System.out.printf("O funcionário %s, de número %d recebe %.2f por mês", this.nome,this.ID,this.salario);
}


Para invocar, basta colocar '.exibir()' após o nome do objeto, que fará com que este método rode.
Note, porém, que conforme explicamos em nosso artigo sobre Classes e Objetos, essa classe é apenas uma abstração.
Ou seja, esse método não existe de verdade! Ele só vai passar a existir quando criarmos um objeto dessa classe!
(Na verdade ele pode existir, caso a classe fosse estática. Estudaremos isso em breve).

Para ilustrar a chamada de métodos de um objeto e o uso do 'this', vamos criar um funcionário - um objeto - de nome 'chefe'.
O código ficará assim:

thisMetodo.java

public class thisMetodo{
    
    public static void main(String[] args){
        String nome = "Neil Peart";
        int ID=2112; 
        double salario = 1000000;
        
        Funcionario chefe = new Funcionario(nome, ID, salario);
        
        chefe.exibir();
    }

}


Funcionario.java

public class Funcionario {
    private String nome;
    private int ID;
    private double salario;
    
    public Funcionario(){
        System.out.println("Método construtor padrão invocado!");
    }

    public Funcionario( String nome, int ID, double salario){
        this();
        System.out.println(this);

        this.nome = nome;
        this.ID = ID;
        this.salario = salario;
    }

    
    public String toString(){
        return "Foi usado : System.out.println(this)";
    }

    public void exibir(){
        System.out.printf("O funcionário %s, de número %d recebe %.2f por mês", this.nome,this.ID,this.salario);

}

Contribuir com o Java Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo