Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?
Mostrando postagens com marcador Apostila de Java para Download. Mostrar todas as postagens
Mostrando postagens com marcador Apostila de Java para Download. Mostrar todas as postagens

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

Como desenhar retângulos e quadrados

Apostila de Java grátis para baixar download PDF
Agora que você já aprendeu o básico de JFrame e JPanel, bem como desenhar linhas em Java (usando os importantes métodos getWidth() e getHeight() ) e fez belos desenhos somente usando as linhas.

Agora vamos prosseguir em nosso curso de programação gráfica e desenhar retângulos e quadrados.

Para tal, usaremos o método drawRect, de draw (desenhar) e Rect de retângulo.


Interface em Java (implements) - O que é, para que serve e como implementar

Iremos agora estudar um assunto muito importante em nossa apostila de Java, que irá usar principalmente, dentre outras coisas, os conceitos aprendemos sobre Classes e Métodos Abstratos, as interfaces.

Aprenderemos também uma importante palavra reservada do Java, o implements.

Herança ou Composição: Qual o melhor?

Acabamos de estudar a Herança, que assim como a Composição, é uma forma de tratar a relação entre os objetos, como eles devem ser vistos e trabalhados.

Talvez agora, como iniciante em nossa apostila de Java, isso não seja motivo de muita preocupação para você, mas certamente no futuro será. E para melhor esclarecer isso, nossa apostila de Java irá falar mais sobre as vantagens e desvantagens de cada uma dessas técnicas.

Manipulando polimorficamente subclasses

Agora que você domina completamente os conceitos de herança, polimorfismo e abstração, vamos aos exemplos práticos - códigos em Java.
Vamos mostrar como é possível uma superclasse abstrata manipule suas subclasses concretas.

enum: A melhor maneira para manusear constantes

Conforme vimos no tutorial de Java da aula passada, o uso de constantes em suas aplicações é de vital importância pra reusabilidade e legibilidade do código.

O uso de constantes em Java é tão, mas tão importante que a linguagem possui uma ferramenta especial para você manusear - com muita facilidade - suas constantes: o enum


Composição: trocando informações entre objetos

Um dos melhores artifícios do Java é a comunicação entre seus elementos, variáveis, métodos, objetos, classes e coisas que verá mais adiante. Mais que isso, o bacana é que podemos controlar essa comunicação, ela pode ser: pública, privada e protegida.

Nesse tutorial, daremos início a essa comunicação, falando sobre a Composição (Composition), que é simplesmente o ato de passar um objeto para outro, para usar seus métodos ou atributos.

O que é Composição em Java

É instanciar, ou usar, uma classe/objeto em outra(o). É como se elas se comunicassem, trocassem informações. Ou seja, serve para reutilizar dados, sem ter que criar mais código pra isso.
Simplesmente passamos a informação - na forma de Objeto - para outro Objeto, e este se encarrega de obter os dados e como trabalhar em cima dele.

Costuma-se dizer que composição é o ato de delegar trabalho para outro objeto.
Isso deixa seu código mais elegante, menor e mais seguro.


Para que serve a Composição em Java

Como citamos em nosso artigo introdutório sobre Classes e Objetos, a comunicação entre seus dados é essencial.
Talvez não note muito essa necessidade em projetos pequenos e de iniciantes, mas quando for um profissional, vai ter muita dor de cabeça com isso. Através de uma simplificação de projetos reais, vamos mostrar exemplos de códigos e passaremos exercícios para você notar a importância da Composição em aplicações Java.

Demos o exemplo de setores diferentes em uma empresa naquele artigo inicial.
Dificilmente uma empresa de grande porte vai mandar você fazer e ter acesso a todo o sistema, principalmente o setor financeiro.
Geralmente esse é mantido à sete chaves. Mas como expliquei lá, eles podem simplesmente compartilhar certos dados com você, como o salário final de cada funcionário, para você usar em sua classe "Funcionario".
Notou? Você criar sua classe, faz seu projeto e usa dados de outro Objeto/Classe. E o mais importante: é seguro! Você não faz a mínima idéia do que aconteceu lá, de como é calculado as coisas, dos segredos financeiros da empresa etc.

