Mostrando postagens com marcador Java. Mostrar todas as postagens
Mostrando postagens com marcador Java. Mostrar todas as postagens

Curso completo e online de Java para iniciantes

Apostila de Java para download online grátisNeste artigo, iremos dar uma importante dica para aqueles que desejam aprender Java.

É o Curso Java Progressivo, projeto de nosso site, que visa ensinar a linguagem de programação Java de modo completo, online e totalmente gratuito.

São tutoriais em ordem de aprendizado para leigos, vídeo-aulas, exercícios propostos e resolvidos, códigos comentados, criação de jogos, reviews de livros, dicas de tutoriais, apostilas e tudo mais voltado ao mundo desta fantástica linguagem.

A profissão das linguagens de programação

Não está fácil para ninguém.
Nem para as linguagens de programação.

Então elas decidiram ir à luta e procurar algum emprego.
Confira agora quais os cargos e funções que as linguagens de programação exercem.






Curso de Java Online e Gratuito

Apostila de Java




Se está aqui, fez uma sábia escolha e optou por estudar Java!
Caso seja totalmente novo na área de programação, indico a leitura da seção Comece a Programar.
Para saber melhor o que é, para que serve, onde é usado e outras informações sobre Java, clique aqui.

No mais, aproveite o curso. É uma promissora linguagem. Sabendo Java, oportunidades não faltam.

A ordem indicada para o curso completo é a seguinte:

O Que é Java? Guia Definitivo para Iniciantes (Ainda Vale a Pena?)

Portabilidade: você sabe o que isso realmente significa no mundo da tecnologia? Imagine poder programar no Windows, Linux, Mac, para a Web ou dispositivos móveis sem nunca se preocupar com problemas de compatibilidade. É o sonho de programar em "qualquer pedra" e o código funcionar perfeitamente.

A compatibilidade é o que mais atormenta os desenvolvedores, mas o Java resolveu isso de uma forma genial: ele não roda direto no hardware, ele roda em uma máquina virtual!

Linguagem de Programação Java - O que é e para que serve

Neste artigo, você vai descobrir:

  • A origem e o propósito da linguagem Java;
  • O segredo da portabilidade (JVM e Bytecode);
  • A diferença entre Java, C e C++;
  • O que é Orientação a Objetos na prática;
  • Onde o Java é usado (de Minecraft à NASA);
  • O que você precisa para começar a programar hoje.

A História e a Filosofia do Java

O Java é uma linguagem de programação orientada a objetos desenvolvida na Sun Microsystems (adquirida pela Oracle Corporation) e lançada oficialmente em 1995.

Sua sintaxe é fortemente baseada em C e C++, mas com uma diferença crucial: o Java foi criado para ser mais simples e seguro. Por ser uma linguagem de alto nível, o programador não precisa lidar com ponteiros complexos ou gerenciamento manual de memória. O Java introduziu o Garbage Collector (Coletor de Lixo), que limpa automaticamente a memória que não está mais sendo usada, evitando os temidos "memory leaks", embora isso consuma um pouco mais de processamento.

O Pulo do Gato: Bytecode vs. Código de Máquina

Em linguagens como C, o programa é convertido em código de máquina (Assembly) específico para o processador onde foi compilado. Se você compilar no PC e tentar rodar no celular, não vai funcionar.

No Java, o compilador gera o Bytecode. Esse código não "fala" com o hardware, mas sim com a JVM (Java Virtual Machine). Como a JVM pode ser instalada em qualquer sistema, o mesmo Bytecode roda no Windows, Android ou Linux sem mudanças. É a famosa promessa: "Write Once, Run Anywhere" (Escreva uma vez, rode em qualquer lugar).

O Segredo: Orientação a Objetos (OO)

A base da programação Java são as Classes e os Objetos. Essa metodologia tenta imitar o mundo real para facilitar a criação de sistemas complexos:

  • Classe: É o molde ou conceito. Exemplo: "Carro".
  • Objeto: É a instância real. Exemplo: Um "Gol" ou um "Fusca" são objetos da classe Carro.
  • Características e Métodos: Todos os carros têm motor e rodas (características), e todos podem acelerar e frear (métodos).

