Você está na página 1de 41

UniversoUniverso DicasDicas CGUCGU 20122012

Universo Universo Dicas Dicas CGU CGU 2012 2012 Analista Analista de de Desenvolvimento Desenvolvimento

AnalistaAnalista dede DesenvolvimentoDesenvolvimento

GaláxiaGaláxia DesenvolvimentoDesenvolvimento dede

Galáxia Galáxia Desenvolvimento Desenvolvimento de de Sistemas Sistemas rogerioaraujo.wordpress.com – twitter:

SistemasSistemas

ConstelaçãoConstelação LinguagemLinguagem JavaJava

Constelação Constelação Linguagem Linguagem Java Java rogerioaraujo.wordpress.com – twitter: @rgildoaraujo -

BytecodeBytecode

JDKJDK zxzxxzxzxxzxzxzxzxzxxzxzxxzxzxzx zxzxxzxzxxzxzxzxzxzxxzxzxxzxzxzx publicpublic classclass ClasseClasse {{
JDKJDK
zxzxxzxzxxzxzxzxzxzxxzxzxxzxzxzx
zxzxxzxzxxzxzxzxzxzxxzxzxxzxzxzx
publicpublic classclass ClasseClasse {{
privateprivate StringString nome;nome;
……
zxzxxzxzxxzxzxzxzxzxxzxzxxzxzxzx
zxzxxzxzxxzxzxzxzxzxxzxzxxzxzxzx
BytecodeBytecode
zxzxxzxzxxzxzxzxzxzxxzxzxxzxzxzx
zxzxxzxzxxzxzxzxzxzxxzxzxxzxzxzx
}}
zxzxxzxzxxzxzxzxzxzxxzxzxxzxzxzx
zxzxxzxzxxzxzxzxzxzxxzxzxxzxzxzx

MáquinaMáquina

VirtualVirtual

JREJRE

Máquina Máquina Virtual Virtual JRE JRE Máquina Máquina Virtual Virtual JRE JRE Máquina
Máquina Máquina Virtual Virtual JRE JRE Máquina Máquina Virtual Virtual JRE JRE Máquina

MáquinaMáquina

VirtualVirtual

JREJRE

JRE JRE Máquina Máquina Virtual Virtual JRE JRE Máquina Máquina Virtual Virtual JRE JRE
JRE JRE Máquina Máquina Virtual Virtual JRE JRE Máquina Máquina Virtual Virtual JRE JRE

MáquinaMáquina

VirtualVirtual

JREJRE

JRE JRE Máquina Máquina Virtual Virtual JRE JRE rogerioaraujo.wordpress.com – twitter: @rgildoaraujo -
JRE JRE Máquina Máquina Virtual Virtual JRE JRE rogerioaraujo.wordpress.com – twitter: @rgildoaraujo -

Tipos,Tipos, valoresvalores ee variáveisvariáveis

A linguagem de programação Java é uma linguagem:

De tipagem estática

Cada variável e cada expressão possuem um tipo que é conhecido em tempo de compilação

Fortemente tipada

Os tipos:

Limitam os valores que;

Uma variável pode receber

Uma expressão pode produzir

Limitam as operações apoiadas sobre esses valores

Determinar o significado das operações

Tipagem estática forte ajuda a detectar erros em tempo de compilação

Tipos,Tipos, valoresvalores ee variáveisvariáveis

duas categorias de tipos na linguagem Java:

Tipos primitivos

Inicializados por 0 ou false

Tipos por referência

Valor padrão é null

Tipos,Tipos, valoresvalores ee variáveisvariáveis

Tipos primitivos

Tipos numéricos

Tipos integrais

byte

short

int

long

char

Tipos de ponto flutuante

float

double

Tipo booleano

Tipos,Tipos, valoresvalores ee variáveisvariáveis

Tipos primitivos

 

TamanhoTamanho emem bytesbytes

 

ValorValor

TipoTipo

FaixaFaixa

padrãopadrão

byte

1

Inteiro: -128 a 127

0

short

2

Inteiro: -32.768 a 32.767

0

int

4

Inteiro: -2.147.483.648 a 2.147.483.647

0

   

Inteiro: -9.223.372.036.854.775.808 a

 

long

8

9.223.372.036.854.775.807

0L

float

4

Ponto flutuante: +/-3.4E-38 a +/-3.4E+38

0.0f

double

8

Ponto flutuante: +/-1.7E-308 a +/-1.7E+308

0.0d

boolean

1

true ou false

false

char

2

Caracteres UNICODE

'u\0000'

Tipos,Tipos, valoresvalores ee variáveisvariáveis

Tipos primitivos

Importante

Os valores padrões são para variáveis de instâncias

As variáveis locais necessitam de valores para sua inicialização

Se não fizermos isso, ocorrerá um erro de compilação

CastingsCastings possíveispossíveis

Impl. significa que o cast é implícito e automático

Impl. significa que o cast é implícito e automático rogerioaraujo.wordpress.com – twitter: @rgildoaraujo -

VariáveisVariáveis

Também são chamadas de campos

Para Java, temos categorias de variáveis:

Variáveis de instância

Campos não estáticos

São variáveis cujas informações são específicas de cada objeto de uma classe

Variáveis de classe

Campos estáticos

São variáveis cujas informações são específicas para a classe

Variáveis locais

Variáveis de escopo de métodos ou de controle de fluxos

Parâmetros

Valores passados para métodos

VariáveisVariáveis

Regras de nomeação de variáveis e constantes

Os nomes das variáveis:

São case-sensitive

São sequências de tamanho ilimitado contendo:

Letras Unicode

Dígitos

Símbolo de porcento ($)

Underscore (_)

Podem iniciar com:

Letra

Símbolo de porcento ($)

Underscore (_)

Não podem:

Ter espaço em branco

Ser palavra-chave ou palavra reservada

VariáveisVariáveis

Lista de palavras-chave ou palavras reservadas do Java:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keyw

ords.html

Boas práticas na nomeação de variáveis e constantes

Iniciamos normalmente os nomes de variáveis com letra

Convém não utilizarmos:

No início de nomes:

Símbolo de porcento ($)

Underscore (_)

Abreviaturas ao criar os nomes

Com isso, o código será mais fácil de ser:

Compreendido

Mantido

VariáveisVariáveis

Boas práticas na nomeação de variáveis e constantes

Convém que, para variáveis:

Se o nome for composto de apenas uma palavra:

Todas as letras do nome sejam em minúsculas

Exemplo: private String nome

Se for composto de mais de uma:

A primeira letra da palavra subsequente seja maiúscula

Exemplo: private String primeiroNome

Convém que, para constantes:

Se o nome for composto de apenas uma palavra:

Todas as letras do nome sejam em maiúsculas

Exemplo: public static String NOME

Se for composto de mais de uma:

A primeira letra da palavra subsequente seja antecedida de underscore

Exemplo: public static String PRIMEIRO_NOME

OperadoresOperadores

TipoTipo

Aritmético

Atribuição

Relacional

Igualdade

Lógico

Bitwise

Postfix

Unário

Shift aritmético

Shift lógico

OperadoresOperadores

+, -, *, /, %

=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=

<, <=, >, >=, instanceof

==, !=

&&, ||

&, I, ^

var++, var--

++var, --var, +var, -var, ~, !

<<, >>

>>>

OperadoresOperadores

Operadores de shift

Operador <<

Desloca bits para a esquerda

Completa os espaços deixados na direita com 0

Operador >>>

Desloca bits para a direita

Completa os espaços deixados na esquerda com 0

Operador >>

Desloca bits para a direita

Completa os espaços deixados na esquerda com o bit de sinal (bit mais significativo)

Se o bit de sinal for 1 preenche os espaços com 1

Caso contrário preenche os espaços com 0

ControleControle dede fluxofluxo

Estruturas condicionais

if-then

if-then-else

switch

Estruturas de repetição

while

do while

for

TratamentoTratamento dede exceçõesexceções ee erroserros

Sempre que um método de alguma classe é passível de causar algum erro, então, podemos usar o try

Tudo que estiver dentro do bloco try será executado até que alguma exceção seja lançada

Quando uma exceção é lançada, ela sempre deve ser capturada pelo bloco catch

Um bloco try pode possuir vários blocos de catch

Dependendo do número de exceções que podem ser lançadas por uma classe ou método

finally é o trecho de código final

Ele executa seu bloco de dados mesmo que uma exceção seja lançada

TratamentoTratamento dede exceçõesexceções ee erroserros

try {

// código a ser executado

} catch (ClasseDeExceção instânciaDaExceção) {

// tratamento da exceção

} finally {

// código a ser executado mesmo que uma exceção seja lançada

}

ClassesClasses ee objetosobjetos

ModificadorModificador

PublicPublic UMLUML SímboloSímbolo ++
PublicPublic UMLUML
SímboloSímbolo ++
PublicPublic JavaJava
PublicPublic JavaJava
ProtectedProtected UMLUML SímboloSímbolo ##
ProtectedProtected UMLUML
SímboloSímbolo ##
ProtectedProtected JavaJava
ProtectedProtected JavaJava
PrivatePrivate UMLUML SímboloSímbolo --
PrivatePrivate UMLUML
SímboloSímbolo --
PrivatePrivate JavaJava
PrivatePrivate JavaJava
PackagePackage UMLUML SímboloSímbolo ~~
PackagePackage UMLUML
SímboloSímbolo ~~
DefaultDefault JavaJava
DefaultDefault JavaJava

ClasseClasse


















SubclasseSubclasse









 Subclasse Subclasse     Pacote Pacote      Todos Todos
 Subclasse Subclasse     Pacote Pacote      Todos Todos
 Subclasse Subclasse     Pacote Pacote      Todos Todos
 Subclasse Subclasse     Pacote Pacote      Todos Todos

PacotePacote





    Pacote Pacote      Todos Todos  


   Pacote Pacote      Todos Todos  
   Pacote Pacote      Todos Todos  





TodosTodos





     Todos Todos   rogerioaraujo.wordpress.com – twitter: @rgildoaraujo -
     Todos Todos   rogerioaraujo.wordpress.com – twitter: @rgildoaraujo -
     Todos Todos   rogerioaraujo.wordpress.com – twitter: @rgildoaraujo -
     Todos Todos   rogerioaraujo.wordpress.com – twitter: @rgildoaraujo -
     Todos Todos   rogerioaraujo.wordpress.com – twitter: @rgildoaraujo -
     Todos Todos   rogerioaraujo.wordpress.com – twitter: @rgildoaraujo -

ClassesClasses ee objetosobjetos

OrdemOrdem dede visibilidadevisibilidade nana UMLUML (do(do maismais restritorestrito parapara oo maismais liberal)liberal)
OrdemOrdem dede visibilidadevisibilidade nana UMLUML (do(do maismais restritorestrito parapara oo maismais liberal)liberal)
PrivatePrivate PackagePackage ProtectedProtected PublicPublic -- ~~ ## ++
PrivatePrivate
PackagePackage
ProtectedProtected
PublicPublic
--
~~
##
++

OrdemOrdem dede visibilidadevisibilidade nana JavaJava (do(do maismais restritorestrito parapara oo maismais liberal)liberal)

PrivatePrivate DefaultDefault ProtectedProtected PublicPublic
PrivatePrivate
DefaultDefault
ProtectedProtected
PublicPublic

ClassesClasses ee objetosobjetos

Tipos enumerados

É um tipo especial de classe que contém um conjunto fixo de constantes

Exemplos:

Pontos cardeais

NORTE, SUL, LESTE, OESTE

Dias da semana

DOMINGO, SEGUNDA, TERCA, QUARTA, QUINTA, SEXTA, SABADO

ClassesClasses ee objetosobjetos

Annotations

Informação para o compilador

Podem ser utilizadas pelo compilador para

Detectar erros

Suprimir avisos

Processamento em tempo de compilação e de implantação

Ferramentas de software podem processar informações de uma annotation para gerar

Código

Arquivos XML

Assim por diante

Processamento de tempo de execução

Algumas annotations estão disponíveis para ser examinadas em tempo de execução

ClassesClasses ee objetosobjetos

Annotations

Exemplo

@Override

void metodoSuperClasse() { }

Interfaces

Não são consideradas classes e sim entidades

Não possuem implementação, apenas assinatura

Apenas a definição dos seus métodos sem o corpo.

Todos os métodos são abstratos

Seus métodos são implicitamente públicos e abstratos

ClassesClasses ee objetosobjetos

Interfaces

Não há como

Criar instâncias delas

Criar um Construtor

Funcionam como um tipo de “contrato”, onde são especificados os atributos, métodos e funções que as classes que implementem essa interface são obrigadas a implementar.

Java não suporta heranças múltiplas

As interfaces são usadas para implementá-las

ClassesClasses ee objetosobjetos

Classes abstratas

Devem conter pelo menos um método abstrato

Não há como criar instâncias delas

São usada apenas para ser herdada

Uma grande vantagem é que força a hierarquia para todas as sub-classes

É um tipo de contrato que faz com que as sub-classes contemplem as mesmas hierarquias e/ou padrões

ClassesClasses ee objetosobjetos

Modificador final

Métodos final não podem ser sobrescritos por subclasses

Classes final não podem ser ter subclasses

Polimorfismo

Estático

Métodos sobrecarregados (overloading)

Dinâmico

Método sobre-escritos (overriding)

ClassesClasses ee objetosobjetos

Polimorfismo

Estático

Métodos sobrecarregados (overloading)

Quando a classe possui métodos com o mesmo nome, porém com argumentos diferentes

A decisão de qual método chamar é tomada em tempo de compilação, baseada nos argumentos que foram passados

Dinâmico

Método sobre-escritos (overriding)

Está associado com o conceito de herança

Ocorre quando uma subclasse redefine um método existente na superclasse

A decisão de qual método executar é tomada somente em tempo de execução

GenericsGenerics

Serve para determinar para o compilador qual tipo de classe deve ser interpretada

para o compilador qual tipo de classe deve ser interpretada rogerioaraujo.wordpress.com – twitter: @rgildoaraujo -

GenericsGenerics

Generics Generics rogerioaraujo.wordpress.com – twitter: @rgildoaraujo - rgildoaraujo@gmail.com 30

GenericsGenerics

Java usa uma pequena convenção de nomenclatura para as letras de identificação de generics, sendo:

E - Elemento

K - Chave

N - Número

T - Tipo

V - Valor

ReflectionReflection

Com reflection, é possível:

Recuperar as classes dos objetos instanciados

Examinar tipos e modificadores de classes

Descobrir membros das classes

Troubleshooting

Descreve os erros mais comuns encontrados ao utilizar classe

ReflectionReflection

Recuperar as classes dos objetos instanciados

Object.getClass()

Obtém uma classe de objeto instanciado

Class c = objeto.getClass();

.class

Obtém uma classe:

Quando um tipo está disponível, mas não há nenhuma instância

De um tipo primitivo

boolean buleano;

Class c = buleano.getClass();

Class c = boolean.class;

// erro na compilação

ReflectionReflection

Recuperar as classes dos objetos instanciados

Class.forName()

Obtém uma classe quando o nome totalmente qualificado de dlea está disponível

Não pode ser usado para tipos primitivos

Class c = Class.forName("br.com.empresa.entidades.Pessoa");

Campo TYPE para wrappers de tipos primitivos

Cada classe wrappers contém um campo chamado TYPE que é igual à Class para o tipo primitivo sendo empacotado (wrapped)

Class c = Double.TYPE;

Class c = Void.TYPE;

Void.TYPE é idêntico ao void.class

ReflectionReflection

Recuperar as classes dos objetos instanciados

Métodos que retornam classes

Class.getSuperclass()

Retorna a super classe de uma classe dada

Class c = javax.swing.JButton.class.getSuperclass();

Class.getClasses()

Retorna todas as classes públicas, interfaces e enumerações que são membros da classe, incluindo membros herdados

Class.getDeclaredClasses()

Retorna todas as interfaces de classes e enums que são explicitamente declarados nesta classe

ReflectionReflection

Recuperar as classes dos objetos instanciados

Métodos que retornam classes

Class.getDeclaringClass()

java.lang.reflect.Field.getDeclaringClass()

java.lang.reflect.Method.getDeclaringClass()

java.lang.reflect.Constructor.getDeclaringClass()

Retornam a classe em que esses membros foram declarados

Classes anônimas não vai ter uma classe declarar, mas terá uma classe inclusora

Class.getEnclosingClass()

Retorna a classe imediatamente envolvente (enclosing) da classe

ReflectionReflection

Examinar tipos e modificadores de classes

Métodos para localizar atributos

   

MembrosMembros

 

ListaLista dede membros?membros?

herdados?herdados?

MembrosMembros private?private?

getDeclaredField()

Não

Não

Sim

getField()

Não

Sim

Não

getDeclaredFields()

Sim

Não

Sim

getFields()

Sim

Sim

Não

ReflectionReflection

Examinar tipos e modificadores de classes

Métodos para localizar métodos

   

MembrosMembros

 

ListaLista dede membros?membros?

herdados?herdados?

MembrosMembros private?private?

getDeclaredMethod()

Não

Não

Sim

getMethod()

Não

Sim

Não

getDeclaredMethods()

Sim

Não

Sim

getMethods()

Sim

Sim

Não

ReflectionReflection

Examinar tipos e modificadores de classes

Métodos para localizar construtores

 

ListaLista dede membros?membros?

MembrosMembros

 

herdados?herdados?

MembrosMembros private?private?

getDeclaredConstructor()

Não

Construtores não são herdados

Sim

getConstructor()

Não

Construtores não são herdados

Não

getDeclaredConstructors()

Sim

Construtores não são herdados

Sim

getConstructors()

Sim

Construtores não são herdados

Não

ThreadThread

Há duas formas de se criar uma thread em Java:

Cria-se um objeto que estende a classe Thread e sobrescreve-se o método public void run()

Implementa-se a interface Runnable

A execução de uma thread pode passar por quatro estados:

Nova (criada)

Executável (em execução)

Bloqueado (suspensa)

Encerrado (morta)

ThreadThread

Thread Thread rogerioaraujo.wordpress.com – twitter: @rgildoaraujo - rgildoaraujo@gmail.com 41