O Java é uma poderosa linguagem de programação em constante crescimento, sendo uma das mais populares entre os desenvolvedores. Com um forte desenvolvimento orientado a objetos, ela favorece o desenvolvimento de sistemas flexíveis e extensíveis.
É uma linguagem gratuita, tendo isso como um dos principais fatores que ajudou a popularizá-la entre os programadores e empresas no geral. O objetivo dessa linguagem é ser simples, orientada a objetos e de fácil aprendizagem.
Aprender Java é importante para qualquer profissional da área de desenvolvimento, pois essa é uma das linguagens que mais oferecem oportunidades no mercado de trabalho.
Você pode encontrar Java em diferentes dispositivos, como no acesso a serviços bancários online e até mesmo em aplicativos da Receita Federal, como por exemplo, o programa de declaração de imposto de renda. Empresas como IBM, a rede social LinkedIn e a Netflix também utilizam Java em seus produtos.
O Java é uma das linguagens mais populares e existem várias oportunidades de emprego. Já temos um artigo aqui que apresenta cinco fortes motivos para que você estude a plataforma de desenvolvimento da Oracle. Recomendamos a leitura!
Principais IDEs para desenvolvimento Java
Uma IDE (Ambiente de Desenvolvimento Integrado) é um software que auxilia no desenvolvimento de aplicações. Para o desenvolvedor, é uma forma de criar aplicações de maneira mais rápida, uma vez que estas IDEs auxiliam em todo o processo de desenvolvimento de uma aplicação.
As IDEs provem diversos benefícios, como a análise de todo o código a ser escrito para identificar bugs causados por um erro de digitação, autocompletam trechos de códigos, e etc.
Algumas das principais utilizadas no desenvolvimento em Java, são o Eclipse, NetBeans, VSCode e IntelliJ. Você pode conferir mais sobre elas no artigo “Principais IDEs para desenvolvimento Java”.
Como instalar o Java e nosso primeiro exemplo
Como o Java é multiplataforma, você pode instalar em qualquer sistema: Windows, Linux e MacOS. Já temos um artigo que aborda todo o passo a passo de instalação, em todos esses sistemas, para que você já deixe sua máquina pronta para começar.
Como qualquer outra linguagem, o Java tem as suas próprias regras de sintaxe e estrutura.
Vamos imprimir o tradicional “Hello World” e você verá como é fácil!
public class TreinaWeb {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
No mesmo artigo onde ensinamos você a instalar o Java em sua máquina, também abordamos com mais profundidade sua sintaxe e estrutura.
Formação Desenvolvedor Java
Conhecer a formaçãoConhecendo variáveis e constantes
O Java é uma linguagem de tipagem estática, ou seja, existe um sistema de tipos bem definido e que é validado durante o tempo de compilação do código. Para isso, é necessário definir tipos explícitos para as variáveis que são criadas.
Por padrão, o Java possui em sua biblioteca padrão alguns tipos de dados:
- Byte: um inteiro com valor 8 bits, onde seu intervalo de valores vai do -128 até o 127. É um dado leve, que ocupa pouco espaço em memória;
- Char: trata-se de um único caractere unicode de 16 bits. Seu intervalo de valores vai do ‘\u0000’ ou 0 até o valor máximo ‘\uffff’ ou 65535. É utilizado para armazenar caracteres de maneira isolada;
- Short: trata-se de um valor inteiro de 16 bits. Seu intervalo de valores vai do -32.768 até o 32.767;
- Int: trata-se de um valor inteiro de 32 bits. Suporta valores de -2.147.483.648 a 2.147.483.647;
- Long: define um valor inteiro de 64 bits. Suporta valores de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807;
- Boolean: é um dos tipos de dados mais simples, pois ele pode armazenar apenas dois valores: true (verdadeiro) ou false (falso). É empregado para realizar testes lógicos, dentro de estruturas de decisão e repetição, por exemplo.
- Float: trata-se de um tipo de dado de ponto flutuante de 32 bits. Isso quer dizer que ele permite armazenar valores decimais entre 6 e 7 casas. Porém, o armazenamento em memória pode não representar necessariamente o valor repassado. Por exemplo, um float definido com “0,001” pode acabar sendo armazenado como “0,00100001”, e isso não somente no Java, já que isso é decorrência dos pontos flutuantes em geral. Por isso, o tipo float não deve ser usado para operações que precisam passar por várias operações aritméticas, como no caso de sistemas financeiros. Isso porque, a primeira vista, essa imprecisão pode não impactar, mas na sequência de operações realizadas, estas imprecisões podem começar a aparecer nos resultados;
- Double: representa um ponto flutuante de 64 bits. Por isso, ele permite armazenar números de até cerca de 15 casas decimais. A observação para o tipo float também é válida para o tipo double: por ser um tipo de dado que é armazenado por aproximação de valores, ele não deve ser utilizado em operações que demandam precisão absoluta.
Depois de vermos os tipos de dados, podemos criar nossas variáveis. Elas têm algumas regras, como por exemplo, devem ser claras e auto-explicativas.
String nomeDoAluno = “”;
int idade = 0;
Também temos as constantes, que sob um ponto de vista prático são como variáveis, só que com o ponto de que seu valor não pode ser modificado. Isso quer dizer que, se você declara uma constante chamada MAIORIDADE_PENAL com o valor 18, esse valor não poderá ser jamais modificado durante a execução da aplicação.
O Java não possui formalmente o conceito de constantes, assim como acontece em outras linguagens como C# e C++. Embora a palavra-chave “const” seja uma palavra reservada na especificação do Java (ou seja, você não pode nomear nenhuma estrutura como “const”), ela não tem nenhum significado para o compilador.
No artigo sobre variáveis e constantes no Java, podemos nos aprofundar no uso de constantes e ver mais exemplos e explicações sobre o uso de variáveis.
Estruturas condicionais e estruturas de repetição
As estruturas condicionais e de repetição são fundamentais e vem para nos ajudar no reaproveitamento de código.
As estruturas condicionais possibilitam ao programa tomar decisões e alterar o seu fluxo de execução. Isso possibilita ao desenvolvedor o poder de controlar quais são as tarefas e trechos de código executados de acordo com diferentes situações, como os valores de variáveis. Algumas estruturas condicionais no Java são o if…else e o switch/case.
Abaixo temos um exemplo simples da utilização do if…else. Nele verificamos se a pessoa é maior ou menor de idade, dependendo do valor que contiver na variável idade.
package br.com.treinaweb;
public class Exemplo {
public static void main(String[] args) {
int idade = 10;
if (idade >= 18) {
System.out.println(“Maior de idade!”);
} else {
System.out.println(“Menor de idade!”);
}
}
}
As estruturas de repetição, também conhecidas como loops (laços), são utilizadas para executar repetidamente uma instrução ou bloco de instrução enquanto determinada condição estiver sendo satisfeita. As principais estruturas de repetição são o for e o while.
Veremos um exemplo abaixo utilizando o for. Aqui teremos uma variável começando em zero, onde, a cada rodada, ela irá somar +1. Isso irá se repetir até que a variável chegue até 10, encerrando assim esse bloco.
package br.com.treinaweb;
public class Exemplo {
public static void main(String[] args) {
for (int i = 0; i <= 10; i++) {
System.out.println(“A variável i agora vale “ + i);
}
}
}
Confira a execução desse código acima e outros exemplos com muitos mais detalhes em nosso artigo sobre estruturas de decisão e repetição.
Orientação a objetos
Como vimos na introdução deste artigo, o Java é orientado a objetos. O paradigma orientado a objetos traz boas vantagens, como a reutilização de código, a legibilidade e manutenibilidade do código, a natural modularização e a produção de código mais acessível, já que as estruturas criadas geralmente representam aspectos também existentes no mundo real.
Quando lidamos com o paradigma orientado a objetos, acabamos criando diversas unidades de software através de estruturas chamadas classes. A partir destas classes, podemos criar estruturas chamadas objetos, estruturas estas que interagem entre si. Esse é o motivo pelo qual o paradigma é chamado de orientação a objetos: todas as interações necessárias para que o software funcione ocorrem através de mensagens e comandos trocados entre estes objetos.
Uma classe nada mais é que um “molde” para definição de outras estruturas. Um exemplo seria uma classe chamada Pessoa. Todas as pessoas possuem características em comum, como nome, idade, sexo, etc, por isso elas podem fazer parte de uma mesma classe.
package br.com.treinaweb;
public class Pessoa {
// Atributos ou Características de uma pessoa
public String nome;
public int idade;
public char sexo;
}
Como o nome diz, na orientação a objetos temos os objetos. Os objetos são estruturas que são criadas a partir das classes. Por exemplo, os objetos criados a partir da classe Pessoa, podem usufruir dos mesmos atributos e métodos definidos pela Classe.
package br.com.treinaweb;
public class Cadastro {
public static void main(String args[]) {
Pessoa maria = new Pessoa();
maria.nome = "Maria";
maria.idade = 20;
maria.sexo = ‘F’;
}
}
Também vimos que ela tem acesso aos métodos, que são comportamentos e ações que os objetos podem ter. Nesse nosso exemplo, poderíamos colocar que toda Pessoa pode falar, andar, comer, etc.
maria.falar();
maria.andar();
maria.comer();
Para ver mais exemplos e conceitos bem mais aprofundados, acesse o artigo [“Orientação a objetos em Java“](https://www.treinaweb.com.br/blog/orientacao-a-objetos-em-java/ ““Orientação a objetos em Java”“).
Maven: o que é, o que podemos fazer com ele e como encontrar dependências
É um problema comum durante o desenvolvimento de projetos com a linguagem Java termos que baixar arquivos .jar para serem incluídos dentro de nossos projetos e assim podermos utilizar alguma biblioteca que vai nos auxiliar ao longo do desenvolvimento do mesmo.
A boa notícia é que existem diversas ferramentas para nos ajudar a gerenciar as bibliotecas e automatizar certas tarefas dentro de projetos Java. Uma delas é o Maven.
O Maven é uma ferramenta de código aberto mantida pela Apache. Trata-se de uma ferramenta de gestão de dependências e um task runner. Em outras palavras, o Maven automatiza os processos de obtenção de dependências e de compilação de projetos Java. Quando criamos um projeto Maven, este projeto fica atrelado a um arquivo principal: o pom.xml. Neste arquivo POM (Project Object Model), nós descrevemos as dependências de nosso projeto e a maneira como este deve ser compilado.
Para gerenciar as dependências do nosso projeto utilizamos o arquivo pom.xml nele colocamos as informações das bibliotecas que o nosso projeto necessita para funcionar e o Maven se encarrega do download dessas bibliotecas e de adicioná-las no Build Path/Classpath.
O Maven irá buscar por essas dependências em locais chamados de repositórios, existem basicamente dois repositórios, o repositório local que está localizado na pasta .m2/repository e o repositório remoto que está localizado no repositório público do Maven.
Ao adicionar uma nova dependência em nosso projeto, o Maven primeiro realiza a busca em nosso repositório local, caso não encontre irá buscar no repositório remoto e então fazer o download da biblioteca e disponibilizá-la no repositório local, dessa maneira caso você necessite utilizar a mesma biblioteca em outro projeto não será necessário realizar o download novamente.
Quando falamos das dependências do repositório padrão do Maven, elas podem ser buscadas através de interfaces mais amigáveis. Nesse caso, entram em cena as ferramentas de gestão de repositórios. A mais comum é o Nexus Sonatype, que é utilizado inclusive pelo repositório padrão do Maven.
Indicamos a leitura do nosso artigo “Introdução ao Maven, aprenda como criar e gerenciar projetos Java”. Lá você irá aprender mais a fundo como instalar o Maven, como funciona o pom.xml e ainda fazer seu primeiro exemplo. Já no artigo “Como instalar uma dependência com Maven e usar em seu projeto” vemos mais a fundo como funciona o Sonatype.