Essa abstração permite que desenvolvedores criem bibliotecas imensas (APIs) que podem ser expandidas para quase qualquer área: gráficos 3D, banco de dados, criptografia, redes peer-to-peer e muito mais.

Onde o Java está presente?

Atualmente, o Java é um dos pilares da internet moderna. É praticamente impossível navegar sem usá-lo:

  • Aplicações Web: É a base dos sistemas de segurança de grandes bancos.
  • Dispositivos Móveis: O Java é a alma do sistema operacional Android da Google.
  • Jogos: O fenômeno Minecraft foi originalmente construído em Java.
  • Softwares Livres: Projetos da Apache Foundation (como Ant, Derby e Geronimo) e a suíte de escritório OpenOffice rodam sob Java.
  • Ciência Espacial: A NASA utiliza Java para controlar robôs em missões espaciais. Podemos dizer que Java é uma das linguagens mais usadas no Universo! ;)

Domine o Java e Garanta seu Lugar no Mercado

Aprender Java não é apenas aprender uma linguagem, é aprender a base de como grandes empresas funcionam. Quer ter esse conhecimento estruturado, sem anúncios e disponível offline?

Mega Pack Apostilas Progressivas
Quero o Mega Pack Agora 🚀

O que é preciso para começar?

Para entrar nesse mundo, você precisa conhecer o kit básico:

  1. JRE (Java Runtime Environment): Necessário para quem quer apenas rodar programas Java no PC.
  2. JDK (Java Development Kit): O pacote essencial para quem quer criar e programar em Java.
  3. IDE (Ambiente de Desenvolvimento): Ferramentas como o NetBeans, Eclipse ou IntelliJ facilitam a escrita do código e a correção de erros.

Nota sobre desempenho: Comparado ao C ou C++, o Java pode ser um pouco mais "pesado" e lento, devido à camada extra da máquina virtual. No entanto, para a maioria das aplicações Web e Mobile, essa diferença é compensada pela facilidade de desenvolvimento e segurança.

Pronto para ser um Programador Java?

Inicie agora seu treinamento passo a passo, do zero ao profissional, em nosso curso completo e gratuito:

👉 Curso Completo de Java Progressivo

Apache Ant: O que é, Instalando e configurando de maneira simples no Linux

Sobre


Apache Ant é uma ferramenta poderosíssima e muito útil, feito em Java para a construção de aplicativos. É um projeto da já famosa Apache Software Foundation, e é, obviamente, Open Source.Quem já está acostumado com a dupla make/makefile do GNU/Linux, é correspondente.Mas estamos em tempos de portabilidade e não podemos ficar preso nem que seja ao nosso maravilhoso sistem Unix.

O Apache Ant é pra isso, construir. É um build multi-plataforma, extremamente útil e poderoso.Ele vem com uma série de recursos, para compilação, assembler, teste e para rodar aplicações Java.Porém, ele não se limita só a Java, pode-se também construir e testar aplicações de outras linguagens, como C ou C++, por exemplo.

A sua vasta opções de de bibliotecas, a antlibs, falam por si e definem sua versibilidade, não me deixando escrever sobre as milhares de utilidade do Apache Ant.

The Apache Ant Project


Instalando o Apache Ant


Escolha sua versão binária em: http://ant.apache.org/bindownload.cgi

1.Descompacte

2.Para prosseguir na instalação, precisemos usar as variáveis de ambiente do java e da pasta que você descompactou o Apache Ant, por isso descompacte em um local que saiba onde vai ficar e que não vá mexer nele depois.

3. Abra o terminal (BASH) e exporte, com os comandos:

export ANT_HOME=/usr/local/apache-ant-1.8.4
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0
export PATH=${PATH}:${ANT_HOME}/bin

