Pular para o conteúdo principal

Java Básico

Java 15

Instalação de ambiente - UBUNTU 20.04

Instalando o Java 15

$ sudo add-apt-repository ppa:linuxuprising/java
$ sudo apt update
$ sudo apt install oracle-java15-installer
$ java --version
$ ll /usr/lib/jvm/
$ ll /usr/lib/jvm/java-15-oracle

Em alguns casos será necessário colocar o caminho de instalação nas variáveis de ambiente do sistema operacional.

$ export JAVA_HOME="/usr/lib/jvm/java-15-oracle"
$ export PATH=$JAVA_HOME/bin:$PATH

Ferramentas de Build (Gradle ou Maven)

Acesse o site do Gradle e baixe a ferramenta.

$ mkdir /opt/gradle
$ cd
$ unzip -d /opt/gradle gradle-6.8.2-bin.zip
$ ls /opt/gradle/gradle-6.8.2
$ export PATH=$PATH:/opt/gradle/gradle-6.8.2/bin
$ sudo apt purge gradle //Se precisar excluir versões antigas
$ gradle -v //para verificar a instalação

Uma outra ferramenta muito boa também é a Maven e baixe a ferramenta.

$ mkdir /opt/maven
$ unzip -d /opt/maven apache-maven-3.6.3-bin.zip
$ ls /opt/maven/apache-maven-3.6.3
$ sudo apt purge maven // se precisar excluir versões antigas
$ export PATH=$PATH:/opt/maven/apache-maven-3.6.3/bin
$ mvn -v //para verificar a instalação

Diferenças básicas entre Maven e Gradle é que o gradle é uma ferramenta mais nova, o mave utiliza xml, o gradle usa uma linguagem de programação chamada Groovy.

Para resolver problemas de compatibilidade entre desenvolvedores vamos utilizar alguns comandos, garantindo a mesma versão para todos os desenvolvedores. Para tanto crie uma nova pasta dentro de Documentos, acesse a pasta e execute os comandos:

$ gradle wrapper
$ ./gradlew -v

$ mvn -N io.takari:maven:wrapper
$ ./mvnw -v

Instalando Ferramenta IDE

Baixe a ferramenta de desenvolvimento INTELLIJ IDEA

$ sudo tar -xzf ideaIC-2020.3.2.tar.gz
$ cd idea-IC-203.7148.57/bin/
$ ./idea.sh //Acessar a IDE

Iniciar um Projeto

Vamos iniciar um novo projeto Java através do site https://start.spring.io/.

Maven Project

  • Abra o site Spring
  • Marque as opções projeto: Maven Project, linguagem: Java, Spring Boot: 2.4.3, pacote: jar e Java 15.
  • Preencha os dados de Group(domínio da empresa): br.com.fpsmoc
  • Artifact: exemplo-maven
  • Name: exemplo-maven
  • Description: Projeto de exemplo do curso de Java
  • Package name: não precisa alterar, normalmente é preenchido automaticamente.
  • Dependencies: Adiciona a dependência Spring Web.
  • Clique no botão Generate Project: Salva o arquivo em qualquer pasta
  • Crie uma pasta específica e extraia o conteúdo para ela.

Gradle Project

  • Abra o site Spring
  • Marque as opções projeto: Gradle Project, linguagem: Java, Spring Boot: 2.4.3, pacote: jar e Java 15.
  • Preencha os dados de Group(domínio da empresa): br.com.fpsmoc
  • Artifact: exemplo-gradle
  • Name: exemplo-gradle
  • Description: Projeto de exemplo do curso de Java
  • Package name: não precisa alterar, normalmente é preenchido automaticamente.
  • Dependencies: Adiciona a dependência Spring Web.
  • Clique no botão Generate Project: Salva o arquivo em qualquer pasta
  • Crie uma pasta específica e extraia o conteúdo para ela.

Algumas definições

O que é Java?

É uma linguagem de programação e plataforma computacional lançada em 1995 pela Sun Microsystems, por um time comandado por James Gosling. Anos depois foi adquirida pela Oracle.

