Sensibilidade na declaração de variáveis e conceitos básicos sobre Java Virtual Machine (JVM) e Javadoc
Uma breve pesquisa é o suficiente para saber que variáveis são espaços alocados da memória capazes de armazenar um certo tipo de dados, e uma tabela — como a que veremos adiante — nos mostra de forma prática os diferentes tipos que podemos declarar em Java. Mas, vamos abordar alguns detalhes que a linguagem é sensível que podem poupar dores cabeça de um principiante, além de abordar um pouco mais sobre a Máquina Virtual Java (JVM) e o Javadoc.
Declaração de Variáveis em Java
Java é uma linguagem fortemente tipada, o que significa que cada variável possui um tipo de dado específico e a linguagem é rigorosa quanto aos tipos de dados que podem ser usados em diferentes situações. Em outras palavras, em Java, você precisa declarar explicitamente o tipo de uma variável, e as operações entre tipos incompatíveis geralmente não são permitidas sem uma conversão explícita. A seguir estão os tipos de variáveis e modos de conversão:
Tabela dos tipos de variáveis
Antigamente, quando os recursos de hardware eram mais limitados, a preocupação de reduzir ao máximo a quantidade de memória utilizada era enorme, mesmo assim é de boa prática usar os tipos de acordo com a necessidade. Analisando a tabela, um desenvolvedor chegaria à conclusão de que para armazenar a idade de uma pessoa, deveria ser utilizado o tipo byte, uma vez que a faixa de valores é suficiente.
Tabela de conversão
Pode-se declarar as variáveis em qualquer ponto do programa, diferente da linguagem Pascal por exemplo — que tem uma área exclusiva para declaração de variáveis — , desde que feito antes de serem usadas.
Sintaxe de Declaração
A declaração de variáveis em Java segue a sintaxe:
tipoDeDado nomeDaVariavel;
int idade;
É muito comum que no início o desenvolvedor não repare na sensibilidade em relação aos nomes das variáveis: não devem conter espaços em branco e deve-se ter cuidado ao usar letras maiúsculas. A referência da variável precisa ser idêntica ao nome atribuído à ela. Exemplo:
int nome;
Essa variável não pode ser chamada como Nome ou NOME, somente com todas as letras em minúsculo como foi declarada, no caso: nome.
Inicialização
É altamente recomendável nas linguagens de programação a atribuição de um valor inicial para as variáveis declaradas para evitar que esses espaços da memória sejam ocupados por dados indesejáveis. Quando se trata do Java, são atribuídos valores-padrão caso o programador não especifique um valor inicial — atribui-se a todas as variáveis dos tipos: char, byte, short, int, long, float e double o valor 0 por default. Já às variáveis do tipo boolean, atribui-se false — .
As variáveis devem ser definidas antes da sua utilização como foi dito, sendo possível inicializá-las com um valor no momento da declaração. Exemplo:
int idade = 25;
inicializa a variável "idade" com o valor 25.
Conceito de escopo de variáveis
O escopo de uma variável determina onde ela pode ser acessada, as variáveis locais têm escopo limitado ao bloco em que são declaradas, enquanto variáveis de instância pertencem a uma classe.
Java Virtual Machine (JVM): Conceitos Básicos e Funcionamento
O Java é mundialmente reconhecido pela sua portabilidade. É comum escutar que o Java “roda em qualquer lugar” (write once, run everywhere), mas porque ele consegue “rodar” em diferentes plataformas? A resposta é muito simples: devido a sua Máquina Virtual. A JVM oferece não só a flexibilidade dos aplicativos Java, como também gerencia a alocação de memória, coleta de lixo e execução eficiente do código.
Conceitos básicos da JVM
A execução do Java não está diretamente relacionada com o Sistema Operacional, é feita diretamente com a JVM (Java Virtual Machine). O que for escrito em um sistema operacional Windows, irá rodar em um sistema operacional Linux (salvo algumas exceções de códigos nativos). Esse processo cria uma independência do Sistema Operacional, oferecendo liberdade ao desenvolvedor.
Compilação e Interpretação: o código-fonte Java é compilado para bytecode (uma representação intermediária). Durante a execução, a JVM interpreta o bytecode ou utiliza a compilação JIT para traduzi-lo em código de máquina nativo.
Como mencionado anteriormente em outro post dessa série, a JVM não interpreta código Java, interpreta um código específico: o ByteCode. Esse código é gerado pelo compilador Java (javac) e será traduzido pela JVM para a linguagem de cada máquina em questão. Atualmente, a JVM possui sistemas de compilação JIT (Just — In — Time) misturados com a interpretação do código. Essa técnica cria os chamados “Hot-Spots”, que são que áreas de código executadas com maior frequência. Isso ocorre com a análise dos ByteCodes à medida que eles são interpretados pela Virtual Machine.
Ademais, temos dois outros recursos: Class Loader e Memory Area. Respectivamente, eles realizam: o carregamento das classes Java durante a execução de forma dinâmica, facilitando a modularidade e permitindo a adição de novas classes sem reiniciar o programa e a divisão da memória da JVM em áreas como a área de método, a área de heap e a área de pilha, cada uma dessas áreas desempenha um papel específico na execução do programa, desde armazenar métodos até gerenciar alocação dinâmica de objetos.
A partir disso, é possível perceber que a Java Virtual Machine faz um vasto trabalho “por detrás dos panos”, permitindo ao desenvolvedor que não se preocupe com algumas coisas que interfeririam no desenvolvimento de uma aplicação.
Coleta de Lixo (Garbage Collection) na JVM
O objetivo desse recurso é evitar vazamentos de memória, liberando espaço ocupado por objetos sem referências válidas, melhorando a eficiência, permitindo a alocação dinâmica de memória sem intervenção manual.
Como Funciona
O Garbage Collector identifica e remove objetos sem referências, processo automático que permite que os programadores se concentrem na lógica do aplicativo, enquanto a JVM cuida da gestão de memória.
Algoritmos como G1, CMS e Serial são usados para otimizar a coleta de lixo. A escolha depende do tamanho da aplicação e dos requisitos de desempenho.
Comentário Javadoc
Além dos comentários populares como de linha única (//comentário) e o de múltiplas linhas (/*comentário*/), existe um terceiro tipo (/**comentário*/) que é semelhante ao de múltiplas linhas, entretanto tem o propósito de possibilitar a documentação do programa por meio de utilitário javadoc, gerando uma documentação bem estruturada que facilita a compreensão do código, promovendo boas práticas de documentação e facilitando a colaboração entre membros da equipe.
Exemplo 01:
Caso haja curiosidade, para ter uma ideia sobre a funcionalidade do javadoc, basta digitar em um terminal (no diretório da aplicação java) o comando:javadoc *.java
. Com isso, diversos arquivos HTML serão gerados automaticamente a partir da classe do Exemplo01, um deles chamará “Exemplo01.HTML”, ao acessa-lo terá algo parecido com:
Como pode-se perceber, os recursos do Java são vastos e agora você conhece um pouco mais sobre eles.
Os conceitos que foram abordados constituem pilares fundamentais para os desenvolvedores Java, fortalecendo não apenas a estrutura do código, mas também a legibilidade e a manutenção do software. Essa base permite otimizar a execução de programas, tirando proveito máximo dos recursos da Máquina Virtual Java. Além disso, a adoção consciente do Javadoc vai além da simples prática de comentários, já que facilita a compreensão rápida do código e a manutenção, elevando a qualidade e sustentabilidade do projeto. Em um ambiente tão dinâmico quanto o desenvolvimento Java, investir na compreensão desses elementos não apenas gera uma gama de possibilidades, mas também estabelece alicerces sólidos para a construção de um software robusto e eficiente.
Referência: FURGERI, Sérgio. Java : Ensino didático: desenvolvimento e implementação de aplicações : compatível com versão 9 e jshell com netbeans. São Paulo: Érica, 2018.