No caso, mostrei onde estava minha pasta do apache ant e minha jdk.
Você não é obrigado a instalar nesta pasta, /usr/local, mas é recomendável, é meio que o padrão para softwares que ficarão acessíveis aos usários do sistema. Assim, todos podem usar.


4. Após feito isso, vá na pasta do ant.
Você pode fazer isso diretament com o comando: cd $ANT_HOME

5. Agora você irá checar e fazer o download de uma série de dependências (bibliotecas) que o Ant irá usar. Faça isso com o comando:
ant -f fetch.xml -Ddest=sys

O processo é automatizado.

Você pode adicionar mais bibliotecas manualmente em: http://ant.apache.org/antlibs/proper.html

Após tudo isso, vamos checars e a instalação ocorreu bem. Digite o seguinte comando no terminal:
ant

você deve obter um resultado parecido com este que eu tive:
~/Documents/apache-ant-1.8.4$ ant
Buildfile: build.xml does not exist!
Build failed

Mas calma, óbvio que o build falhou, pois não especificamos nada para construir.
Agora cheque a versão do ant:
ant -version

Aqui obtive isso:
Apache Ant(TM) version 1.8.4 compiled on May 22 2012



Para que estes comandos tenham efeito permanente, adicione estas três linhas ao seu .bashrc:
sudo gedit .bashrc

E cole lá.

Java: Class Scanner ( a classe Scanner) - Lendo e Recebendo dados de arquivos


Agora que já escrevemos dados em um arquivo, vamos aprender como ler dados de um arquivo existente em disco.

Java: Class Formatter ( a classe Formatter ) - Escrevendo em arquivos

Já vimos como obter informações sobre arquivos e diretórios, através da classe File, agora vamos realmente criar um arquivo que nos permita manipular informações de texto na forma sequencial.

Java: Class File ( a classe File ) - Obtendo informações de arquivos e diretórios

Objetos dessa classe irão servir para objetos de outras classes da java.io package.
Usamos ela para obter informações SOBRE o arquivo ou diretório/pasta, e não sobre seu conteúdo.

Java, Usando Arquivos (Files): Introdução

Até o momento, em nosso curso, armazenamos dados em variáveis e arrays. Porém estes são temporários e se perdem ao término de cada aplicação.
Agora veremos como armazenar e ler dados, que podem ficar permanentemente em dispositivos de armazenamento, como seu HD.

Java: Expressões Regulares (regex) em Java


Também conhecidas como regex (regular expressions), expressões regulares são sentenças com códigos que podem representar uma string, de forma genérica.
Por exemplo, o CEP é da forma: ddddd-ddd
Onde 'd' é um dígito qualquer, entre 0 e 9. Essa expressão representa toda a gama de CEP's em nosso país.

São usadas também para a criação de compiladores, através de expressões regulares bem complexas, que podem representar qualquer trecho de código, e acusar erro de sintaxe, caso o código escrito não case com as expressões regulares.

Em nossos aplicativos, usaremos expressões regulares para garantir que a entrada de dados esteja sob uma forma específica.
Por exemplo, caso necessitemos que o usuário digite um CEP e ele escrever:
dddd*-ddd

O que ele digitou não vai casar com a expressão regular que usamos para validar o CEP, pois o número de CEP não aceita asterisco.
As expressões regulares são uma ferramenta bem antiga, usada desde a época do Unix, e é usada nas mais diversas linguagens de programação, como em Perl, e em programas, como o sed.

Vamos a alguns exemplos:
\d -> representa qualquer dígitos
\D -> representa tudo, menos dígito

\w -> representa qualquer caractere de palavra
\W -> representa tudo que não seja um caractere de palavra

\s -> representa qualquer espaço em branco(" ", tab)
\S -> representa tudo que não seja espaço em branco