Diferente de outras linguagens de programação, que são compiladas para código nativo, o java é compilado para um bytecode que é interpretado por uma máquina virtual.

O que é o compilador?

Um compilador é um programa que, a partir de um código fonte, cria um programa semanticamente equivalente, porém escrito em outra linguagem, código objeto. Um compilador traduz um programa de uma linguagem textual para uma linguagem de máquina, específica para um processador e sistema operacional.

O nome compilador é usado principalmente para os programas que traduzem o código fonte de uma linguagem de programação de alto nível para uma linguagem de programação de baixo nível (por exemplo, Assembly ou código de máquina).

O que é o bytecode?

É o código originado da compilação de programas Java. O bytecode é o programa interpretado e executado pela Máquina Virtual Java, JVM.

O que é a JVM?

Primeiramente é bom saber o que é uma VM: Uma Máquina Virtual, ou Virtual Machine, é um software que simula uma máquina física e consegue executar vários programas, gerenciar processos, memória e arquivos. Tudo isso faz parte de uma plataforma com memória, processador e outros recursos totalmente virtuais, sem dependência do hardware.

A JVM é uma máquina virtual que executa programas Java, executando os bytecodes em linguagem de máquina para cada sistema operacional.

Em linguagens compiladas diretamente para um sistema operacional (SO) específico, esse programa não irá executar em outro SO, havendo a necessidade de compilar uma versão do software para cada SO.

Com o Java, compilamos para a JVM, o bytecode será executado pela máquina virtual, e não diretamente pelo SO, assim, o software escrito em Java possui portabilidade para qualquer sistema operacional, porém, cada JVM deve ser construída para um SO específico.

O que é JRE?

JRE significa Java Runtime Environment, ou Ambiente de Execução do Java, é composto pela Java Virtual Machine (JVM), BIBLIOTECAS e APIs da linguagem Java e outros componentes para suporte da plataforma Java. https://openjdk.java.net/install/

$ sudo apt-get install openjdk-15-jre

O que é a JDK?

Java Development Kit (JDK), Kit de Desenvolvimento Java, é um conjunto de utilitários que permitem criar software para a plataforma Java. É composto pelo compilador Java, bibliotecas da linguagem, ferramentas e a JRE. https://openjdk.java.net/install/

$ sudo apt-get install openjdk-15-jdk

O que é a Java SE?

Java Standard Edition (SE), é a distribuição mínima da plataforma de desenvolvimento de aplicações Java. OpenJDK é a implementação de referência opensource da Plataforma Java, Java SE, que ainda é mantida pela Oracle. https://openjdk.java.net

O que é Java EE?

Java Enterprise Edition, é uma extensão da Java SE que possui suporte a desenvolvimento de sistemas corporativos. Além do mínimo da plataforma, o Java EE possui diversas especificações de partes da infra estrutura de aplicações, como acesso a banco de dados, mensageria, serviços web, parser de arquivos e outras.

Servidores de Aplicações Java EE, sabem seguir essas especificações e implementar os recursos para os usuários. Exemplo: JBoss (RedHat), Weblogic (Oracle), WebSphere (IBM) e Gassfish é implementação de referência Opensource: https://javaee.github.io/glassfish.

O que é Jakarta EE?

Com a falta de investimento da Oracle no Java, ela cedeu todo o código, implementações e especificações do Java EE para a Eclipse Foundation, mas como o nome Java EE é uma marca registrada, foi escolhido o nome Jakarta EE. Agora a evolução das especificações e padrões do Java será feito sob o nome Jakarta EE, com compatibilidade com o Java EE.

Exemplo de Aplicação:

  • Abra o terminal.
  • Cria um novo arquivo hello.java e edita no vim. $ mkdir hello-java; $ cd hello-java; $ vim hello.java;
  • Crie uma classe pública:
  • public class Hello{ public static void main(String[] args){ System.out.println("Hello!"); } }
  • Compilando o arquivo .java: $ javac Hello.java
  • Executando o arquivo .class: $ java Hello