Graças a orientação a objetos - e outras coisas - isso é possível. Assim você não precisa repetir código.
Além da segurança, a Composição em Java faz com que não seja necessário repetir código. Você simplesmente usa o que já foi feito em outra Classe/Objeto, como é o caso do exemplo da empresa.
Imagina se o programador não soubesse Java? Ia ter que repetir todo o código do setor financeiro dentro da classe "Funcionario"?
Acredite, há coisas bizarras sendo feitas por aí.


Herança x Composição

Mais a frente, em nosso curso online de Java, iremos falar sobre uma das mais importantes, e controversas, e usadas funcionalidades do Java: a Herança. Isso nos leva ao encapsulamento de dados.
Não vamos entrar em muitos detalhes agora, mas basicamente herança é capacidade de uma classe herdar dados de outra.
Por exemplo, você cria uma classe mãe. Quer criar uma classe parecida com a mãe - mas com outras funcionalidades, você não precisa reescrever tudo. Basta fazer com que a classe filha herde a classe mãe.

Por exemplo, podemos criar a classe "Carro" quem atributos como "motor", "portas", "carburador" etc, pois todos atributos estão presentes em todos carros. Fazemos então a classe "Fusca" e a classe "Ferrari" herdar a classe "Carro".
Ora, é claro que vamos adicionar mais funcionalidades na classe "Ferrari", pois ela possuir mais atributos que o padrão genérico generalizado da classe "Carro". Mas não deixa de ser um carro.

Essa generalização, o fato de algumas classes herdadas não precisarem de todos os atributos da classe mãe, também devido ao fato de ao se mudar a classe mãe mudar todas as classes filhas e uma porção de outros detalhes, faz com que herança seja um conceito perigoso e não recomendado. Alguns simplesmente abominam a herança.
Não entraremos em detalhe agora, mas usar Composição é inofensivo e bem mais recomendado. Porém, cada caso é um caso.



Exemplo de uso de Composição em Java

Exercício: Descobrindo se um Funcionário chegou atrasado e seu tempo de trabalho. 

Nesse exemplo, vamos criar 2 classes adicionais: "Funcionario" e "Hora"

Vamos criar um funcionário, o 'geddyLee', criar um objeto para armazenar a hora que ele chegou 'horaChegada' e a hora que ele saiu 'horaSaida'.

A partir da hora de chegada, vamos verificar se ele chegou atrasado (após as 8h) e usando informações dos dois objetos da classe "Hora", vamos saber quanto tempo ele trabalhou e armazenar essa informação na variável "tempoTrabalhado", do objeto 'geddyLee' da classe "Funcionario", e vamos guardar a informação caso ele tenha chegado atrasado

Ou seja, vamos trocar bastante informações entre esses objetos !

controleHorario.java

Essa é nossa classe principal, que tem o método main.
Na main, simplesmente criamos os objetos de Hora e Funcionário mencionados no enunciado.
Iniciamos os objetos de "Hora" já com seus valores (hora, minuto,segundo). Você pode mudar a seu gosto, para testes ou pedir ao usuário, através da classe Scanner.

A seguir, a título de informação, ele exibe a hora de chegada, de saída e o tempo total trabalhado em horas.
A main é bem pequena e enxuta, como deve ser.


Hora.java

Essa classe recebe três elementos inteiros: horas, minutos e segundos, e faz um tratamento.
O tratamento é: as horas devem ser inteiros entre 0 e 23, os minutos e segundos devem ser inteiros entre 0 e 59.

Caso não seja, é lançada uma excessão (artíficio para mostrar que ocorreu um erro e a aplicação é encerrada).
Experimente colocar uma data errada para ver a mensagem de erro.

Os métodos dessa classe são simples getters um toString().

Método toString()
O método toString é um método especial, existente em todos os objetos de Java (pois está na classe Objects e todas classes são derivadas desta).

Como o nome pode sugerir, ele serve para retornar uma String.
Vamos formatar uma string com argumentos, por isso vamos usar o método format, para exibir as horas, minutos e segundos no formato: hh:mm:ss

Uma outra característica especial deste método é que ele se torna o padrão e automaticamente invocado, caso tente imprimir um 'objeto'.
Isso mesmo, se colocar apenas um objetos em uma função de print, esse método será invocado.