[a-z] -> representa qualquer letra minúscula do alfabeto
[A-Z] -> representa qualquer letra maiúscula do alfabeto
[a-zA-Z] -> representa qualquer letra do alfabeto, seja maiúscula ou minúscula
| -> representa o 'ou'. "a|b" casa com 'a' ou com 'b', ou com os dois

Vejamos alguns quantificadores
. -> substitui qualquer caractere
* -> o caractere anterior aparece nenhuma ou mais vezes
+ -> o caractere anterior aparece uma ou mais vezes
{a} -> o caractere anterior se repete 'a' vezes
{a,} -> o caractere anterior se repete pelo menos 'a' vezes
{a,b} -> o caractere anterior se repete entre 'a' e 'b' vezes


A representação de dígito é '\d', mas dentro de strings, para '\' valer, temos que escapá-la.
Logo, podemos representar um CEP como: "\\d\\d\\d\\d\\d-\\d\\d\\d"
Ou "\\d{5}-\\d{3}"
O método ficaria:

meu_cep.matches("\\d{5}-\\d{3}") -> retorna 'true' se o CEP for digitado correto, e 'false' caso errado

Para validar um nome, sabemos que o primeiro caractere é maiúsculo:
nome.matches("[A-Z][a-zA-Z]*") -> retorna 'true' se a primeira letra do nome for maiúscula, e 'false' caso errado

O Java provém alguns métodos para o uso de regex e substituições:
std = std.replaceAll("a", "b") -> substitui todas as ocorrências de 'a' por 'b'

Também podemos usar expressões regulares no método 'replaceAll':
std = std.replaceAll("\\w+","a") -> substitui todas as palavras por 'a'
std = std.replaceFirst("\\d","a") -> substitui a primeira ocorrência de um dígito por 'a'
String[] pedacos = std.split("a") -> divide a string 'std' em partes, cujo separador é 'a' e armazena no vetor de strings 'pedacos'. Por exemplo, para separarmos as palavras de uma string, usamos "," ou ",\\s*" como separador

É importante frisar que, nos vários métodos e classes para o tratamento de regex, use a classe String.
Se usar a StringBuilder terá erros.


Caso queira prosseguir no mundo das regex e em Java, esse package possui duas classes que lhe serão bastante úteis:a Pattern, para usar uma expressão regulas e a Matcher, que também usa uma expressão regular mas também uma CharSequence, onde você irá procurar o padrão para casar.
Para expressões regulares que serão usadas somente uma vez, se recomenda usar o método static 'matches' da Pattern. Porém, se for usada mais de uma vez, se aconselha a usar o método static 'compile', que retorna um objeto do tipo Pattern, onde posteriormente se pode chamar o método 'matcher'.

A classe Matcher também provém o método 'matches' e faz a mesma coisa, porém não recebe argumentos. Ela age por encapsulamento no objeto do tipo Matcher.
Essa classe também possui outros métodos bastante úteis, como o 'replaceFirst', 'replaceAll', 'find' , 'lookingAt' etc, que, pelo nome, é possível saber o que cada um faz.


Tenha em mente que as possibilidades das expressões regulares são inúmeras e ilimitadas. Compiladores são feitos usando expressões regulares! Isso por si só já mostra o poder das regex.
Por isso, não entrarei tão afundo no assunto.
Tendo estudado esse artigo, você saberá as possibilidades das Expressões Regulares, e irá se lembrar delas caso um dia necessite delas.

Expressões Regulares são universais. Você pode aprender e usar em vários ramos e linguagens.
Eu mesmo já falei aqui em outros artigos, como no de sed. Lá está até mais completo, se eu falasse mais aqui, estaria simplesmente repetindo o que está escrito lá.
Portanto, dê um pulinho no artigo de Regex da parte de 'sed', é uma continuação daqui:

http://programacaoprogressiva.blogspot.com.br/2012/07/sed-parte-vi-expressoes-regulares.html

Regex é assunto pra livros! E é isso que vou indicar, um site de um brasileiro, o Aurelio Jargas, mestre em Expressões Regulares que publica e divulga GRATUITAMENTE seu material!