Iniciando um novo projeto no IntelliJ

  • Inicie o IntelliJ
  • Novo projeto
  • Selecione Gradle, Project SDK: 15, Java e clique em próximo.
  • Nome do projeto: caracteristicas-da-linguagem
  • GoupId: br.com.fpsmoc e clique Finalizar.

TIPOS

Tipos: Na linguagem java existem vários tipos (Primitivos, Wrappers, Não Primitivos e Tipagem forte e estática).

Os tipos Primitivos não aceitam NULL e possuem valores default. Mais detalhes em: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Wrappers: São objetos que representam os primitivos (é uma classe), auto-boxing (auto construir o objeto, seguindo a mesma regra dos primitivos) e Unboxing (cria um objeto a partir de primitivos).

Os tipos não primitivos: String, Number, Object, qualquer outros objetos.

Tipagem forte e estática: Exemplo var Inferência de tipo.

Modificadores de acesso

  • public: pode ser acessada de qualquer lugar por qualquer entidade que possa visualizar a classe a que ela pertence.
  • private: os métodos e atributos da classe definidos como privados não podem ser acessados ou usados por nenhuma outra classe. Esses atributos e métodos também não podem ser visualizados pelas classes herdadas.
  • protected: torna o membro acessível às classes do mesmo pacote ou através de herança, seus membros herdados não são acessíveis a outras classes fora do pacote em que foram delcarados.
  • default (padrão): a classe e/ou seu membros são acessíveis somente por classes do mesmo pacote, na sua declaração não é definido nenhum tipo de modificador, sendo este identificado pelo compilador.
  • abstract: não existe é somenta a ideia de algo. Esse modificador não é aplicado nas variáveis, apenas em classes e métodos. Uma classe abstrata não pode ser instanciada. Se houver alguma declaração de um método como abstract (abstrato), a classe também deve ser marcada como abstract.
  • static: é usado para a criação de uma variável que poderá ser acessada por todas as instâncias de objetos desta classe como uma variável comum, ou seja, a variável criada será a mesma em todas as instâncias e quando seu conteúdo é modificado numa das instâncias, a modificação ocorre em todas as demais. E nas declarações de métodos ajudam no acesso direto à classe, portanto não é necessário instanciar um objeto para acessar o método.
  • final: quando é aplicado na classe, não permite estender, nos métodos impede que o mesmo seja sobrescrito (overriding) na subclasse, e nos valores de variáveis não pode ser alterado depois que já tenha sido atribuído um valor.

Interfaces

  • Métodos abstratos: Devem ser implementados por todos; Novos métodos quebram as implementações;
  • Métodos default: São herdados a todos que implementam; Novos métodos não quebram as implementações;
  • Herança múltipla: O java não possui herança múltipla, no entanto, com as interfaces é possível implementa-la.

Enums

Basicamente é dicionários de dados imutáveis e não permite criar novas instâncias, o construtor é sempre declarado como private e por convenção, por serem objetos constantes e imutáveis (static final), os nomes são em MAIÚSCULOS.

Características da Linguagem

Strings

Strings: É uma sequência de caracteres e estão no pacote java.lang

Exemplo:
Exemplo2:
Utilizando o StringBuilder:
Exemplo4:

Laços, condicionais e operadores

IF

É uma palavra reservada do Java para criar condições se verdadeira faz uma determinada coisa e se for falsa faz outra coisa. Um if pode ser escrita numa única linha, não há necessidade de colocar {}.

IF Ternário

Na condição ternária se a condição for verdadeira será impresso o que está a direita da ? caso contrário será impresso o que está a direita do : (dois pontos);

FOR

While

Testa primeiro o a condição e depois executa o bloco de código.

Do/While

Executa o bloco de código primeiro e depois testa a condição. Garante que o bloco de código seja executado pelo menos 1 vez. Exemplo:

Operador Igualdade

O operador de igualdade (==) é utilizado para comparar duas ou mais condições.

Operador Lógico

São os operadores para juntar condições e(&&) só será verdadeira se todas as condições forem verdadeiras, ou(||) só será false se todas as condições forem falsas. Podemos também utilizar os operadores &(e), |(ou). Quando se utiliza a segunda forma & ou |, se a primeira condição do <condição 1> && <condição 2> for falsa a segunda não será verficada, já utilizando somente um \amp;, mesmo que a primeira condição for falsa a segunda também será verificada.

