Pular para o conteúdo principal

Literais da Linguagem Java

Na última semana, tive uma conversa com um profissional Java iniciante que me apresentou dúvidas sobre o uso de valores hexadecimal na linguagem, inicialmente entendi que ele precisava da representação textual de um valor hexadecimal, então apresentei um método da classe wrapper Integer, conforme segue:

int valor = 15;
System.out.println(Integer.toHexString(valor)); //Imprime f

Só então após mostrar este exemplo, ficou claro que ele precisava exatamente do contrário, ou seja, qual a forma mais fácil de converter um número hexadecimal para um número decimal para atribuição a uma variável primitiva inteira. Esclareci que para isso não havia necessidade de conversão, bastaria usar uma literal hexadecimal presente na linguagem Java da seguinte forma:

int valor = 0xf; // ou 0XF
System.out.println(valor); //Imprime 15

Este episódio me motivou a escrever este post sobre os literais da Linguagem Java, então vamos lá.

De acordo com a especificação da linguagem (The Java™ Language Specification Third Edition http://java.sun.com/docs/books/jls/ ) a definição de um literal na linguagem Java, em tradução livre, é que um literal é uma palavra do código fonte que representa um valor referente a um primitivo, uma (java.lang.)String ou uma referência nula. Vamos então conhecer os literais da linguagem Java.

Inteiros

Os literais inteiros são representados por números inteiros, ou seja, sem o separador de decimais ponto (.), podendo ser positivos (precedidos ou não do sinal de mais +) ou negativos (precedidos do sinal de menos -) e composto pelos dígitos pertencentes a base referente.
Estes literais são do tipo primitivo int, exceto se for incluído o caractere L (maiúsculo ou l minúsculo) como sufixo, que indica que o literal é do tipo long, vale ressaltar que o caractere L (maiúsculo) deve ser usado preferencialmente ao l (minúsculo), pois facilita a leitura, visto que o caractere l (minúsculo) é facilmente confundido com o dígito 1.
Os inteiros decimais (base 10) são compostos pelos dígitos: 0 1 2 3 4 5 6 7 8 9, não iniciados por zero (0), exceto o próprio zero (0), pois os literais que representam inteiros octais (base 8) são iniciados por zero (0) e compostos pelos dígitos: 0 1 2 3 4 5 6 7. Existem ainda os literais inteiros hexadecimais (base 16) que são compostos pelos dígitos 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F e iniciados pelo prefixo 0x (ou 0X).
Exemplos de literais inteiros:

Decimais: 0 -89 3568
Octais: 010 -028 -064
Hexadecimais: 0xCafe -0Xfefe 0xCade
long: 0XCOBOL -010L 78l

Ponto flutuante

Na linguagem Java uma literal do tipo ponto flutuante possui a parte inteira e a parte decimal separadas pelo ponto (.), e pode ser utilizada a notação E, ou representações hexadecimais com expoentes binários.
A notação E, utiliza para a representação do expoente decimal o caractere e (ou E) e uma literal de ponto flutuante hexadecimal utiliza o caractere p (ou P) para a representação do expoente binário.
Os literais em ponto flutuante são do tipo primitivo double, exceto se for incluído o caractere f (ou F) como sufixo, que indica que o literal é do tipo float. O caractere d (ou D) pode ser opcionalmente utilizado como sufixo para tipos double.
Estes literais podem ser positivos (precedidos ou não do sinal de mais +) ou negativos (precedidos do sinal de menos -) tanto na mantissa quanto no expoente, conforme exemplos:

Decimal: 1.0 -89.911 7895.05d
Notação E: -1e1D 1000e-3 0.31415e1
Hexadecimal: 0xFp-4 0X10.Ap1 0xCAFE.Ap+1
float: 3.14159f -2.5e9f 0x10.Ap-1f

Booleanos

As palavras true e false são literais do tipo primitivo boolean, ou seja, são valores que podem ser atribuídos diretamente para variáveis primitivas do tipo boolean, conforme código abaixo:

//declarando uma variável e atribuindo o valor booleano true
boolean teste1 = true;

Caractere

Um literal caractere é do tipo primitivo char, e pode ser representado por um único caractere ou uma sequência de escape entre aspas simples (‘). Um caractere pode ser representado por uma sequência de escape com o código hexadecimal Unicode (http://pt.wikipedia.org/wiki/Unicode, http://pt.wikipedia.org/wiki/UTF-16), precedido por \u, na seguinte faixa: de ‘\u0000’ até ‘\uFFFF’, ou ainda um código octal, precedido pelo caracter de escape \ (barra invertida) na seguinte faixa: de \000 até \377. A representação de escape octal foi inserida por compatibilidade com C, e devem ser preteridos pelo uso do Unicode.

Exemplos de literais char: 'a' ' $' 'Ω' '\u002E' '\177'

Caracteres de escape
Existem ainda os caracteres de escape que representam caracteres não imprimíveis, e também aspas simples, aspas duplas e barra invertida, utilizados conforme segue.

char backspace = '\b';
char tabulacao = '\t';
char novaLinha = '\n';
char novaPagina = '\f';
char retorno = '\r';
char aspasDuplas = '\"';
char aspasSimples = '\'';
char barraInvertida = '\\';

String

Um literal string é composto por zero ou mais caracteres entre aspas duplas ("), e uma literal string é sempre do tipo (java.lang.)String.
Devido a forma como os caracteres de escape Unicode são processados não é correto escrever "\u000a", devendo ser utilizado para tal "\n", e de forma similar deve ser usado "\r" ao invés de "\u000d".

String aspasDuplas = "\"";
String hello = "Hello";

Null

A palavra null, serve para anular uma referência a um objeto, para exemplificar:

/* declarando uma variável referencia do tipo Object
* e atribuindo um novo objeto
/*
Object referencia = new Object();
/* anulando a referencia, agora o objeto criado na linha
* anterior não está mais acessível pela variável referencia
*/
referencia = null;

Este post apresentou os literais da Linguagem Java sendo a maioria trivial, porém alguns nem tanto, como o literal hexadecimal com expoente binário, e é curioso saber também que 0xCOBOL é um literal da Linguagem Java.

Até mais!

Marcelo de Castro
http://twitter.com/mcastroinfo
http://www.globalcode.com.br/instrutores/MarceloCastro

Comentários

Aishi disse…
Exatamente o que eu estava procurando! Grato

Postagens mais visitadas deste blog

10 reasons why we love JSF

1. One-slide technology: it's so simple that I can explain basic JSF with one slide. 2. Easy to extend: components, listeners, render kit, Events, Controller, etc. 3. Real-world adoption: JBoss, Exadel, Oracle, IBM, ... 4. Architecture model: you can choose between more than 100 different architecture. 5. Open-mind community: using JSF you are going to meet very interesting people. 6. We are using JSF the last 5 years and we found very good market for JSF in Brazil 7. Progress: look to JSf 1.1 to JSF 1.2, JSF 1.2 to JSF 2.0. People are working really hard! 8. Many professionals now available 9. It's a standard. It's JCP. Before complain, report and help! 10. Ed Burns, spec leader, is an old Globalcode community friend! EXTRA: My wife is specialist in JSF. She's my F1 for JSF :) Nice job JSF community! -Vinicius Senger

Vem vindo novidade por ai... Minicurso de desenvolvimento iOS

Ola pessoal, Depois de uma conversa com a Yara, resolvemos colocar em prática uma idéia que já tinhamos a um tempo, que é aumentar as opções de mobilidade no portifólio da Globalcode e também da iniciativa Open4Education. E nesse caso estamos falando de um minicurso sobre desenvolvimento para iPhone e iPad. O objetivo desse minicurso vai ser mostrar que desenvolver para iOS não é tão complicado como se pode pensar e que não é preciso ter medo do Objective-C ! Serão algumas horas onde os alunos poderão entender os fundamentos da plataforma, como funciona o programa para desenvolvedores da Apple, preparação do ambiente e dos devices de teste e também um overview dos layers de desenvolvimento do iOS. Além disso, o objetivo também vai ser passar um pouco da minha experiência na "migração" que fiz de Java (seja SE, ME ou Android) para o novo mundo do Objective-C e Cocoa Touch. O material está no começo e ainda não temos uma data certa (só sabemos que a primeira edição desse minicu...

Transmissão do minicurso Google App Engine

Os minicursos gratuitos realizados através da iniciativa Open4Education da Globalcode têm sido transmitidos ao vivo em forma de webcast e eu tenho acompanhado pessoalmente muitos deles, conversado com os alunos no chat, observando a qualidade e as limitações das transmissões. Sem dúvida o aproveitamento presencial é muito maior, principalmente pelo networking e pelo foco dado ao conteúdo. Mas, para aqueles que não estão em São Paulo o custo benefício é sensacional. Mesmo perdendo um pouco nas transmissões, é muito melhor poder assistir os minicursos à distância. Com o sucesso das transmissões do Profissão Java e do The Developer's Conference 2010 queremos melhorar e atingir um público ainda maior, e é por isto, que iremos fazer a primeira transmissão ao vivo em parceria com a WTV Streaming hoje! Os principais benefícios desta parceria são: Transmissão do vídeo e não apenas do conteúdo que está sendo projetado Captação e edição do conteúdo, para posterior disponibilizaç...

JavaMail: Enviando e-mail com Java

Introdução Além da necessidade de envio de e-mail ser comum a várias aplicações, foi a pergunta de um aluno da Academia Java ,  “Como enviar um e-mail com Java?”, que me motivou a escrever este post sobre JavaMail. JavaMail Para realizar o envio de e-mail por meio de uma aplicação Java, precisamos da biblioteca JavaMail, pois ela não é incluída no Java SE. A biblioteca está disponível em http://www.oracle.com/technetwork/java/index-138643.html . Neste download, além da biblioteca mail.jar que inclui a implementação completa da API e providers, também é disponibilizada a documentação da biblioteca ( javadoc ) na pasta docs , alguns exemplos na pasta demo e partes da implementação em lib . A forma mais simples de utilizar a JavaMail e incluir o mail.jar , porém para uma aplicação que só envia e-mail como o nosso exemplo, necessitamos apenas dos arquivos mailapi.jar e smtp.jar , economizando 177KB. Como a economia é pouca e as aplicações evoluem, vamos adicionar o mail.j...

Facelets uma forma mais ágil para construção de telas – Parte I

A construção de telas ou camada de apresentação em um sistema MVC seja web ou desktop é uma tarefa complexa e de extrema importância. Nesse post vou comentar e mostrar algum exemplo do Facelets como solução para os desafios existentes nessa etapa especificamente para web. Com a web cada vez mais presente em nosso dia-a-dia, um fato é que com isso nossos usuários tornam-se mais exigentes em relação a usabilidade, agilidade, performance ou de uma forma bem resumida “o usuário espera uma navegação simples e agradável aonde uma determinado tarefa possa ser concluída em poucos passos e em um curto espaço de tempo”. Atender as expectativas em relação ao que o usuário espera com o que realmente ele precisa, definir uma estrutura flexível a mudanças sem engessar o desenvolvimento, acessibilidade, portabilidade em múltiplos navegadores, tudo isso e muito mais, num prazo que quase sempre é apertado. Um outro ponto fundamental é manter o time motivado e produtivo em um ambiente que favoreça a...

JavaOne Brasil, dicas para submissão de palestras

Não quero parecer pretensiosa dando dicas para submissão de palestras para o JavaOne Brasil, mas sim repassar os tantos conselhos e sugestões recebidas pelos vetaranos do JavaOne: Bruno Souza e Leonardo Galvão que revisaram dezenas de submissões para o JavaOne e ajudaram a aprovar tantas palestras, e também misturar um pouco da minha experiência na seleção de palestras nos eventos realizados pela Globalcode e SouJava . 10 anos de JavaOne: http://www.globalcode.com.br/noticias/Globalcode10AnosNoJavaOne Os palestrantes ganham a entrada! A submissão pode ser feita em português! O passo mais importante para ser aprovado como palestrante no JavaOne é sem dúvida nenhuma submeter pelo menos uma palestra. Então, independente de qualquer coisa, participe, arrisque, divulgue.  Mas, se quiser aumentar as suas chances...   1) Leve a sério: peça para amigos fazerem uma leitura crítica do texto, e claro uma boa revisão ortográfica. 2) Submissão de várias palestras ou variações do ...