http://aurelio.net/regex/

Vale ressalvar que o java possui um pacote (package) voltado para expressões regulares.
Vale uma conferida na documentação:
java.util.regex

Java: A Classe Character

Assim como outros tipos, a Character é uma classe do tipo wrapper. Ou seja, não é apenas um tipo e pronto, como int e float.
Ela já vem com uns métodos e funcionalidades que facilitarão bastante a vida do programador Java.

Java: A Classe StringBuilder


Essa sim é modificável, diferente da classe String.
Com strings dessa classe podemos usar as strings de forma dinâmica, criando, modificando, copiando, anexando, invertendo, adicionando e retirando caracteres, o tanto que desejarmos.

Porém, devemos ainda usar a classe String, especialmente quando os dados contidos na string não necessitarem de mudança (como em Labels, mensagens de erro, de log etc, pois por conta dessa limitação, essa classe é bem otimizada. Mas para strings que se alteram, usamos a StringBuilder.
Existe ainda a StringBuffer, para caso seja utilizado threads.

Vejamos alguns métodos e características destes:

StringBuilder teste = new StringBuilder("123456789");
teste.toString() -> retorna a string 123456789
teste.length() -> o tamanho é 9
teste.capacity() -> a capacidade inicial é 25 (9 + 16, toda StringBuilder inicia com 16, por padrão)
teste.ensureCapacity(100) -> garante uma capacidade pra string, para nao ser necessário crescer dinamicamente ao longo de um programa, o que pode comprometer a performance.
teste.setLength(5) -> agora, teste é somente "12345"
teste.reverse() -> inverte os caracteres da StringBuilder
teste.charAt(int) -> recebe um inteiro e retorna o caractere referente aquele índice
teste.getChars(a, b, char[] c, d) -> copia caracteres da StringBuilder 'teste' a partir do índice 'a' até o índice 'b' para o vetor de caracteres 'c', a partir do índice 'd' neste vetor.

Teste este método, passando a string para o vetor de caracteres e imprimindo-o:

teste.getChars(0, teste.length(), vetorChar, 0);
for( char caractere : vetorChar )
System.out.print(caractere); 

teste.setCharAt(a, 'b') -> insere o caractere 'b' na posição de índice 'a'
teste.insert(a, objeto) -> insere, a partir do índice 'a', o 'objeto' na BuildString. Objeto, em Java, representa uma gama enorme de coisas, como String, vetor de caracteres, booleanos, inteiros, float, doubles, chars etc. 
teste.deleteCharAt( a ) -> deleta especificamente o caractere da posição de índice 'a'
teste.delete(a, b) -> dele o caractere de índice 'a' até o de índice 'b'
teste.append( variosObjetos ) -> anexa, ao fim da String Builder 'teste' algum 'variosObjetos'; 

É possível, inclusive, a concatenação:
String teste2 = new StringBuilder().append("Programação").append("\n").append("Progressiva").toString();


 Com esses métodos, é possível notar a flexibilidade e utilidade da StringBuilder.

Java: A Classe String

Strings é uma sequência de caracteres. Estes podem ser letras, dígitos ou caracteres especiais, como + _ - * > .<
São tão importantes que o Java possui mais de uma classe só para tratar as strings.

Vejamos, por exemplo, construtores para a classe String:

char[] blog = {'p', 'r' , 'o' , 'g' , ' ' , 'p' , 'r' , 'o' , 'g' , 'r' , 'e' , 's' , 's' , 'i' , 'v' , 'a'};
String stg = new String( "teste" );
String stg1 = new String();
String stg2 = new String( stg );
String stg3 = new String( blog );
String stg4 = new String( blog, 5, 11 );

A saída seria:
stg → teste
stg1 →
stg2 → teste
stg3 → prog progressiva
stg4 → progressiva


Essa classe possui uma série de métodos para formatar strings. No último caso, 'stg4' é iniciada com parte da string 'blog', ela receberá 11 caracteres dessa string, a partir do caractere de índice 4.


Aqui vai uma importante ressalva: String objects são imutáveis! Não é possível mudar seus caracteres depois que você criou!

As strings, por serem da classe String, possuem métodos característicos:

  • stg.length() -> informa o tamanho da string
  • stg.charAt(indice) -> mostra determinado caractere da string
  • stg.getChars(int inicio, int fim, char[] , int inicio2)


Diferente de C/C++, por exemplo, String e Vetor de caracteres são duas coisas diferentes em Java.
No último método, queremos passar os caracteres da String 'stg', a partir do índice 'inicio' até o índice 'fim' para um vetor de caracteres, a partir da posição de índice 'inicio2' nesse vetor

stg.compareTo(stg2) -> 0 se forem iguais; negativo caso stg < stg2 ; positivo caso stg > stg2 , lexicograficamente falando (na forma do dicionário).


A classe String também oferece ferramentas para compararmos strings. Veja alguns desses métodos:

  • stg.equals(stg2) -> retorna 'true' ou 'false', com case sensitive (maiúsculo/minúsculo importam)
  • stg.equalsIgnoreCase -> retorna 'true' ou 'false', sem case sensitive (maiúsculo/minúsculo não      importam)
  • stg == "teste" -> retorna 'true' ou 'false' em relação ao fato de serem o mesmo OBJETO, não conteúdo!!! Só retorna 'true' se apontarem pro mesmo endereço de memória! 


Se tivéssemos feito:
stg="teste" , o método retornaria 'true', pois o Java trata todos os objetos de string literal de mesmo conteúdo como o mesmo objeto, só com mais de uma referência. Por exemplo:
string1="Programacao Progressiva"
string2="Programacao Progressiva"

Como ambas possuem o mesmo conteúdo, Java trata elas como o mesmo objeto. Ambas apontam pro mesmo endereço de memória.
Porém, com stg = new String("hello") , se cria um novo endereço de memória para a string. O que resultaria em 'false'.

  • stg.regionMatches(int a, String stg2, int b, int c) -> compara somente certas regiões das strings. Começa a partir do índice 'a' da 'stg', compara com a string 'stg2' a partir do índice 'b' desta, e elas comparam 'c' elementos das strings.


Também existem métodos para a busca, concatenação, alteração maiúsculo/minúsculo, substituição total/parcial e extração de trechos de texto ou caractere em strings, presentes na classe String.
Porém, devido ao grande número e flexibilidade dos métodos oferecidos pela classe String, é inviável mostrar todos aqui, deixamos alguns aqui e outros você pode ver na documentação, conforme sua necessidade. Exemplo:

  • stg.startsWith()
  • stg.endsWith()
  • stg.lastIndexOf()
  • stg.indexOf()
  • stg.substring()
  • stg.concat()
  • stg.replace()
  • stg.toUpperCase()
  • stg.toLowerCase()
  • stg.toCharArray()

Também existem métodos para 'quebrar' uma determinada string, cujos partes são separadas por um separador, como o espaço " ", por exemplo.
Escreva algo:
  • String stg= scanner.nextLine();
Receba as 'partes', separadas por espaço:
  • String[] pedacos = stg.split(" ");
  • pedacos.length -> retorna o numero de pedaços
Vamos imprimir esses pedaços, que nada mais são que as palavras que voce digitou:

for(String palavra : pedacos)
 System.out.println(palavra);

Java GUI: Events, Listeners e Handlers com JFrame, JButton e JTextField (Projeto Completo)

Java GUI: Events, Listeners e Handlers na Prática com Swing

Aprender Java GUI significa aprender a trabalhar com eventos. Afinal, toda interface gráfica depende da interação do usuário: cliques em botões, textos digitados, teclas pressionadas e janelas abertas ou fechadas.

Neste tutorial vamos aprender na prática como funcionam Events, Listeners e Handlers, criando um jogo de adivinhação usando JFrame, JButton, JLabel e JTextField.