Operador Incremento

++valor à esquerda, significa que primeiro incremento e depois avalio a expressão, já valor++ à direita, primeiro avalio a expressão e depois incremento. O mesmo funciona com o operador de decremento.

Operadores Matemáticos

Os operadores matemáticos são Adição(+), Subtração(-), Multiplicação(*), Divisão(/), Módulo - resto da divisão(%).

Operadores Relacionais

São os operadores que se consegue fazer relações de maior(>), menor(<), maior ou igual(>=), menor ou igual(<=).

Convenções de nomes

Nomes de classes: primeira letra maiúscula e o restante minúscula. Nome composto utilize CamelCase.

Nomes de métodos: toda minúscula. Se for composto começa com minúscula e CamelCase.

Nomes de variáveis: começa com letras minúsculas e não se utiliza caracteres especiais. O uso do var é opcional.

Existem vários plugins de boas práticas para codificações em equipe:

Checkstyle Gradle Plugin: https://docs.gradle.org/current/userguide/checkstyle_plugin.html e https://github.com/checkstyle/checkstyle
PMD Gradle Plugin: https://docs.gradle.org/current/userguide/pmd_plugin.html

Para utilizar os plugins no projeto Java, procure por build.gradle (por exemplo), é possível verificar que logo nas primeiras linhas já tem o plugin Java, basta adicionar os plugins checkstyle e pmd.

Debug de código

Orientação a Objetos

A programação Orientada a Objetos impõe disciplina sobre a transferência indireta do controle (Robert "Uncle Bob" Martin - Livro Arquitetura Limpa)

Comentários

Postagens mais visitadas deste blog

DIO (Digital Innovation One)

O que é a Digital Innovation One? A Digital Innovation One é uma comunidade com mais de trezentos mil desenvolvedores de software que acelera gratuitamente a carreira de qualquer pessoa interessada em cursos, bootcamps, projetos práticos e desafios, possibilitando a conquista de melhores oportunidades profissionais em várias empresas do mercado de trabalho. Por que os cursos são gratuitos? A Digital Innovation One acredita que a democratização do ensino de tecnologia e a formação da nova geração de desenvolvedores de software impacta positivamente o desenvolvimento socioeconômico mundial. Estão revolucionando a educação online com a democratização e inclusão através do ensino online gratuito e de qualidade, juntamente com as empresas mais inovadoras do mercado que procuram pelos desenvolvedores de software mais talentosos. (DIO, 2021) Na DIO, várias empresas procuram por profissionais talentosos, no entanto, possuem muitas vagas de empregos e muitas das vezes os processos seletivos são...

Linux 4/8

  Fundamentos e comandos de redes Rede de computadores é um conjunto de equipamentos interligados de maneira a trocarem informações e compartilharem recursos, como arquivos de dados gravados, impressoras, modems, softwares e outros equipamentos. (Sousa, 1999). Rede Wan: Wide Area Network, é uma rede geograficamente distribuída. Rede Man: Metropolitan Area Network, é uma rede metropolitana que interligam várias redes locais. Rede Lan: Local Area Network, é uma rede local de uma forma geral em um único prédio ou campus. Protocolos É uma linguagem utilizadas pelos dispositivos para que eles possam se entender. IP: Protocolo de Internet - endereço IP - números que identificam seu computador em uma rede. ICMP: Internet Control Message Protocol - tem por objetivo prover mensagens de controle na comunicação entre nós. DNS: Domain Name Server - esse protocolo de aplicação tem por função identificar endereços IPs e manter uma tabela com os endereços dos caminhos de algumas redes. Interface ...

Curso Inter Java Developer

O que já aprendi no curso Inter Java Developer da DIO (Digital Innovation One? É um curso intermediário com 23 atividades e carga horária de 95 horas. Boas vindas ao Bootcamp Inter Java Developer Bem vindo à DIO Linux: A introdução ao sistema operacional Shell Script - Manipulando arquivos Introdução ao Git e ao GitHub