Por isso , para imprimir na main, fizemos apenas:
System.out.println("Hora de chegada: " + horaChegada);
System.out.println("Hora de saída: " + horaSaida);

Mas poderíamos ter feito:
System.out.println("Hora de chegada: " + horaChegada.toString());
System.out.println("Hora de saída: " + horaSaida.toString());


Funcionario.java

Essa classe que vai recebe a informação de outros objetos. No caso, ela recebe objetos da classe "Hora".
Vamos comentar seus métodos:


  • public double tempoAtraso(Hora horaChegada)
Vamos descobrir o tempo que o funcionário atrasou convertendo a hora de chegada em segundos.
Simplesmente transformamos a hora em que o funcionário chegou em segundos:
horaChegada.getHour()*60*60 + horaChegada.getMinute()*60 + horaChegada.getSecond()
E subtraímos do tempo que ele deveria chegar na empresa (8h00min):
8*3600.0
E dividimos por 3600.0, para o resultado ser um double que representa as horas atrasadas.


  • public double horasTrabalhadas(Hora horaChegada, Hora horaSaida)
Para o cálculo do tempo trabalhado de um funcionário, vamos levar em conta somente as horas trabalhadas.

Primeiro, vamos transformar a hora da saída e a hora da chegada em minutos e subtrair esse valor:
(horaSaida.getHour()*60 + horaSaida.getMinute()) - (horaChegada.getHour()*60 + horaChegada.getMinute())
Agora temos a diferença entre os horários de chegada e saída, em minutos.
Então, dividimos tudo por 60.0 para ter o tempo trabalhado, em horas.

Caso esse tempo seja negativo, é porque você colocou uma data de saída anterior a data de chegada.
Então, um erro, com a explicação, é lançado e aplicação é encerrada.


  • public double getHorasTrabalhadas()
Um simples exemplo de get, que retorna a variável 'tempoTrabalhado'.



Código do nosso programa:

controleHorario.java

public class controleHorario {

    public static void main(String[] args) {

        Hora horaChegada = new Hora(8, 0, 1);
        Hora horaSaida = new Hora(9, 30, 0);
        Funcionario geddyLee = new Funcionario("Geddy Lee", horaChegada, horaSaida);
        
        System.out.println("Hora de chegada: " + horaChegada);
        System.out.println("Hora de saída: " + horaSaida);
        System.out.printf("Horas trabalhadas: %.1f\n",geddyLee.getHorasTrabalhadas());
        

    }

}

Hora.java

public class Hora {
    private int hours,
                minutes,
                seconds;
    
    public Hora (int hours, int minutes, int seconds){
        //preenchendo as horas
        if(hours>=0 && hours <24 )
            this.hours = hours;
        else
            throw new IllegalArgumentException("Hora inválida");
            
        //preenchendo os minutos
        if(minutes >=0 && minutes < 60)
            this.minutes = minutes;
        else
            throw new IllegalArgumentException("Minutos inválidos");
        
        //preenchendo os segundos
        if( seconds >=0 && seconds < 60)
            this.seconds = seconds;
        else
            throw new IllegalArgumentException("Segundos inválidos");
            
                
    }
    
    @Override
    public String toString(){
     return String.format("%d:%d:%d", getHour(), getMinute(), getSecond());
    }
    
    public int getHour(){
        return this.hours;
    }
    
    public int getMinute(){
        return this.minutes;
    }
    
    public int getSecond(){
        return this.seconds;
    }
    
}


Funcionario.java

public class Funcionario {
    private String nome;
    private boolean atraso;
    private double tempoTrabalhado, tempoAtraso;
    
    public Funcionario(String nome, Hora horaChegada, Hora horaSaida){
        this.nome=nome;
        this.tempoAtraso = tempoAtraso(horaChegada);
        
        if(this.tempoAtraso > 0)
            this.atraso=true;
        
        if(atraso){
            System.out.println("Funcionário '" + this.nome + "' atrasado. ");
        }
        
        this.tempoTrabalhado = horasTrabalhadas(horaChegada, horaSaida);
    }
    
    public double tempoAtraso(Hora horaChegada){
        return ((horaChegada.getHour()*60*60 + horaChegada.getMinute()*60 + 
                 horaChegada.getSecond()) - 8*3600.0)/3600.0;
    }
    
    public double horasTrabalhadas(Hora horaChegada, Hora horaSaida){
        double horas = ( (horaSaida.getHour()*60 + horaSaida.getMinute()) - 
                       (horaChegada.getHour()*60 + horaChegada.getMinute()) )/60.0;
        
        if(horas < 0)
            throw new IllegalArgumentException("Hora de saída anterior a hora de chegada");
        
        return horas;
    }
    
    public double getHorasTrabalhadas(){
        return this.tempoTrabalhado;
    }
}



Exercício: Aplicativo Java para um Supermercado

Você foi selecionado para criar um aplicativo - em Java, claro - para um supermercado.
O que o dono do estabelecimento pediu a funcionalidade "Promoção para você", que funciona da seguinte maneira:
Após as 20h, todos os produtos recebem um desconto de 10%.
Aos sábados e domingos esse desconto vale o dia inteiro.

Ou seja, além de ter uma classe para os produtos do supermercado, você deve criar outra com o horário da compra.
Use a técnica de composition para passar o objeto referente ao horário da compra para o objeto referente ao produto que está sendo comprado. Assim, no objeto produto o preço é calculado com base no horário e dia da semana.

Na sua main, peça o preço do produto, dia da semana e horário da compra (hora, minuto e segundos), e devolva o valor final do produto com base naquele horário.

PS: Em uma aplicação real, não seria necessário fornecer esses dados. Eles seriam obtidos por um leitor de código de barras para saber o preço do produto, e pegaria o horário do sistema, pra preencher os dados referentes ao horário.
Pedimos, porém, por questão de aprendizado, já que você não deve ter um leitor desses em casa...

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.


Questões envolvendo métodos

Questões envolvendo métodos, laços e estruturas de controle - Curso online, gratuito e completo Java Progressivo
Fique à vontade para treinar sua criatividade, usando os laços que quiser (while, for, do ... while), comandos (switch, break e continue), testes condicionais if else ou na raça mesmo ;)

Porém, como estamos na seção de métodos, é importante que treine e use métodos, o comando return, além de parâmetros e argumentos em todas as questões abaixo:


Métodos: Introdução, o que são, para que servem, como e quando usar os methods

Para ganhar uma seção na apostila online "Java Progressivo", você já deve suspeitar da importância dos métodos.

Nesse artigo, daremos uma descrição sobre o que são métodos, para que servem, como declarar, como usar e quando usar.


Os comandos break e continue: interrompendo e alterando fluxos e loopings

Nesta parte de nossa apostila online iremos ver os comandos break e continue, do Java, que servem para nos propiciar um maior controle sobre o fluxo dos aplicativos, especialmente das iterações dos loopings.

Para que servem os comandos BREAK e CONTINUE em Java

Geralmente, em nossos programas de Java, iremos usar os laços while, for e do ... while para procurar algum ítem, número ou checar alguma condição.

Por exemplo, imagine que você foi contratado para fazer um programa, em Java, claro, para um banco.
Em um momento do aplicativo, o cliente insere o número de sua conta e o programa vai buscar esse número no banco de dados do sistema, que tem milhões de clientes cadastrados.
Ele vai fazer essa busca através de um looping.

Porém, imagine que o programa encontra os dados do cliente logo no começo, logo nas primeiras posições.
E aí, vai checar todo o resto do banco de dados?
Claro que não, isso seria perda de tempo.

É aí que entram os comandos break e continue. Esse seria um bom exemplo onde daríamos um 'break' no laço, pois já encontramos o que queríamos.



O comando break


Break significa quebrar, parar, frear, interromper. E é isso que se faz.
Quando o Java encontra esse comando pela frente, ele interrompe o laço/estrutura de controle ATUAL, como o while, for, do ... while e o switch (que veremos no próximo artigo da apostila).

Vamos mostrar um exemplo do uso do break através de um exemplo matemático.

Exemplo de uso:

Suponha que você é um cientista e quer saber se entre os números 1 e um milhão existe um número que é múltiplo de 17 e 19, ao mesmo tempo.
Ou seja, queremos saber se existe um número entre 1 e um milhão que deixa resto 0 na divisão por 17 e por 19.
Caso exista, o imprima. E só imprima o menor.

Poderíamos fazer um laço de 1 até 1 milhão, e testar isso através de um for.
Ok, é uma solução. O principal na vida profissional de um programador é saber resolver o problema.

Vamos usar um método chamado 'currentTimeMillis()', que retorna um tipo 'long' com o tempo atual do sistema em mili segundos. Vamos declarar esse tipo no início e ao fim do laço, e depois subtrair esses valores, assim teremos o tempo de execução do programa.
Após imprimir o menor número, o boolean se torna falso, assim só o primeiro número é impresso.

Veja:

public class breakTest {
    public static void main(String[] args) {
        long i = System.currentTimeMillis();
        boolean imprimir = true;
        
        for(int count=1 ; count <=1000000 ; count++){
            if((count % 17 == 0) && (count % 19 == 0))
                if(imprimir){
                    System.out.println(count);
                    imprimir=false;
                }
        }

        System.out.println("Tempo de execução, em milisegundos: "+ (System.currentTimeMillis() -i));
    }

}


Em minha máquina deu:
26 mili segundos


Mas se você quiser ser um bom profissional, não basta só saber resolver. Tem que resolver e da melhor maneira possível.
Note que que o menor número achado é 323, e o laço vai até 1 milhão! Ou seja, ele percorre de 324 até 1 milhão à toa, pois já achou o número desejado!

Ora, se ele já achou o número, 323, vamos fazer com que o laço pare, usando o comando break:


public class break {
    public static void main(String[] args) {
        long i = System.currentTimeMillis();
        
        for(int count=1 ; count <=1000000 ; count++){
            if((count % 17 == 0) && (count % 19 == 0)){
                System.out.println(count);
                break;
            }
        }

        System.out.println("Tempo de execução, em milisegundos: "+ (System.currentTimeMillis() -i));
    }

}

8 mili segundos
Menos de um terço do tempo!

Você pode pensar "Ah, de 26 mili segundos para 8 mili segundos a diferença é insignificante".
Concordo com você.
Porém, no futuro você fará aplicações maiores e que levam mais tempo, e esses pequenos detalhes farão a diferença.
Por exemplo, existem métodos que, durante um game são facilmente chamados milhões de vezes.
Multiplique essa diferença 'insignificante' de alguns mili segundos por milhões de vezes e terá um belo de um 'lag', ou lentidão. Isso se chama otimizar: fazer da maneira mais eficiente possível.

Daremos bastante enfoque para as otimizações em nosso curso de Java, como verá no exemplo a seguir.

O comando continue

Como o nome diz, ele 'continua' o laço. O comando break interrompe o laço, já o continue interrompe somente a iteração atual.

Não basta porém ser um bom profissional. Você está no curso Java Progressivo, você tem que ser um dos melhores!
Nós vamos otimizar o código passado.

Note uma coisa, queremos achar um número que seja múltiplo de 17 e 19. Ora, tal número não pode ser par, pois 17 e 19 são ímpares.
Para cada número 'count', estamos fazendo dois testes: se é múltiplo de 17 e se é múltiplo de 19.

Vamos otimizar da seguinte maneira, vamos fazer um só teste: vamos checar se é múltiplo de 2. Caso seja, nem adianta testar se é múltiplo de 17 e 19, podemos pular essa iteração.
E como pulamos uma iteração? Com o comando continue!

Veja como fica:

public class continueTest {
    public static void main(String[] args) {
        long i = System.currentTimeMillis();
        
        for(int count=1 ; count <=1000000 ; count++){
            if(count % 2 == 0){
                continue;
            }
            if((count % 17 == 0) && (count % 19 == 0)){
                System.out.println(count);
                break;
            }
            
        }

        System.out.println("Tempo de execução, em milisegundos: "+ (System.currentTimeMillis() -i));
    }

}


E temos o impressionante tempo de 1mili segundo!
De 26 mili segundos, fomos para 1 mili segundo! Impressionante esse Java, não?

Loop infinito, controlando laços e loopings com o while

Usar laços, muitas vezes, pode ser uma tarefa perigosa.
Isso por conta de uma coisa chamada loop infinito.

Acontece sem querer, mas as vezes acontece de propósito...principalmente por pessoas más intencionadas.
Nesse artigo vamos estudar mais sobre esse tipo de loop, como acontecem, como fazer e como ter mais controle sobre laços.

Operadores de atribuição e de incremento e decremento: diferenças entre a=++b e a=b++

Já vimos o uso dos operadores de decremento e incremento, em Java.
E também como usar os operadores de atribuição: +=, -=, *=, /= e %=

Porém, devemos tomar alguns cuidados no uso deles, como, por exemplo, na diferença entre a=++b e a=b++


Diferença de a=++b e a=b++ em Java

Você ja estudou e testou que usar isoladamente:
a++ e ++a não surte efeito.

Porém, surte na hora da atribuição.

Vamos lá, ao nosso 'teste hacker':
Seja b=2;
Só olhando e raciocinando, você seria capaz de descobrir quanto seria 'a' em cada caso:
a = b++;
a = ++b;

Explicações
1. a = b++


Mais uma vez, é um atalho em Java, uma forma mais simples de escrever as seguintes linhas:
a = b;
b++;

2. a = ++b

Analogamente, é o atalho que os programadores Java usam para representar as seguintes linhas de código:
++b;
a = b;

'Tenho que decorar todos esses atalhos em Java, então? Maldito Java!'

Não. Você é programador, você não decora, você pensa.
Não foi à toa que coloquei o 'teste hacker', foi pra aguçar seu raciocínio.

Em ambos os casos, 'b' é incrementado. A diferença é que 'a' recebe o valor de 'b' antes do incremento em um e depois do incremento em outro.
Como eu disse, em Java, você pode descobrir apenas olhando e pensando um pouco.
Veja:

No primeiro exemplo: a = b++
Qual a ordem, 'b' ou incremento? Primeiro o 'b'. Depois o de incremento ocorre, '++'.
Ou seja, 'a' vai receber o valor de 'b' primeiro, então a=2
Só depois que 'b' vai ser incrementado e vai se tornar b=3.

No segundo exemplo: a = ++b
Qual a ordem: 'b' ou incremento?
Primeiro o incremento, '++', depois que aparece o 'b', então só depois acontece a atribuição..
Assim, primeiro ocorre o incremente, então b=3.
Só depois é que esse valor é atribuído para a.

Como diz a bíblia do programador Java: compilais e verás a verdade.
Eis o código:

public class Increment {
    public static void main(String[] args) {
        int a,
            b=1;
        
        System.out.println("b = " + b);
        System.out.println("a = b++ ");
        a = b++;
        System.out.println("Então: a = " + a);
        System.out.println();
        
        System.out.println("b = " + b);
        System.out.println("a = ++b ");
        a = ++b;
        System.out.println("Então: a = " + a);
    }
}

A incrível API Java 2D

A API Java 2D é um conjunto de recursos que permitem uma ampla possibilidade para se trabalhar com desenhos, gráficos e qualquer coisa relacionada com imagem 2D em Java.

Operadores Matemáticos de Incremento (++) e Decremento (--)

Nesta lição iremos aprender duas 'mão na roda', especialmente úteis para estudar laços while e for.
Esses operadores simplesmente somam e subtraem uma unidade.

Parece simples, não?

Ao fim do curso, você será fã número 1 dos operadores de incremento e decremento.


Operadores lógicos e de negação: && (E ou AND), || (OU ou OR) e o ! (negação)

Completando seus conhecimentos sobre álgebra booleana, explicaremos um pouco sobre E e OU.

Mas não se assuste com a palavra 'álgebra', se você sabe português e tem bom senso, já sabe o que será explicado.

Tipos Numéricos - int (inteiro), float e double (decimais ou reais) | Java Progressivo

á sabemos como mostrar mensagens através dos 'print'.
Agora vamos fazer algumas operações com números.

Iremos mostrar como trabalhar com números inteiros e reais (decimais), além de fazer uma explicação sobre os tipos de dados (int, float e double, no caso).

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