SUN Certified Java               Programmer                 @regismelo@regismelo                        1
MissãoApresentar os tópicos da certificação SUNCertified Programmer for Java 2 Platform  @regismelo                       ...
Metodologias• Exposição e discussão teóricas;• Simulados de cada assunto;• Simulado geral. @regismelo                     ...
O que esse curso não cobre ou não é?Não Cobre:• Conceitos gerais de programação – Esse não é  um curso para quem nunca pro...
O quão preparado está você?Antes de fazer esse curso, você deverá ter feito   SSJ01 – Introdução a Java e Web   SSM01 – In...
O que é a certificação SCJP?• Certificar conhecimentos necessários para o  desenvolvimento de aplicações usando J2SE –  Ja...
Livro adotado@regismelo                   7
Referência@regismelo                8
Outras certificações@regismelo                          9
“Se você for incapaz de pensar               diferente, o futuro sempre                 chegará com surpresa”@regismelo   ...
Language Fundamentals@regismelo                      11
Language Fundamentals                      Objetivos• Identificar corretamente a estrutura de um programa  Java, declaraçã...
Language Fundamentals                       Objetivos• Conhecer todas as palavras chave de Java e seus  identificadores;• ...
Language Fundamentals                       Objetivos• Conhecer a correspondência entre os argumentos  passados na linha d...
Language Fundamentals                  Arquivos fonte• Todos os arquivos fonte em java terminam com a  extensão “.java”;• ...
Language Fundamentals                 Arquivos fonte• Existem 3 elementos “top-level” que poderão estar  presentes em um a...
Language Fundamentals              Arquivos fonte - Package• Formato da declaração de um package     package <nome do paco...
Language Fundamentals              Arquivos fonte - Import• Formato da declaração de Imports     import <pacote.*>;     Im...
Language Fundamentals               Arquivos fonte - Import• Cuidado!   – Algumas vezes você pode ter duas classes em     ...
Language Fundamentals                   Arquivos fonte// Declaração do pacote2. package br.com.softsite.sfc;3.4. // Import...
Language Fundamentals                     Keywords• A linguagem Java possui 52 palavras chave/reservadas:                 ...
Language Fundamentals                               Identifier• Identifier são palavras utilizadas pelo programador para  ...
Language Fundamentals                 Tipos Primitivos• Os tipos primitivos em Java, são:    boolean    char    byte    sh...
Language Fundamentals                 Tipos Primitivos• Tipos primitivos e seus tamanhos  * Em java, booleanos só podem re...
Language Fundamentals                  Tipos Primitivos• Faixas dos inteiros primitivos  * Em java, não existe o modificad...
Language Fundamentals                     Tipos Primitivos• O char é um inteiro porém sem sinal. Sua faixa varia de 0 a  2...
Language Fundamentals                    Tipos Primitivos• Os tipos primitivos com suporte a ponto flutuante são:   – floa...
Language Fundamentals                         Literals• Um literal é um valor especificado no fonte do programa,  ao invés...
Language Fundamentals                                 Literals• ...char literals    – Escape characters         ‘n’ – Nova...
Language Fundamentals                         Literals• Integral Literals   – Podem ser representados na notação decimal, ...
Language Fundamentals                                  Literals• Floating-Point Literals   – Para ser reconhecida como pon...
Language Fundamentals                                 Literals• String Literals   – Seqüência de caracteres delimitados po...
Language Fundamentals                      Arrays• Coleção de tipos primitivos, objetos ou outros  arrays• Para criar um a...
Language Fundamentals                      Arrays• Declarando:   1. int[] ints;   2. double[] dubs;   3. Dimension dims []...
Language Fundamentals                      Arrays• Outro exemplo:  1. int[] ints; // Declaração  2. ints = new int[25]; //...
Language Fundamentals                    Arrays• Quanto um array é declarado os seus elementos  são automaticamente inicia...
Language Fundamentals                              Arrays•      Declarando e inicializando:      2.    float[] diameters =...
Language Fundamentals              Class Fundamentals• O método main() é por onde uma aplicação inicia;• A assinatura do m...
Language Fundamentals              Variáveis e inicialização• Java suporta dois tipos de variáveis:   – Member/instance va...
Language Fundamentals          Passagem de argumentos• Quando Java passa um argumento para um  método ele está sempre pass...
Language Fundamentals            Passagem de argumentos• Deve-se tomar cuidado quando se passa objetos  como parâmetro – u...
Language Fundamentals              Garbage Collection• Processo de “limpeza” de instâncias não mais    referenciadas no pr...
Language Fundamentals                Garbage Collection• O Garbage Collector ajuda no processo de  limpeza de memória, mas...
Language Fundamentals              Garbage Collection• O método finalize   protected void finalize() throws Throwable• Cha...
Inicializadores• Expressão de inicialização de variáveis;    – Utilizado para atribuir uma valor a variável no      moment...
Inicialização de Variáveis• São inicializadas na ordem que foram  criadas;• Variáveis estáticas não podem referenciar  var...
Inicialização de Variáveis• Se um método utilizar uma variável que ainda  não foi inicializada, ocorrerá um erro de lógica...
Inicializadores Estáticos• Java permite a criação de um bloco onde  pode ser colocado códigos estáticos  arbitrários;• É e...
Inicializadores Estáticos• Uma classe pode possuir mais de um bloco  estático;• Eles são executados não ordem em que foram...
Inicializadores Estáticos•     Um bloco estático não pode lançar nenhuma Checked Exception;•     Todas as possíveis exceçõ...
Inicializadores de Instância• Permite a execução de códigos de  instância e estáticos arbitrários;• Tem o mesmo propósito ...
Inicializadores de Instância• Assim como os blocos estáticos, podem  existir dentro da mesma classe, mais de  um bloco de ...
Inicializadores de InstânciaEx:  public class InstanceInitializer {    {       i++; //erro! Variável não declarada;    }  ...
Inicializadores de Instância• Um bloco de instância pode repassar  qualquer tipo de exceções;• Se alguma exceção for repas...
Inicializadores de InstânciaEx: public class InstanceInitializer {    public void initFile(String file) throws IOException...
Ordem de Inicialização• A inicialização se dá quando o operador  new é chamado;• As variáveis de instância são inicializad...
Ordem de Inicialização• Os inicializadores de variáveis e os blocos  de instância são executados na ordem em  que foram de...
Ordem de Inicializaçãopublic class Order {   int i = 10; //Segundo a ser executado;   int x;   {       for (;x<10;x++) {.....
Language Fundamentals             Simulado@regismelo                             59
Operators and Assignments@regismelo                      60
Operators and Assignments                       Objetivos• Determinar o resultado da operação de qualquer  operador, inclu...
Operators and Assignments@regismelo                        62
Operators and Assignments               Ordem de avaliação• A expressão sempre é avaliada da  esquerda para a direita;• O ...
Operators and Assignments              Unary Operators• Java provê 7 operadores unários     - Incremento e decremento: ++ ...
Operators and Assignments                Unary Operators• Incremento e decremento ( ++ -- )      - A ordem importa!       ...
Operators and Assignments              Unary Operators• Incremento e decremento ( ++ -- ) @regismelo                      ...
Operators and Assignments                Unary Operators• Operador unário + e –        1. x = -3;        2. y = +3;       ...
Operators and Assignments              Unary OperatorsOperador de bit (~)• O operador de bit ~ inverte os bits de um tipo ...
Operators and Assignments                  Unary OperatorsOperador boolean (!)• Esse operador inverte o valor de uma  expr...
Operators and Assignments                 Unary OperatorsOperador cast (tipo)• Utilizado para conversões explícitas;• Só é...
Operators and Assignments                 Unary OperatorsOperador cast (tipo)• Muito utilizado quando se usa containeres  ...
Operators and Assignments               Arithmetic Operators• Os operadores * e / realizam a multiplicação e divisão de  t...
Operators and Assignments                 Arithmetic Operatorspublic static void main( String args[] ) {       int i = 64 ...
Operators and Assignments              Arithmetic Operators• Que valores são retornados pelo exemplo abaixo?     1. int a ...
Operators and Assignments              Arithmetic Operators• O operador % retorna o resto da divisão      1. 17 % 5      2...
Operators and Assignments               Arithmetic Operators• Soma (+) e Subtração (-)   - Java não permite que os operado...
Operators and Assignments              Arithmetic Operators• Em uma operação usando + com dois tipos  primitivos, podemos ...
Operators and Assignments              Arithmetic Operators• Para uma operação usando + com qualquer  operando que não é u...
Operators and Assignments         Arithmetic Error Conditions• Divisões inteira por zero (incluindo o operador %),  podem ...
Operators and Assignments               Comparação com NaN• Tudo que é comparado com a constante NaN resulta em  false:   ...
Operators and Assignments        Os operadores Shift <<, >> e >>>• << faz um shift left de n bits;• >> faz um shift rigth ...
Operators and Assignments       Os operadores Shift <<, >> e >>>@regismelo                                       82
Operators and Assignments       Os operadores Shift <<, >> e >>>@regismelo                                       83
Operators and Assignments       Os operadores Shift <<, >> e >>>@regismelo                                       84
Operators and Assignments       Os operadores Shift <<, >> e >>>@regismelo                                       85
Operators and Assignments        Arithmetic promotion of operands• Todos os operandos em uma operação  binária são promovi...
Operators and Assignments             Operadores de comparação• Os operadores de comparação são <, <=, >, >=, == e !=• Os ...
Operators and Assignments                O operador instanceof• Testa a classe a qual um objeto pertence em  runtime;• exe...
Operators and Assignments        Operadores de igualdade == e !=• Testam a igualdade entre operandos;• A igualdade está su...
Operators and Assignments       Operadores de bit - &, ^ e |• & = and, ^ = XOR e | = OR@regismelo                         ...
Operators and Assignments       Operadores de bit - &, ^ e /• & = and, ^ = XOR e | = OR@regismelo                         ...
Operators and Assignments       Operadores de bit - &, ^ e |• & = and, ^ = XOR e | = OR@regismelo                         ...
Operators and Assignments              Operadores ternário• Operador ternário possui a seguinte  sintaxe:     a = x ? b : ...
Operators and Assignments               Assignment Operators• =, +=, -=, *=, /=• Castings são feitos automaticamente:     ...
Operators and Assignments             Simulado@regismelo                              95
Modifiers@regismelo               96
Modifiers                       Objetivos• Declarar corretamente inner classes, métodos, variáveis  estáticas (static) e d...
Modifiers           O que são modificadores?• São as keywords em Java que dão informação ao  compilador a respeito da natu...
Modifiers                       Modificadores• Em Java existem modificadores relacionados ao acesso  de métodos, classes e...
Modifiers              Modificadores de Acesso• Modificadores de acesso especificam quais  classes podem acessar:   – Outr...
Modifiers         Modificadores de Acesso - Restrições• O único modificador de acesso permitido a non-inner  class é publi...
Modifiers        Modificadores de Acesso - public• O modificador public é o mais “generoso”.  Especifica que uma classe, v...
Modifiers         Modificadores de Acesso - private• Diferente do modificador public, private é o menos  “generoso”. Variá...
Modifiers         Modificadores de Acesso - default• default não é um modificador em Java, é somente o nível  de acesso es...
Modifiers           Modificadores de Acesso - protected• Esse tipo de acesso é um pouco menos restritivo do que o  acesso ...
Modifiers        Privacidade de Métodos e Classes• A figura abaixo mostra os acessos legais para override de  métodos:    ...
Modifiers         Outros Modificadores - final• É aplicado a classes, métodos e variáveis com a idéia de:    – Não podem s...
Modifiers               Outros Modificadores - abstract• Pode ser aplicado a métodos e classes.• final x abstract• Uma cla...
Modifiers               Outros Modificadores - static• Pode ser aplicado a métodos, variáveis e até a trechos de  código q...
Modifiers              Outros Modificadores - static• Métodos também podem ser static e seguem as restrições:   – Um métod...
Modifiers               Outros Modificadores - static• Static Initializers• É legal pra uma classe possuir um bloco que ex...
Modifiers          Outros Modificadores - native• Se aplica somente a métodos.• Identifica que um método, escrito em uma  ...
Modifiers           Outros Modificadores - transient• Esse modificador se aplica somente a variáveis.• Objetos que impleme...
Modifiers                Outros Modificadores• synchronized   – Esse modificador é utilizado para controlar acesso a     á...
Modifiers             Simulado@regismelo                   115
Converting and Casting@regismelo                            116
Converting and Casting                       Objetivos• Determinar o resultado do uso de qualquer operador  incluindo oper...
Converting and Casting       Explicit and Implicit Type Changes• Você pode explicitamente alterar o tipo de uma  variável ...
Converting and Casting              Primitives and Conversion• Existem 3 possíveis maneiras para que a  conversão de tipos...
Converting and Casting                     Primitives and                 Conversion - Assignments•      Ocorre quando voc...
Converting and Casting                 Primitives and Conversion -                         Assignments•      Algumas conve...
Converting and Casting              Primitives and Conversion -                      AssignmentsA regra geral para convers...
Converting and Casting                 Primitives and Conversion -                         Assignments“Widening Conversion...
Converting and Casting              Primitives and Conversion -                      Assignments“Widening Conversions” @re...
Converting and Casting          Assignments Conversion, primitive                 and literal values•      Um valor litera...
Converting and Casting                    Primitive Conversion                        Method call•      Acontece quando se...
Converting and Casting                    Primitive Conversion                        Method call•      Porém, o código ab...
Converting and Casting                        Primitive Conversion                        Arithmetic Promotion•       Cons...
Converting and Casting                 Primitive Conversion                 Arithmetic Promotion•       As regras que rege...
Converting and Casting                     Primitive Conversion                     Arithmetic Promotion•       Para os op...
Converting and Casting                    Primitive Conversion                    Arithmetic Promotion•       Para os oper...
Converting and Casting                   Primitive Conversion                   Arithmetic Promotion•       Exemplos:     ...
Converting and Casting                   Primitives and Casting•       Casting significa dizer, explicitamente, para o    ...
Converting and Casting                    Primitives and Casting•     Castings explícitos permitem fazer conversões      w...
Converting and Casting                Primitives and CastingExistem três regras básicas que regem o processo    de casting...
Converting and Casting                 Object Reference Assignment                         Conversion•       Conversão de ...
Converting and Casting          Object Reference Assignment Conversion•       Possibilidades de conversão:           1. Ol...
Converting and Casting                 Object Reference Casting•       As conversões de objeto são permitidas e        amp...
Converting and Casting                 Object Reference Casting•       Possibilidades de conversão:           NewType nt; ...
Converting and Casting             Simulado@regismelo                                  140
Flow control and Exceptions@regismelo                       141
Flow control and Exceptions                      Objetivos• Escrever código usando if, switch;• Escrever código usando tod...
Flow control and Exceptions           Loop Constructs – While/do While•      A forma geral de um while é:      1. while ( ...
Flow control and Exceptions                      Loop Constructs – for•       A forma geral de um for é:       1. for( sta...
Flow control and Exceptions                        Loop Constructs – for•      Outra forma de utilizar o for:           1....
Flow control and Exceptions                       Break and Continue•      Usando o continue:           1. for (int i = 0;...
Flow control and Exceptions                      Break and Continue•      Continue com labels           mainLoop:         ...
Flow control and Exceptions                       Break and Continue•      Usando o break           1. for (int i = 0; i <...
Flow control and Exceptions                      Break and Continue•      Break com labels           mainLoop:           f...
Flow control and Exceptions                    Selection Statements•      Usando if/else           1. if (x > 5) {        ...
Flow control and Exceptions                      Selection Statements•      Usando switch           1. switch (x) {       ...
Flow control and Exceptions                      Exceptions•      Mecanismo para tratamento e recuperação de       erros;•...
Flow control and Exceptions                                    Exceptions1. int x = (int)(Math.random() * 5);2. int y = (i...
Flow control and Exceptions                       Exceptions•      Para o exemplo do slide anterior:    @regismelo        ...
Flow control and Exceptions                                Exceptions•      A cláusula finally faz com que um bloco de    ...
Flow control and Exceptions1. try {                                    Exceptions2.       // statements3.       // some ar...
Flow control and Exceptions                     Throwing Exceptions•      Dispara uma nova exceção•      Sintaxe:      –  ...
Flow control and Exceptions             Categories of Exceptions@regismelo                                          158
Flow control and Exceptions                 Categories of Exceptions•      Checked Exceptions      –     Problemas que pod...
Flow control and Exceptions                 Categories of Exceptions•      Errors      –     Descrevem problemas não comun...
Flow control and Exceptions                 Exceptions and Overriding•      Quando você estende uma classe e sobrescreve  ...
Flow control and Exceptions             Exceptions and Overriding@regismelo                                          162
Flow control and Exceptions             Simulado@regismelo                               163
Objects, Classes e Interfaces@regismelo                        164
Objects and Classes                      Objetivos• Conhecer os benefícios do encapsulamento;• Conhecer os valores possíve...
Objects and Classes                       Objetivos• Identificar arquivos fonte corretamente construídos,  declarações de ...
Objects and Classes             Conceitos Gerais de O.O.  • Objetos;               • Herança;  • Classes;               • ...
Objects and Classes        Overloading and Overriding• Overload – dois métodos com o  mesmo nome e parâmetros diferentes;•...
Objects and Classes                  Overloading  1. public void aMethod(String s) { }  2. public void aMethod() { }  3. p...
Objects and Classes              Overloading• O compilador decide qual método utilizar  dependendo da ordem dos argumentos...
Objects and Classes               Overriding• Redefinição ou especialização de um  método;• Sobrescrever um método signifi...
Objects and Classes             Overriding@regismelo                                  172
Objects and Classes             Overriding@regismelo                                  173
Objects and Classes                     Overriding• Para que um método seja sobrescrito  corretamente, as seguintes regras...
Objects and Classes              Construtores• Se a classe não tiver nenhum construtor, o  compilador fornece um construto...
Objects and Classes             Construtores@regismelo                                   176
Interfaces• É um tipo de classe que não possui  implementação para os métodos;• O corpo de uma Interface possui somente  u...
Interfaces• A classe que implementa uma interface, é  obrigada a implementar todos os métodos  da mesma.• Existe uma contr...
Interfacespublic interface Pilha {  public push(Object ob);  public Object pop();}public class PilhaImp implements Pilha {...
Métodos de Interface• Todos os métodos de uma Interface  também são considerados abstract.• Não é necessário especificar;•...
Implementado um Interface• Uma classe que implementa uma Interface deve  declarar todos os métodos da mesma como public.Ex...
Interface estendendo                  uma Interface• Uma interface também possui a  possibilidade de estender de outras  I...
Constantes em Interfaces• Uma interface pode declarar variáveis dentro do  seu corpo;• Todas devem ser públicas, estáticas...
Objects and Classes              Inner Classes• É uma classe declarada dentro de outra  classe(isto é, entre as chaves {} ...
Objects and Classes             Inner Classes Exemplo 1@regismelo                                          185
Objects and Classes             Inner Classes Exemplo 2@regismelo                                         186
Objects and Classes              Inner Classes• Para um exemplo mais completo,  Adicionar ao codigo anterior... @regismelo...
Objects and Classes                 4 Tipos de Inner Classes•    Top-level nested classes•    Non-static inner classes•   ...
Objects and Classes          Top-level nested Classes• Declaradas como classes membro com o  modificador “static”.• Podem ...
Objects and Classes          Top-level nested classes• Classes podem declarar tantos membros  estáticos como não estaticos...
Objects and ClassesExemplo Top-Level Nested Class @regismelo                               191
Para referenciar...• Para referenciar a classe (3) :TopLevelClass.NestedTopLevelClass.NestedTopL  evelInterface• Para refe...
Objects and Classes             Classes geradas...• Quando compilado, o exemplo anterior  gerará as seguintes 4 classes:• ...
Objects and Classes             Exemplo 2@regismelo                                 194
Objects and Classes              Non-Static Inner Classes• Declaradas como classes membro sem o identificador  static.• Um...
Objects and ClassesDefinindo Non-Static Inner Class@regismelo                                 196
Objects and Classes              Classes Locais• São classes que são definidas em um  bloco. Pode ser em um corpo de um  m...
Objects and Classes              Classes Locais(Cont.)• Não podem ter modificadores de acesso.• Podem acessar todas as car...
Objects and Classes              Classe Locais (cont.)• Não podem ser especificadas com o  modificador estático, mas se el...
Objects and Classes   Exemplo Classes Locais (1/2)@regismelo                                  200
Objects and Classes   Exemplo Classes Locais (2/2)@regismelo                                  201
Objects and Classes              Classes Anônimas• Classes Anônimas são definidas onde elas são  construidas. Elas podem s...
Objects and Classes              Classes Anônimas• As mesmas regras de acesso para as  classes locais se aplicam para clas...
Objects and Classes             Classes Anônimas@regismelo                                     204
Objects and Classes        Classes Anônimas (1/2)@regismelo                                   205
Objects and Classes        Classes Anônimas (2/2)@regismelo                                   206
Objects and Classes             Simulado@regismelo                               207
Thread             Threads@regismelo                      208
Thread              O que é um Thread• Thread é uma maneira de Java criar e  executar processos paralelos, sejam eles  con...
Thread     O que entender sobre Thread?•    Quando ela executa.•    Que código é executado.•    Quais estados ela pode est...
Thread              Quando ela executa• A Thread executa quando se chama o  método start().• Ela não executa imediatamente...
Thread        Que código é executado• Todo o código contido no método run().//Imprime os número de 0 a 9 na tela.public vo...
ThreadDe onde vem o método run()?• Você pode estender a classe Thread.    public class MyThread extends Thread {      publ...
Thread    Como executar uma Thread que       implementa Runnable? Passar a instância de um objeto que implementa Runnable ...
Thread Quando um Thread termina?• No momento que termina o seu método  run().• O seu estado muda para DEAD.• Não pode mais...
Thread         Estados de uma Thread• Ready-to-Run• Running• Estados de espera:    Sleeping, suspended, blocked e  waiting...
Thread              Ready-to-Run• Quando o método start() é chamado, a  Thread não é posta imediatamente para  executar. E...
Thread              Running• No momento em que a Thread está sendo  executada. @regismelo                             218
Thread               Sleeping• Uma Thread é considerada no estado  sleeping, quando é chamado o método  sleep() da classe ...
Thread               Blocked• Quando a Thread não consegue adquirir a  posse do monitor de um objeto. @regismelo          ...
Thread                Waiting• Uma Thread é considerada no estado  waiting, quando é feita a chamada do  método wait() par...
Thread        Seqüência dos Estados@regismelo                         222
Thread                   Prioridades• Threads tem prioridades que vão de 1 a  10.• Se várias Threads estão esperando para ...
Thread               Método yield()• A Thread em execução move-se do estado running  para o ready-to-run, dando a vez da e...
Thread              Cenários do yield()• 1. Vai para o estado de ready-to-run, e fica esperando  execução como outra Threa...
Thread                Método sleep()• Faz com que a Thread vá para o estado de  sleeping por um determinado tempo.• Método...
Thread              Implementação de               Escalonamento• Existem duas maneiras que fazem com  que uma Thread pare...
Thread      Escalonamento depende da             plataforma• A forma de escalonamento das Threads  depende da plataforma. ...
Thread              Todo objeto possui um                     monitor• O que o monitor proporciona?   1. Uma trava (lock) ...
Thread              Sincronização• A sincronização serve para garantir que  somente um processo acesse uma  determinada po...
Thread              Keyword synchonized• Serve para criar dentro de um objeto uma região  sincronizada.• Para uma Thread a...
Thread              Keyword synchonized• Existem duas maneira de marcar um  código como sincronizado.  1. Sincronização de...
Thread              Keyword synchonized2. Ou um trecho do código.       StringBuffer message = new StringBuffer(“Java”);  ...
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Java cert programmer
Próximos SlideShares
Carregando em…5
×

Java cert programmer

1.286 visualizações

Publicada em

Curso de Certificação Programmer para Plataforma Java

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.286
No SlideShare
0
A partir de incorporações
0
Número de incorporações
6
Ações
Compartilhamentos
0
Downloads
27
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Comentar a importância de conhecer todas as palavras reservadas do Java Alertar para o fato que goto e const são palavras reservadas mas não são utilizadas na linguagem. Dúvida comum - O keyword strictfp serve para fazer com que operações de ponto flutuante se comportem como a especificação anterior ao Java 2. A nova forma de cálculo obedece o padrão IEEE 754
  • É um erro comum pensar que uma variável não pode começar com $ Alertar para o fato de que começar com um número é ilegal
  • Alertar para o fato que String não é um tipo primitivo.
  • A observação que em Java valores booleanos só podem assumir true e false deve-se ao fato de que em C uma operação do tipo: bool b; b = 1; b = 2; b = 3; É válida e assume TRUE (1).
  • Diferente de C/C++ o programador Java não pode dizer que um determinado tipo é unsigned (uint por exemplo).
  • Os caracters unicode sempre são representado em hexa.
  • É importante mencionar que as contantes estão presentes na classe wraper Float e Double. Mencionar que todos os tipos numéricos em Java são signed
  • O resultado da última expressão é 2SoftSite Tecnologia
  • Chamar a atenção que os colchetes poderão vir antes ou depois da variável
  • Mencionar que ararys são estáticos mas podem ser utilizadas variáveis em tempo de execução para determinar seu tamanho.
  • Mencionar que o nome do argumento pode ser qualquer nome que atenda as convenções do Java.
  • Mencionar que member variables são variáveis que tem o escopo definido pela vida do objeto Automatic variable são variáveis locais de métodos
  • Mencionar que existe um overhead no fato de todas as variáveis estarem sendo duplicadas na memória para que a passagem por parâmetro aconteça. O valor de I retornado é 0
  • O valor mostrado é 5
  • O método finalize throws Throwable – Caso alguma exceção ocorra, ela simplesmente é ignorada; A limpeza da casa refere-se a fechar arquivos, fechar conexão com o BD, enfim, finalizar a execução de um programa – ela não deve ser feita no finalize por não se pode determinar qdo o garbage collector irá atuar. É + interessante fazer isso no finally de um bloco try. Se o finalize referenciar o objeto o GC não atua.
  • A expressao e&apos; avaliada da esquerda para a direita, entao o seguintes passos sao seguidos:     1 - A expressao a[b] e&apos; avaliada. O interpretador percebe que o elemento que sera&apos; atribuido sera&apos; a[1]    2 - A expressao b e&apos; avaliada, que simplesmente nao faz nada - e&apos; somente uma referencia a uma variavel    3 - O valor zero e&apos; avaliado - tb nao faz nada.    4 - Para associacoes (=) a expressao e&apos; avaliada da direita para a esquerda, de forma que o valor zero e&apos; atribuido a variavel B e depois o valor zero e&apos; atribuido a a[1]
  • O valor de y fica 2 e de k 4
  • valor de z e&apos; -9
  • Na linha 1, se o cast nao estiver presente o compilador gera um erro informando que um double nao pode ser atribuido a um int  . A conversao de um double para um int, obviamente causa uma perda de precisao.
  • A linha 4 daria um erro caso o cast nao fosse realizado Mencionar que o codigo da linha 5 gerara&apos; um erro somente em run-time
  • O valor de b é zero.
  • Os resultados sao:    A = 12345    B = 234567;    C = -5965;    D = 0    e = 12345;    f = 0; Comentar que na linha 7 – (long)a * b/b, somente o A foi explicitamente convertido para long. Os demais tipos foram promovidos.
  • Os resultados sao respectivamente 2, 0, -1 e 1
  •    . Mencionar aqui que uma concatenacao de String com um objeto, implicitamente chama o .metodo toString()    . Mencione tb que o toString() original retorna o nome da classe + @ + ID. Ex: Integer@1cc6dd
  • Todos retornam false
  • Truncate to byte give: -4 Expected result was: 12
  • Mencionar que o operador instanceof pode ser utilizado para testar se trata-se de um array (arrays herdam de object) Curiosidade - Para testar se um elemento e&apos; um array, de qualquer tipo, pode-se utilizar a sintaxe:           myObject.getClass().isArray()
  •      . Mencionar que o metodo equals implementado em object compara apenas a referencia dos objetos. Para que ele funcione a contento o equals devera&apos; ser sobrecarregado      . Mencionar que um erro comum e&apos; fazer o sobrecarregar o metodo equals ao inves de sobrescreve-lo. Normalmente isso acontece pq o usuario define o metodo equals( nomedaclasse o ) ao inves de equals( Object o ).
  • As linhas 1-2 e 3-4 sao correspondentes O exemplo a = b = c = d = 0 funciona, e&apos; avaliado da direita para esquerda e ao final do processamento todas as variaveis assumento o valor zero.
  • Terceiro item: dar uma breve citação informando que esse objetivo está relacionado às restrições de acesso de cada modificador que serão apresentadas mais a frente.
  • 2 item: Ressaltar modificador default.
  • Comentar sobre o erro do exemplo. “ Undefined variable: real ” . O programa não irá compilar pois o acesso à variável real não é possível a partir da sub classe SubComplex devido ao modificador de acesso private.
  • Comentar sobre o armazenamento de classes em um diretório comum, e que quando são compiladas a java runtime enviroment interpreta esse diretório como um pacote.
  • Comentar para o exemplo acima que se a classe DownhillSki mudar de pacote, o método applyWax() na classe Ski deverá ter o modificador de acesso protected para que não haja erros no acesso do método na sub classe.
  • Comentar sobre os acessos legais a métodos overrriden falando sobre o erro de compilação
  • Comentar no exemplo que se um objeto é final , a referencia dele deve permanecer a mesma, mas o valores do estado do objeto podem ser alterados.
  • Comentar que abstract é basicamente o oposto de final, pois os métodos abstratos devem ser implementados pelas subclasses, ou declarados abstratos, afim de que sejam implementados pelas sub classes da sub classe. Após as condições, comentar que em cada caso se refere a uma classe de funcionalidade incompleta e que deve ser provida por uma sub classe.
  • Comentar no exemplo sobre a criação das instancias que resultam na alteração do valor da variável estática. Ressaltar também que variáveis estáticas podem ser acessadas pelo nome da classe
  • Alertar pelo erro de compilação na linha 6 – Static methods can ’ t be overriden.
  • Alerta sobre a quantidade blocos O compilador suporta mais de um, mas nunca há uma boa razão para ter mais de uma vez.
  • Comentar o fato de que a chamada para carregar a biblioteca está em um bloco static para que ao ponto em que a classe for carregada, a biblioteca também será e estará disponível. A chamada a métodos nativos se dá da mesma forma que outros métodos.
  • Comentar que a variável accessCode não será enviada durante a serialização. transient não se aplica a variáveis estáticas já que essas não são serializadas
  • Nesse código o compilador irá gerar um erro - “ Incompatible type for =. ” Comentar que a linha 4 funcionaria se tivesse s = (short)d;
  • Comentar que apesar de um long ser representado usando 32 bits a atribuição dele a um float é permitida e não existe perda de precisão.
  • Comentar que a segunda linha causa um erro pois não se pode atribuir um double a um float. Todos os codigos do exemplo 2 funcionam.
  • Considerando que myVector é um vetor declarado, o método elementAt recebe um int e não um double Comentar que por conta disso o overload de dois métodos, um recebendo int e outro double funciona.
  • A linha no código 5 o compilador faz uma série de conversões para tipos maiores (wider types) – primeiro de short para int, depois de float para double
  • Comentar que particularmente nesse exemplo o cast não é necessário.
  • Esse é um exemplo de narrowing. O valor retornado é 3
  • Um array pode ser atribuído a um object por implicitamente ele herda de object
  • Um array pode ser atribuído a um object por implicitamente ele herda de object
  • Comentar que se usa “ , ” para separar os comandos. A segunda expressão é ilegal pq em Java, pode-se declarar mais de uma variável na mesma linha. Ex: int i,j; Caso se usasse isso na expressão delimitada por “ , ” no for, poderia-se declarar variáveis de tipo diferente – o que seria inválido.
  • Pode-se usar um label antes de um if. Pode-se deixar um label no código, não da erro se não for utilizado. Não se pode usar um label debaixo do outro. Pode-se ter labels com o mesmo nome no código.
  • O break cai fora se utilizado com labels; ex. aborta for com label .
  • O break no exemplo aborta o for e vai para a próxima instrução depois do for.
  • Mencionar que os “ { ” e “ } ” são opcionais nesse exemplo; Falar sobre o else if.
  • Citar que a expressão x deve ser int ou tipos menores (widening conversion) – byte, char, short ou int. Mencionar que qdo não se usa o break, os outros pontos serão executados; Mencionar que case 2: case 3: funcionará caso o valor de x seja 2 ou 3 Cases não podem ser duplicados Default pode estar em qualquer lugar Pode-se usar variáveis, desde que sejam finais. Final a = 1 Case a: OK Case (a +1 ): OK case( 1+1): OK case (int) (1 +1) OK
  • Mencionar que as exceptions devem ser usadas, como o nome mesmo diz, em exceções; O programador programa o fluxo normal do sistema e trata as possíveis exceções que possam acontecer.
  • SpecificException herda de GeneralException; OtherException herda somente de exception; Mencionar que caso o bloco de código seja GeneralException tratado antes de SpecificException gera erro de compilação – bloco inalcancável.
  • Se tiver um try, só com finally, o finally trata o erro. Se tiver um catch retornando um valor, e um finallu tambem retornando um valor, é o valor do finally que é retornado
  • O método da linha 16 é válido por que MalformedURLException e EOFException são subclasse de IOException
  • Se tentar executar start() duas vezes ocorre uma exceção: IllegalThreadStateException
  • A interface Runnable só tem o método run(). A class Thread implementa Runnable.
  • Para pode fazer com que uma thread volte a executar, é preciso criar uma nova instância dela. Usar o metodo clone() em uma thread com estado “ dead ” (ex: execução bem sucedida), funciona! - stop() está deprecated desde jdk 1.2, causava muito deadlock.
  • O estado suspended não é exigido pelo exame. Os método que colocam a thread neste estado não estão deprecated.
  • O estado Suspended não é mais utilizado. O estado do “ wait ” está em “ Monitor States ” .
  • Muitos dos construtores da String podem receber um character encoding, porém o exame de certificação não cobra detalhes de character encodings.
  • Existem mais métodos do que listados aqui e alguns tem vários overloads, na lista estão todos, apenas os necessários para se fazer o exame. Se o metodo UpperCase() for aplicado a uma String que já se encontra toda em Maiuscula, ele retorna O MESMO OBJETO. O mesmo acontece com o metodo LowerCase().
  • É possivel que esses comportamentos se combinem definindo outras coleções, porém o exame de certificação requere apenas entendimento dos quatro fundamentais tipos coleções.
  • UnsupportedOperationException é lançada caso se tentar executar um método não implementado.
  • U
  • No segundo método, se o array for grande demais, os elementos serão preenchidos com null. Se o array não for grande o suficiente outro array com um tamanho maior é criado em tempo de execução.
  • O método sort classifica de acordo com a ordem natural .
  • Uma
  • Assertions podem ser usados para garantir pré-condições se e somente se o método não é público. Assertions são sempre bons para pós-condições. Invariantes são condições que devem ser sempre verdadeiras.
  • expressao_2 pode ser qualquer tipo suportado pelos construtores da classe AssertionError, que são: object, boolean, char, int, long, float, double.
  • expressao_2 pode ser qualquer tipo suportado pelos construtores da classe AssertionError, que são: object, boolean, char, int, long, float, double.
  • Na opção java –source 1.4, assertion é uma nova keyword.
  • Assertions são desabilitados por default. Pode-se usar combinações desses símbolos. Por exemplo, habilitar as assertions num pacote e desabilitar para uma classe em particular(java –da:pacoteX –ea:classeX).
  • Os métodos pertencem à classe ClassLoader. className – nome da classe que o comando afetará. enabled - indica se a assertion será ou não aplicada.
  • packageName – nome do pacote que o comando afetará. enabled - indica se a assertion será ou não aplicada. Lembre-se de setar esses flags antes de carregar as classes que você quer que sejam afetadas. Remover assertions é fortemente desencorajado, a não ser que se tenha uma boa razão.
  • packageName – nome do pacote que o comando afetará. enabled - indica se a assertion será ou não aplicada. Lembre-se de setar esses flags antes de carregar as classes que você quer que sejam afetadas. Remover assertions é fortemente desencorajado, a não ser que se tenha uma boa razão.
  • Java cert programmer

    1. 1. SUN Certified Java Programmer @regismelo@regismelo 1
    2. 2. MissãoApresentar os tópicos da certificação SUNCertified Programmer for Java 2 Platform @regismelo 2
    3. 3. Metodologias• Exposição e discussão teóricas;• Simulados de cada assunto;• Simulado geral. @regismelo 3
    4. 4. O que esse curso não cobre ou não é?Não Cobre:• Conceitos gerais de programação – Esse não é um curso para quem nunca programou antes;• Conceitos gerais de orientação a objeto;• UML;Não é:• Um curso para aprender Java. @regismelo 4
    5. 5. O quão preparado está você?Antes de fazer esse curso, você deverá ter feito SSJ01 – Introdução a Java e Web SSM01 – Introdução a UML Ter conhecimentos de inglês técnicoOu… Ter trabalho com Java na plataforma J2SE; Conhecimentos básicos de O.O.; Conhecimentos de inglês técnico @regismelo 5
    6. 6. O que é a certificação SCJP?• Certificar conhecimentos necessários para o desenvolvimento de aplicações usando J2SE – Java 2 Standard Edition;• “Primeira” prova de certificação SUN Java. @regismelo 6
    7. 7. Livro adotado@regismelo 7
    8. 8. Referência@regismelo 8
    9. 9. Outras certificações@regismelo 9
    10. 10. “Se você for incapaz de pensar diferente, o futuro sempre chegará com surpresa”@regismelo 10
    11. 11. Language Fundamentals@regismelo 11
    12. 12. Language Fundamentals Objetivos• Identificar corretamente a estrutura de um programa Java, declaração de pacotes, import statements, declaração de classes (incluindo inner classes), declaração de interfaces e implements (para as interfaces definidas na prova), declaração de métodos (incluindo o método main), declaração de variáveis e identificadores; @regismelo 12
    13. 13. Language Fundamentals Objetivos• Conhecer todas as palavras chave de Java e seus identificadores;• Conhecer a faixa de todos os tipos primitivos, declarar valores literal para Strings e todos os tipos primitivos usando todos os formatos, bases e representações;• Escrever código que declare, construa e inicialize arrays de qualquer tipo usando qualquer uma das formas permitidas;• Conhecer como um programa se comporta quando se usa uma variável ou array não inicializados; @regismelo 13
    14. 14. Language Fundamentals Objetivos• Conhecer a correspondência entre os argumentos passados na linha de comando e o método main;• Determinar a forma pela qual objeto e tipos primitivos são passados como parâmetro e modificados;• Entender como o processo de Garbage Collection funciona. @regismelo 14
    15. 15. Language Fundamentals Arquivos fonte• Todos os arquivos fonte em java terminam com a extensão “.java”;• Um arquivo fonte deverá conter no máximo uma declaração pública (public class...);• Se uma declaração de classe pública estiver presente, o nome do arquivo fonte deverá ser igual ao nome dessa classe (obedecendo sensitive case);• Um arquivo fonte poderá conter um número ilimitado de declarações não públicas; @regismelo 15
    16. 16. Language Fundamentals Arquivos fonte• Existem 3 elementos “top-level” que poderão estar presentes em um arquivo. Nenhum deles é requerido, porém, devem obedecer uma ordem: – Package; – Import; – Class. @regismelo 16
    17. 17. Language Fundamentals Arquivos fonte - Package• Formato da declaração de um package package <nome do pacote>;• Arquivos definidos em packages devem estar gravados em diretórios com o mesmo nome do pacote package br.com.softsite.sfc public class Teste * O arquivo Teste.java deve estar no diretório /br/com/softsite/sfc @regismelo 17
    18. 18. Language Fundamentals Arquivos fonte - Import• Formato da declaração de Imports import <pacote.*>; Import <pacote.classe>;• O import, ao contrário do #include do C/C++, não inclui o conteúdo das classes importadas na classe. Portanto o import é usado apenas como um mecanismo para sinalizar ao compilador onde encontrar as classes – importar um pacote não compromete performance! @regismelo 18
    19. 19. Language Fundamentals Arquivos fonte - Import• Cuidado! – Algumas vezes você pode ter duas classes em pacotes diferentes com o mesmo nome. Um exemplo disso é a classe Date, que está presente em java.util e java.sql. Se você importa os dois pacotes e tenta usar a classe Date o compilador gera um erro. – Importar java.util.* não é o mesmo que importar java.*. @regismelo 19
    20. 20. Language Fundamentals Arquivos fonte// Declaração do pacote2. package br.com.softsite.sfc;3.4. // Imports5. import java.awt.Button; // importa uma classe específica6. import java.util.*; // importa um pacote7.8. // Definicao da classe9. public class Test {...} @regismelo 20
    21. 21. Language Fundamentals Keywords• A linguagem Java possui 52 palavras chave/reservadas: assert @regismelo 21
    22. 22. Language Fundamentals Identifier• Identifier são palavras utilizadas pelo programador para nomear variáveis, métodos, classes ou rótulos (label);• Keywords e palavras reservadas não podem ser utilizadas;• Devem começar por uma letra, um $ ou um undescore (_). Os caracteres subseqüentes podem ser letras, $, undescores ou dígitos;• Exemplos: String fooBar; // Ok! int BIGinterface; // Ok! Keyword + outra palavra float $teste; // Ok! 3_node5 // Erro! !teste // Erro! @regismelo 22
    23. 23. Language Fundamentals Tipos Primitivos• Os tipos primitivos em Java, são: boolean char byte short int long float double @regismelo 23
    24. 24. Language Fundamentals Tipos Primitivos• Tipos primitivos e seus tamanhos * Em java, booleanos só podem receber valores true e false. @regismelo 24
    25. 25. Language Fundamentals Tipos Primitivos• Faixas dos inteiros primitivos * Em java, não existe o modificador “unsigned” @regismelo 25
    26. 26. Language Fundamentals Tipos Primitivos• O char é um inteiro porém sem sinal. Sua faixa varia de 0 a 216-1;• Os caracteres em Java são unicode (ocupam 16 bits);• Se o nove mais significantes bits de um char são zero, então o caractere corresponde a tabela ASCII;• Exemplo: char a = ‘a’; char b; char c = ‘u4567; char d = ‘abc’; // Erro! @regismelo 26
    27. 27. Language Fundamentals Tipos Primitivos• Os tipos primitivos com suporte a ponto flutuante são: – float – double• Operações com pontos flutuante podem gerar resultados que não podem ser expressados com números (infinito, por exemplo), para isso existem as constantes: – Float.NaN // NaN = Not a Number – Float.NEGATIVE_INFINITY – Float.POSITIVE_INFINITY – Double.NaN – Double.NEGATIVE_INFINITY – Double.POSITIVE_INFINITY @regismelo 27
    28. 28. Language Fundamentals Literals• Um literal é um valor especificado no fonte do programa, ao invés de determinado em runtime;• Boolean literals – true – false• char literals – Sempre se utiliza aspas simples para denotá-los – Ex: ‘R’ ou ‘u4567’ @regismelo 28
    29. 29. Language Fundamentals Literals• ...char literals – Escape characters ‘n’ – Nova linha ‘r’ – Retorno ‘t’ – Tab ‘b’ – Backspace ‘f’ – form feed ‘’’ – Aspas simples ‘”’ – Aspas duplas ‘’ – Representa a @regismelo 29
    30. 30. Language Fundamentals Literals• Integral Literals – Podem ser representados na notação decimal, octal e hexadecimal. – O default é decimal. Ex: int i = -215; // Literal inteiro int max = 0x7fffffff; // 2147483647 em Hexadecimal int oct = 05402202647; // Representação octal – Por padrão os literais inteiros ocupam 32 bits (int). Para representar um long pode-se usar L após o número. @regismelo 30
    31. 31. Language Fundamentals Literals• Floating-Point Literals – Para ser reconhecida como ponto flutuante a literal deverá ter um dos seguintes formatos: • Um ponto decimal: 1.414 • A letra E, indicando notação científica 4.23E+21 • A letra F ou f indicando que é um float: 5.12f • O sufixo D indicando que é double: 5.12d (o default) @regismelo 31
    32. 32. Language Fundamentals Literals• String Literals – Seqüência de caracteres delimitados por “” • String S0 = “Sagarana Tecnologia”; • String S1 = “Sagarana Tecnologia” + 1; • String S2 = 1 + “Sagarana Tecnologia”; • String S3 = 1 + 1 + “Sagarana Tecnologia”; @regismelo 32
    33. 33. Language Fundamentals Arrays• Coleção de tipos primitivos, objetos ou outros arrays• Para criar um array você tem que seguir os seguintes passos: – Declarar; – Construir; – Inicializar. @regismelo 33
    34. 34. Language Fundamentals Arrays• Declarando: 1. int[] ints; 2. double[] dubs; 3. Dimension dims []; 4. float[][] twoDee; @regismelo 34
    35. 35. Language Fundamentals Arrays• Outro exemplo: 1. int[] ints; // Declaração 2. ints = new int[25]; // Contrução em run-time 3. int size = 1152 * 900; 4. int[] ints = new int[size]; @regismelo 35
    36. 36. Language Fundamentals Arrays• Quanto um array é declarado os seus elementos são automaticamente inicializados: @regismelo 36
    37. 37. Language Fundamentals Arrays• Declarando e inicializando: 2. float[] diameters = {1.1f, 2.2f, 3.3f, 4.4f, 5.5f}; 3. char letra = new char[] { ‘a’, ‘b’ }; 4. int matriz[][] = new int[3][3]; 5. int [][]matriz2 = new int[3][];• Importante: Os arrays sempre começam do índice zero! @regismelo 37
    38. 38. Language Fundamentals Class Fundamentals• O método main() é por onde uma aplicação inicia;• A assinatura do método é: public static void main( String args[] )• O argumento passado corresponde aos argumentos da linha de comando; % java Classe1 Sagarana Tecnologia // args[0] = Sagarana e args[1] = Tecnologia @regismelo 38
    39. 39. Language Fundamentals Variáveis e inicialização• Java suporta dois tipos de variáveis: – Member/instance variable – Automatic variable• As variáveis membro são inicializadas automaticamente• As variáveis “automatic” ou locais devem ser inicializadas manualmente antes de serem utilizadas. @regismelo 39
    40. 40. Language Fundamentals Passagem de argumentos• Quando Java passa um argumento para um método ele está sempre passando uma cópia da variável passada; class foo { public void bar( int k ) { ++k; } public static void main( String args[] ) { int i = 0; bar(i); System.out.println(i); } } @regismelo 40
    41. 41. Language Fundamentals Passagem de argumentos• Deve-se tomar cuidado quando se passa objetos como parâmetro – uma cópia do endereço é passada como parâmetro!import java.math.*; class Barpublic class foo {{ public static void bar( Bar k ) { k.setValor(5); } private int valor; public void setValor( int k ) public static void main( String args[] ) { valor = k; } { public String toString() { Bar i = new Bar(); return ( valor + "" ); i.setValor(10); } bar(i); } System.out.println(i); }} @regismelo 41
    42. 42. Language Fundamentals Garbage Collection• Processo de “limpeza” de instâncias não mais referenciadas no programa;• Em Java você não nunca explicitamente libera a memória que você alocou;...public void goodMethod() { Funcionario f = new Funcionario(); f.aumentarSalario();} @regismelo 42
    43. 43. Language Fundamentals Garbage Collection• O Garbage Collector ajuda no processo de limpeza de memória, mas você não está livre dos “memory leaks”... public Object pop()public Object pop() {{ Object o = storage[ index ]; return storage[ index--]; storage[index--] = null; return o;} } @regismelo 43
    44. 44. Language Fundamentals Garbage Collection• O método finalize protected void finalize() throws Throwable• Chamado antes que o garbage collector libere a memória relativa ao objeto;• É uma má prática fazer a “limpeza da casa” nesse método;• System.gc() – força uma chamada ao garbage collector. @regismelo 44
    45. 45. Inicializadores• Expressão de inicialização de variáveis; – Utilizado para atribuir uma valor a variável no momento da criação;• Inicializadores estáticos; – Bloco utilizado para declarações que envolvam entidades estáticas (variáveis/métodos);• Inicializadores de instância; – Bloco utilizado para declarações que envolvam entidades de instância (variáveis/métodos); @regismelo 45
    46. 46. Inicialização de Variáveis• São inicializadas na ordem que foram criadas;• Variáveis estáticas não podem referenciar variáveis de instância;Ex: public class Inicializacao { int diasMes = 30; int diasAnos = diasMes * qtdeMes; //erro, variável não definida! int qtdeMes = 12; } @regismelo 46
    47. 47. Inicialização de Variáveis• Se um método utilizar uma variável que ainda não foi inicializada, ocorrerá um erro de lógica; Ex: public class Inicializacao { int diasMes = 30; int diasAnos = diasMes * getDiasMes(); //erro de lógica! int qtdeMes = 12; public int getDiasMes() { return qtdeMes; } } @regismelo 47
    48. 48. Inicializadores Estáticos• Java permite a criação de um bloco onde pode ser colocado códigos estáticos arbitrários;• É executado somente uma vez, quando a classe é carregada; Ex: public class StaticInitializer { static { //qualquer código } } @regismelo 48
    49. 49. Inicializadores Estáticos• Uma classe pode possuir mais de um bloco estático;• Eles são executados não ordem em que foram criados;Ex: public class StaticInitializer { static int i, x; static { i++; } static { x = i; } } @regismelo 49
    50. 50. Inicializadores Estáticos• Um bloco estático não pode lançar nenhuma Checked Exception;• Todas as possíveis exceções devem ser tratadas; Ex: public class StaticInitializer { public static void initFile(String file) throws IOException { ... } public static void initDirectory(String file) throws RuntimeException { ... } static { initFile(“arquivo.txt”); //erro! Checked Exception } static { initDirectory(“arquivos”); //OK! Unchecked Exception } } @regismelo 50
    51. 51. Inicializadores de Instância• Permite a execução de códigos de instância e estáticos arbitrários;• Tem o mesmo propósito dos construtores;• É executado toda vez que um objeto é criado;• Pode ser usado para conter um trecho de código comum a todos os construtores; @regismelo 51
    52. 52. Inicializadores de Instância• Assim como os blocos estáticos, podem existir dentro da mesma classe, mais de um bloco de instância;• Também são executados na ordem em foram declarados;• Um bloco de instância não pode fazer referência a uma variável que está declarada depois dele; @regismelo 52
    53. 53. Inicializadores de InstânciaEx: public class InstanceInitializer { { i++; //erro! Variável não declarada; } int i = 0; { for (; i < 10; i++) { System.out.println(i); } }} @regismelo 53
    54. 54. Inicializadores de Instância• Um bloco de instância pode repassar qualquer tipo de exceções;• Se alguma exceção for repassada, é obrigatório que o construtor contenha a cláusula throws, indicando qual o tipo da exceção; @regismelo 54
    55. 55. Inicializadores de InstânciaEx: public class InstanceInitializer { public void initFile(String file) throws IOException { ... } { initFile(“arquivo.txt”); } public InstanceInitializer() throws IOException { ... } public InstanceInitializer(int i) //erro! Lança o que? { ... } } @regismelo 55
    56. 56. Ordem de Inicialização• A inicialização se dá quando o operador new é chamado;• As variáveis de instância são inicializadas com os seus valores padrões; – Ex: int x; //x recebe o valor 0; boolean val; //recebe false;• O construtor da classe pai é executado; @regismelo 56
    57. 57. Ordem de Inicialização• Os inicializadores de variáveis e os blocos de instância são executados na ordem em que foram declarados; – Ex: int i = 20; int x = i * 10;• Logo após o construtor da classe; – Ocorrendo o encadeamento de construtores, o último será executado primeiro; @regismelo 57
    58. 58. Ordem de Inicializaçãopublic class Order { int i = 10; //Segundo a ser executado; int x; { for (;x<10;x++) {...} //Terceiro a ser executado; } public Order() { this(50); System.out.println(x); //Quinto a ser executado; } public Order(int val) { super(); //Primeiro a ser executado; x = val; //Quarto a ser executado; }} @regismelo 58
    59. 59. Language Fundamentals Simulado@regismelo 59
    60. 60. Operators and Assignments@regismelo 60
    61. 61. Operators and Assignments Objetivos• Determinar o resultado da operação de qualquer operador, incluindo operadores de atribuição, instanceof, escopo e acessibilidade;• Determinar o resultado da operação do método equals e diferenciar do operador =;• Entender os operadores &,/, &&, //; @regismelo 61
    62. 62. Operators and Assignments@regismelo 62
    63. 63. Operators and Assignments Ordem de avaliação• A expressão sempre é avaliada da esquerda para a direita;• O que a expressão abaixo faz? 1. int[] a = { 4, 5 }; 2. int b = 1; 3. a[b] = b = 0; @regismelo 63
    64. 64. Operators and Assignments Unary Operators• Java provê 7 operadores unários - Incremento e decremento: ++ e -- - Soma e subtração: + e - - Operador de bits: ~ - Operador boolean: ! - Cast: ( ) @regismelo 64
    65. 65. Operators and Assignments Unary Operators• Incremento e decremento ( ++ -- ) - A ordem importa! 1. int x = 0; 2. x++; 3. ++x; 4. int y = x++; 5. int k = ++x; @regismelo 65
    66. 66. Operators and Assignments Unary Operators• Incremento e decremento ( ++ -- ) @regismelo 66
    67. 67. Operators and Assignments Unary Operators• Operador unário + e – 1. x = -3; 2. y = +3; 3. z = -(y + 6); @regismelo 67
    68. 68. Operators and Assignments Unary OperatorsOperador de bit (~)• O operador de bit ~ inverte os bits de um tipo primitivo;• A manipulação de bits em java é completamente independente de plataforma;• ~ é frequentemente utilizado em conjunto com os operadores shift ( <<, >> e >>>)• ~1 ( 1 ) = -2 (111111111111111111111111111111110) @regismelo 68
    69. 69. Operators and Assignments Unary OperatorsOperador boolean (!)• Esse operador inverte o valor de uma expressão booleana;• Só pode ser aplicada a expressões booleanas if (! false ) { ... } @regismelo 69
    70. 70. Operators and Assignments Unary OperatorsOperador cast (tipo)• Utilizado para conversões explícitas;• Só é possível fazer conversões para tipos plausíveis int i = (int)(Math.PI * diameter); @regismelo 70
    71. 71. Operators and Assignments Unary OperatorsOperador cast (tipo)• Muito utilizado quando se usa containeres como as classes Vector e ArrayList (conversão de objetos) 1. ArrayList a = new ArrayList(); 2. v.add( " blabla" ); 3. Object o = v.get(0); 4. String s = (String)v.get(0); 5. Integer i = (Integer)v.get(0); @regismelo 71
    72. 72. Operators and Assignments Arithmetic Operators• Os operadores * e / realizam a multiplicação e divisão de todos os tipos numéricos primitivos e do char;• Divisões podem gerar um ArithmeticException;• Em algumas situações o número gerado pela divisão ou multiplicação não pode ser representado pelo tipo primitivo. Nesse caso, somente os bits mais significativos são apresentados. @regismelo 72
    73. 73. Operators and Assignments Arithmetic Operatorspublic static void main( String args[] ) { int i = 64 * 4; // Retorna 256 = 100000000 byte b = (byte) (64*4); System.out.println( i ); System.out.println( b );} @regismelo 73
    74. 74. Operators and Assignments Arithmetic Operators• Que valores são retornados pelo exemplo abaixo? 1. int a = 12345; 2. int b = 234567; 3. int c,d; 4. long e,f; 5. c = a * b / b; 6. d = a / b * b; 7. e = (long)a * b /b; 8. f = (long)a / b * b; @regismelo 74
    75. 75. Operators and Assignments Arithmetic Operators• O operador % retorna o resto da divisão 1. 17 % 5 2. 21 % 7 3. -5 % 2 4. 5 % -2• Por envolver uma divisão, o módulo pode causar uma ArithmeticException. @regismelo 75
    76. 76. Operators and Assignments Arithmetic Operators• Soma (+) e Subtração (-) - Java não permite que os operadores sejam sobrecarregados; - Porém o operador + é sobrecarregado por natureza; - Bastante utilizado para concatenação de Strings. Pode envolver conversos de tipo. String a = " BlaBla foi fundada em " + 199 + ( new Integer(6) ); @regismelo 76
    77. 77. Operators and Assignments Arithmetic Operators• Em uma operação usando + com dois tipos primitivos, podemos afirmar que o resultado é : – Um tipo numérico primitivo; – É pelo menos um inteiro; – É pelo menos do tamanho do maior operando; – Teve o valor calculado realizando a promoção dos tipos dos operandos para o resultado. Isso pode causar overflow ou perda de precisão. @regismelo 77
    78. 78. Operators and Assignments Arithmetic Operators• Para uma operação usando + com qualquer operando que não é um tipo primitivo: – Pelo menos um operando deverá ser do tipo String (objeto ou literal), do contrário a operação causará erro; – Qualquer operando não String é convertido para String usando o metodo toString() disponível na classe object. @regismelo 78
    79. 79. Operators and Assignments Arithmetic Error Conditions• Divisões inteira por zero (incluindo o operador %), podem causar uma ArithmeticException;• Operações que causam overflow simplesmene truncam a informação gerada;• Operações de ponto flutuante que resultam em valores não representáveis são simbolizados com as constantes INFINITY, MINUS_INFINITY e NaN (not a number) das classes Float e Double. @regismelo 79
    80. 80. Operators and Assignments Comparação com NaN• Tudo que é comparado com a constante NaN resulta em false: 1. x > Float.NaN; 2. x <= Float.NaN; 3. x == Float.NaN; 4. x < Float.NaN; 5. x >= Float.NaN.• Existem os métodos isNaN das classes Float e Double que podem sinalizar que o valor retornado foi um NaN. @regismelo 80
    81. 81. Operators and Assignments Os operadores Shift <<, >> e >>>• << faz um shift left de n bits;• >> faz um shift rigth de n bits preenchendo-os com o mesmo valor do bit mais significativo;• >>> faz um shift rigth preenchendo os bits com zero @regismelo 81
    82. 82. Operators and Assignments Os operadores Shift <<, >> e >>>@regismelo 82
    83. 83. Operators and Assignments Os operadores Shift <<, >> e >>>@regismelo 83
    84. 84. Operators and Assignments Os operadores Shift <<, >> e >>>@regismelo 84
    85. 85. Operators and Assignments Os operadores Shift <<, >> e >>>@regismelo 85
    86. 86. Operators and Assignments Arithmetic promotion of operands• Todos os operandos em uma operação binária são promovidos para pelo menos um int;• Isso pode causar alguns problemas quando esse tipo de operação é efetuada utilizando operadores do tipo byte. @regismelo 86
    87. 87. Operators and Assignments Operadores de comparação• Os operadores de comparação são <, <=, >, >=, == e !=• Os operadores de comparação <, <=, > e >= aplicam-se a todos os tipo numéricos incluindo o char.• A comparação de dois valores de tipos diferentes faz com que aconteça uma promoção automática para o maior tipo.@regismelo 87
    88. 88. Operators and Assignments O operador instanceof• Testa a classe a qual um objeto pertence em runtime;• exemplo: 1. Cliente c = new Cliente(); 2. Object o = c; 3. if ( o instanceof Cliente ) { ... } 4. int[] k; 5. if ( k instanceof int[] ) { ... } @regismelo 88
    89. 89. Operators and Assignments Operadores de igualdade == e !=• Testam a igualdade entre operandos;• A igualdade está sujeita as regras para promoção de variáveis: float f = 10; int k = 10; boolean b = ( f == k );• Quando se compara objetos, se está comparando a referência ao objeto e não o seu valor (para se comparar se dois objetos são iguais deve-se usar o método equals() )@regismelo 89
    90. 90. Operators and Assignments Operadores de bit - &, ^ e |• & = and, ^ = XOR e | = OR@regismelo 90
    91. 91. Operators and Assignments Operadores de bit - &, ^ e /• & = and, ^ = XOR e | = OR@regismelo 91
    92. 92. Operators and Assignments Operadores de bit - &, ^ e |• & = and, ^ = XOR e | = OR@regismelo 92
    93. 93. Operators and Assignments Operadores ternário• Operador ternário possui a seguinte sintaxe: a = x ? b : c;• Uma boa prática de programação é não exagerar no seu uso. a = x ? b : c ? d : e ? f : g; @regismelo 93
    94. 94. Operators and Assignments Assignment Operators• =, +=, -=, *=, /=• Castings são feitos automaticamente: 1. byte x = 2; 2. x += 3; 3. byte y = 2; 4. y = (byte)(y + 3)• Outro exemplo: int a,b,c,d; a = b = c = d = 0;@regismelo 94
    95. 95. Operators and Assignments Simulado@regismelo 95
    96. 96. Modifiers@regismelo 96
    97. 97. Modifiers Objetivos• Declarar corretamente inner classes, métodos, variáveis estáticas (static) e de instância fazendo uso de todos os modificadores permitidos.• Definir o significado de cada modificador, tanto em uso singular como em conjunto com outros modificadores.• Identificar se a construção de arquivos, declarações de pacotes, imports, classes, interfaces, inner classes, métodos e variáveis estão corretas. @regismelo 97
    98. 98. Modifiers O que são modificadores?• São as keywords em Java que dão informação ao compilador a respeito da natureza do código, dos dados ou das classes.• Especificam características de métodos, classes e variáveis. Um exemplo dessas características é o tipo de acesso que lhes são permitidos. @regismelo 98
    99. 99. Modifiers Modificadores• Em Java existem modificadores relacionados ao acesso de métodos, classes e variáveis. public protected private• Outros modificadores: final abstract static native transient synchronized volatile @regismelo 99
    100. 100. Modifiers Modificadores de Acesso• Modificadores de acesso especificam quais classes podem acessar: – Outras classes – Variáveis de classes – Métodos e construtores• Variáveis declaradas dentro de métodos não devem conter modificadores de acesso em suas declarações. @regismelo 100
    101. 101. Modifiers Modificadores de Acesso - Restrições• O único modificador de acesso permitido a non-inner class é public. Não há nada como protected ou private top-level class.• Variáveis de classes, classes, métodos e construtores devem possuir especificado um modificador de acesso.• Exemplos: – private int i; – Graphics offScreenGC; – protected double getChiSquared() { ... } @regismelo 101
    102. 102. Modifiers Modificadores de Acesso - public• O modificador public é o mais “generoso”. Especifica que uma classe, variável ou método pode ser usado por qualquer programa Java sem restrições.• Exemplo: – Um applet é declarado como público para que possa ser instanciado por qualquer browser. – Uma aplicação declara o método main() como público para ser invocado de qualquer Java runtime environment. @regismelo 102
    103. 103. Modifiers Modificadores de Acesso - private• Diferente do modificador public, private é o menos “generoso”. Variáveis e métodos private só podem ser acessados por uma instancia da classe que os declara.• Exemplo: 1. class Complex { 2. private double real; 3. } 4. 5. class SubComplex extends Complex { 6. SubComplex(double r, double i) { 7. real = r; // Trouble!!! 8. } 9. } @regismelo 103
    104. 104. Modifiers Modificadores de Acesso - default• default não é um modificador em Java, é somente o nível de acesso especificado quando não é declarado nenhum modificador de acesso.• Esse tipo de acesso especifica que uma classe, método ou variável pode ser acessada por classes que estão contidas em seu mesmo pacote.• Acessos default são mais utilizados quando se desenvolvem classes que estão em um mesmo diretório, ou seja, formam um pacote e o desenvolvimento de classes nesse pacote se torna bem mais rápido, pois não há preocupação de tratar restrições de acesso às classes que formam o pacote. @regismelo 104
    105. 105. Modifiers Modificadores de Acesso - protected• Esse tipo de acesso é um pouco menos restritivo do que o acesso default. Permite que métodos e variáveis de classes sejam acessados por outras classes do mesmo pacote e por suas sub classes.• Exemplo: 1. package sport; 1. package sportinggoods; 2. public class Ski { 2. class DownhillSki extends Ski{ 3. protected void applyWax() 3. void tuneup(){ 4. { ... } 4. applyWax(); 5. } 5. ... 6. } 7. } @regismelo 105
    106. 106. Modifiers Privacidade de Métodos e Classes• A figura abaixo mostra os acessos legais para override de métodos: Private Default Protected Public• Caso a escala não seja seguida ocorrerá um erro de compilação com a seguinte mensagem : “Methods can’t be overriden to be more private” @regismelo 106
    107. 107. Modifiers Outros Modificadores - final• É aplicado a classes, métodos e variáveis com a idéia de: – Não podem ser alterados!!• Uma classe final não deve possuir subclasses.• Um método final não pode ser overriden.• Uma variável não pode ter seu valor modificado após ser inicializada.• Exemplo: 1. class Walrus{ 7. class Tester{ 2. int weight; 8. final Walrus w1 = new Walrus(1500); 3. Walrus(int w){ 9. void test(){ 4. Weight = w; 10. w1 = new Walrus(1400); //erro! 5. } 11. w1.weight = 1800; //certo! 6. } 12. } 13. } @regismelo 107
    108. 108. Modifiers Outros Modificadores - abstract• Pode ser aplicado a métodos e classes.• final x abstract• Uma classe deve ser declarada abstrata se: – Possui um ou mais métodos abstratos. – Quando herda métodos abstratos e não prover implementação a eles. – Quando a classe declara que implementa uma interface e não prover implementação a todos os métodos da interface. @regismelo 108
    109. 109. Modifiers Outros Modificadores - static• Pode ser aplicado a métodos, variáveis e até a trechos de código que estejam fora de um método.• O valor de uma variável static é o mesmo para qualquer instancia criada de uma classe que contenha a variável.• Exemplo: ... Ecstatic e1 = new Ecstatic(); class Ecstatic{ Ecstatic e2 = new Ecstatic(); static int x = 0; int y = e2.x; Ecstatic() { x++; } y = Ecstatic.x; } System.out.println( y ); ... @regismelo 109
    110. 110. Modifiers Outros Modificadores - static• Métodos também podem ser static e seguem as restrições: – Um método static só pode acessar dados static de sua classe. – Um método static só pode fazer chamadas a métodos static de sua classe. – Em métodos static não há a variável implícita this. Deve-se especificar a qual instancia da classe executa o método. – Métodos static não podem ser overriden para serem non-static. (somente shadowing) Exemplo: 1. class Cattle{ 2. static void foo(){} 3. } 4. 5. class Sheep extends Cattle{ 6. void foo(){} //erro! 7. } @regismelo 110
    111. 111. Modifiers Outros Modificadores - static• Static Initializers• É legal pra uma classe possuir um bloco que execute o código static que não está no corpo de um método da classe.• O código é executado uma única vez quando a classe é carregada.• Exemplo: 1. public class StaticExample{ 2. static double d = 1.23; 3. 4. static{ 5. System.out.println(“main : d = ” + d++); 6. } 7. 8. public static void main(String args[]){ 9. System.out.println(“main : d = ” + d++); 10. } 11. } @regismelo 111
    112. 112. Modifiers Outros Modificadores - native• Se aplica somente a métodos.• Identifica que um método, escrito em uma linguagem diferente de Java, está em uma biblioteca situada fora da JVM.• Exemplo: class NativeExample{ native void doSomethingLocal(int i); static{ System.loadLibrary(“MyNativeLib”); } } @regismelo 112
    113. 113. Modifiers Outros Modificadores - transient• Esse modificador se aplica somente a variáveis.• Objetos que implementam as interfaces Serializable e Externalizable podem ser serializados e enviados para um destino fora da JVM.• Através do modificador transient é possível especificar que o valor de uma variável não será escrito durante a serialização, por motivo de segurança.• Exemplo: class WealthyCustomer extends Customer implements Serializable{ private float Swealth; private transient String accessCode; } @regismelo 113
    114. 114. Modifiers Outros Modificadores• synchronized – Esse modificador é utilizado para controlar acesso a áreas críticas em programas multi-threaded e será detalhada em aulas posteriores quando falarmos sobre threads.• volatile – Se aplica somente a variáveis e proverá a atomicidade de seus valores. – Exemplo: em um programa muti-threaded, se duas threads acessam a mesma variável e alteram seu valor, a atomicidade da variável será garantida. @regismelo 114
    115. 115. Modifiers Simulado@regismelo 115
    116. 116. Converting and Casting@regismelo 116
    117. 117. Converting and Casting Objetivos• Determinar o resultado do uso de qualquer operador incluindo operadores de associação, instanceof, castings, escopo de classes e acessibilidade. @regismelo 117
    118. 118. Converting and Casting Explicit and Implicit Type Changes• Você pode explicitamente alterar o tipo de uma variável realizando uma operação de casting; Button btn = (Button) (myVector.elementAt(5));• Mudanças implícitas: myVector.add( btn ); @regismelo 118
    119. 119. Converting and Casting Primitives and Conversion• Existem 3 possíveis maneiras para que a conversão de tipos primitivos ocorra: – Atribuições; – Chamada de métodos; – Promoção aritmética. @regismelo 119
    120. 120. Converting and Casting Primitives and Conversion - Assignments• Ocorre quando você atribui um valor a uma variável de um tipo diferente. 1. int i; 2. double d; 3. i = 10; 4. d = i; @regismelo 120
    121. 121. Converting and Casting Primitives and Conversion - Assignments• Algumas conversões implícitas não são permitidas: 1. double d; 2. short s; 3. d = 1.2345; 4. s = d; //erro! 5. s = (short)d; //certo! @regismelo 121
    122. 122. Converting and Casting Primitives and Conversion - AssignmentsA regra geral para conversão implícita de tipos primitivos é: – Um boolean não pode ser convertido para nenhum outro tipo; – Um valor não booleano pode ser convertido para outro valor não booleano – widening – Um valor não booleano não pode ser convertido para um valor não booleano caso a atribuição seja feita de um tipo com maior precisão para um tipo de menor precisão @regismelo 122
    123. 123. Converting and Casting Primitives and Conversion - Assignments“Widening Conversions”• From a byte to a short, an int, a long, a float, or a double• From a short to an int, a long, a float, or a double• From a char to an int, a long, a float, or a double• From an int to a long, a float, or a double• From a long to a float or a double• From a float to a double @regismelo 123
    124. 124. Converting and Casting Primitives and Conversion - Assignments“Widening Conversions” @regismelo 124
    125. 125. Converting and Casting Assignments Conversion, primitive and literal values• Um valor literal em Java é um double ou um int double d = 1234.56; float f = 1234.56; // Erro!• Essa regra funciona de maneira diferente com literais int: byte b = 1; short s = 2; char c = 3; @regismelo 125
    126. 126. Converting and Casting Primitive Conversion Method call• Acontece quando se passa um parâmetro de um outro tipo para um método 1. float frads; 2. double d; 3. frads = 2.34567f; 4. d = Math.cos(frads); // Método recebe double @regismelo 126
    127. 127. Converting and Casting Primitive Conversion Method call• Porém, o código abaixo gera um erro de compilação: 1. double d = 12.0; 2. Object ob = myVector.elementAt(d);• Em resumo, widening conversions são permitidas mas narrowing conversion são proibidas. @regismelo 127
    128. 128. Converting and Casting Primitive Conversion Arithmetic Promotion• Considerando o código: 1. short s = 9; 2. int i = 10; 3. float f = 11.1f; 4. double d = 12.2; 5. if (–s * i >= f / d) 6. System.out.println(“>>>>”); 7. else 8. System.out.println(“<<<<”); @regismelo 128
    129. 129. Converting and Casting Primitive Conversion Arithmetic Promotion• As regras que regem as promoções através de operações aritméticas são distinguidas dentre os operadores unários e binários;• Os operadores unários realizam operações em um simples valor. Os binários entre dois valores. @regismelo 129
    130. 130. Converting and Casting Primitive Conversion Arithmetic Promotion• Para os operadores unários, as regras são: – Se o operando é um byte, short ou char, ele é convertido para um int (a menos que o operador usado seja ++ ou --, que não gera conversões); – Em todos os demais casos, não existe conversão. @regismelo 130
    131. 131. Converting and Casting Primitive Conversion Arithmetic Promotion• Para os operadores binários, as regras são: – Se um dos operandos é double, o outro operando é convertido para double; – Se não, se um dos operandos for float, o outro operando será convertido para float; – Se não, se um dos operandos for long, o outro será convertido para long; – Nos demais casos, todos os operandos são convertidos para int. @regismelo 131
    132. 132. Converting and Casting Primitive Conversion Arithmetic Promotion• Exemplos: 1. byte b = 1; int i = 1; 2. b++; // Funciona! 3. b = b + 1; // Erro! 4. b = b * 1; // Erro! 5. i = i + 1; // Funciona! 6. i = i * 2.5; // Erro! @regismelo 132
    133. 133. Converting and Casting Primitives and Casting• Casting significa dizer, explicitamente, para o Java fazer uma conversão; 1. int i = 5; 2. double d = (double)i; @regismelo 133
    134. 134. Converting and Casting Primitives and Casting• Castings explícitos permitem fazer conversões wide e narrow 1. short s = 259; 2. byte b = (byte)s; // Casting explícito 3. System.out.println(“b = ” + b); @regismelo 134
    135. 135. Converting and Casting Primitives and CastingExistem três regras básicas que regem o processo de casting em tipos primitivos: – Você pode realizar um casting de qualquer tipo não booleano para qualquer outro tipo não booleano; – Você não pode fazer um casting de um tipo booleano para outro tipo qualquer; – Você não pode um casting de um tipo qualquer para um tipo booleano. @regismelo 135
    136. 136. Converting and Casting Object Reference Assignment Conversion• Conversão de objetos quando uma atribuição é feita de um tipo para um outro tipo de objeto;• Existem três tipos de referência a objetos: – Classes; – Interfaces; – Arrays @regismelo 136
    137. 137. Converting and Casting Object Reference Assignment Conversion• Possibilidades de conversão: 1. Oldtype x; 2. Newtype y = x; @regismelo 137
    138. 138. Converting and Casting Object Reference Casting• As conversões de objeto são permitidas e amplamente utilizadas em Java. 1. class Pessoa { ... } 2. class Funcionario extends Pessoa { ... } 3. { 4. Pessoa P1 = new Funcionario(); 5. Funcionario F1 = new Funcionario(); 6. Pessoa P1 = (Pessoa)F1; 7. Pessoa P2 = F1; 8. } @regismelo 138
    139. 139. Converting and Casting Object Reference Casting• Possibilidades de conversão: NewType nt; OldType ot; nt = (NewType)ot; @regismelo 139
    140. 140. Converting and Casting Simulado@regismelo 140
    141. 141. Flow control and Exceptions@regismelo 141
    142. 142. Flow control and Exceptions Objetivos• Escrever código usando if, switch;• Escrever código usando todas as formas de loops, incluindo label e unlabeled break e continue;• Conhecer o estado das variáveis durante e depois a execução de um loop;• Escrever código que faz uso apropriado de exceções e blocos try, catch, finally• Declarar métodos que sobrescrevem métodos que disparam exceptions. @regismelo 142
    143. 143. Flow control and Exceptions Loop Constructs – While/do While• A forma geral de um while é: 1. while ( condicaoBooleana ) 2. blocoDeCodigo;• E de um do while é 1. do 2. blocoDeCodigo; 3. while ( condicaoBooleana) @regismelo 143
    144. 144. Flow control and Exceptions Loop Constructs – for• A forma geral de um for é: 1. for( statement; condition; expression ) 2. blocoDeCodigo;• Qualquer um dos elementos do for é opcional, dessa forma a expressão: for( ; ; ; ) Corresponderia a um loop infinito. @regismelo 144
    145. 145. Flow control and Exceptions Loop Constructs – for• Outra forma de utilizar o for: 1. int j, k; 2. for (j = 3, k = 6; j + k < 20; j++, k +=2) { 3. System.out.println(“j is “ + j + “ k is “ + k); 4. }• Porém, não se pode misturar expressões com declaração de variáveis: 1. int i = 7; 2. for (i++, int j = 0; i < 10; j++) { } // illegal! 3. for (int i = 7, long j = 0; i < 10; j++) { } // illegal! @regismelo 145
    146. 146. Flow control and Exceptions Break and Continue• Usando o continue: 1. for (int i = 0; i < array.length; i++) { 3. if ( algumaCoisaQualquer) { 4. continue; 5. } 6. facaAlgumaOutraCoisa(); 7. }• O continue faz com que a iteração volte para o laço em que o continue pertence. @regismelo 146
    147. 147. Flow control and Exceptions Break and Continue• Continue com labels mainLoop: for ( ; ; ) { for ( ; ; ) { if ( true ) { continue mainLoop; } } } @regismelo 147
    148. 148. Flow control and Exceptions Break and Continue• Usando o break 1. for (int i = 0; i < array.length; i++) { 3. if ( algumaCoisaQualquer) { 4. break; 5. } 6. facaAlgumaOutraCoisa(); 7. }• O break faz com que o laço seja finalizado. @regismelo 148
    149. 149. Flow control and Exceptions Break and Continue• Break com labels mainLoop: for ( ; ; ) { for ( ; ; ) { if ( true ) { break mainLoop; } } } @regismelo 149
    150. 150. Flow control and Exceptions Selection Statements• Usando if/else 1. if (x > 5) { 2. System.out.println(“x is more than 5”); 3. } 4. else { 5. System.out.println(“x is not more than 5”); 6. } @regismelo 150
    151. 151. Flow control and Exceptions Selection Statements• Usando switch 1. switch (x) { 2. case 1: 3. System.out.println(“Got a 1”); 4. break; 5. case 2: 6. case 3: 7. System.out.println(“Got 2 or 3”); 8. break; 9. default: 10. System.out.println(“Not a 1, 2, or 3”); 11. break; 12. } @regismelo 151
    152. 152. Flow control and Exceptions Exceptions• Mecanismo para tratamento e recuperação de erros;• Ocorrem em situações fora do normal;• Permitem que o fluxo normal do programa seja programado. @regismelo 152
    153. 153. Flow control and Exceptions Exceptions1. int x = (int)(Math.random() * 5);2. int y = (int)(Math.random() * 10);3. int [] z = new int[5];4. try {5. System.out.println(“y/x gives “ + (y/x));6. System.out.println(“y is “ + y + “ z[y] is “ + z[y]);8. }9. catch (ArithmeticException e) {10. System.out.println(“Arithmetic problem “ + e);11. }12. catch (ArrayIndexOutOfBoundsException e) {13. System.out.println(“Subscript problem “ + e);14. } @regismelo 153
    154. 154. Flow control and Exceptions Exceptions• Para o exemplo do slide anterior: @regismelo 154
    155. 155. Flow control and Exceptions Exceptions• A cláusula finally faz com que um bloco de código seja sempre executado;• Muito usado para para fazer a “limpeza da casa”;• O finally sempre é executado, com exceção das seguintes situações: • Um exceção aconteceu dentro do finally; • A thread foi morta (kill); • System.exit(); • O computador foi desligado  @regismelo 155
    156. 156. Flow control and Exceptions1. try { Exceptions2. // statements3. // some are safe, some might throw an exception4. } GeneralException5. catch (SpecificException e) {6. // do something, perhaps try to recover7. } SpecificException8. catch (OtherException e) {9. // handling for OtherException10. }11. catch (GeneralException e) {12. // handling for GeneralException OtherException13. }14. finally {15. // code that must be executed under16. // successful or unsuccessful conditions.17. }18. // more lines of method code @regismelo 156
    157. 157. Flow control and Exceptions Throwing Exceptions• Dispara uma nova exceção• Sintaxe: – throw e; – throw new Exception( “Erro!” );• Para que uma nova exceção possa ser disparada, essa exceção deve ser indicada através da cláusula throws – public void metodo() throws Exception• O usuário desse método deverá tratar ou repassar essa exceção. @regismelo 157
    158. 158. Flow control and Exceptions Categories of Exceptions@regismelo 158
    159. 159. Flow control and Exceptions Categories of Exceptions• Checked Exceptions – Problemas que podem afetar um programa correto – um erro de I/O, BD fora do ar, etc. – Precisam obrigatoriamente ser tratadas pelo programador• Runtime Exceptions – Descrevem bugs em programas – acessar um elemento inválido de um array, chamar um método não static de um objeto null, etc. – Não precisam ser explicitamente tratadas @regismelo 159
    160. 160. Flow control and Exceptions Categories of Exceptions• Errors – Descrevem problemas não comuns – falta de memória, estouro da pilha, etc. – Não é necessário que se faça tratamento para esse tipo de erro. – AssertionError, AWTError, CoderMalfunctionError, FactoryConfigurationError, LinkageError, ThreadDeath , TransformerFactoryConfigurationError, VirtualMachineError @regismelo 160
    161. 161. Flow control and Exceptions Exceptions and Overriding• Quando você estende uma classe e sobrescreve um método, o novo método não pode declarar nenhuma exceção nova;• Exemplo: public class Base { public void do() throws SSException { } } public class Base2 { public void do() { } } @regismelo 161
    162. 162. Flow control and Exceptions Exceptions and Overriding@regismelo 162
    163. 163. Flow control and Exceptions Simulado@regismelo 163
    164. 164. Objects, Classes e Interfaces@regismelo 164
    165. 165. Objects and Classes Objetivos• Conhecer os benefícios do encapsulamento;• Conhecer os valores possíveis de retorno de qualquer classe tomando como base o seu parent;• Escrever código para chamar métodos e construtores sobrescritos ou sobrecarregados;• Declarar classes, inner classes, métodos e conhecer o conceito de relação entre pacotes;• Escrever código para instanciar qualquer classe concreta, incluindo top-level classes, inner classes, static inner classes e classes anônimas; @regismelo 165
    166. 166. Objects and Classes Objetivos• Identificar arquivos fonte corretamente construídos, declarações de pacote, import statements, declaração de classes, declaração de interfaces, declaração de métodos (incluindo o método main), de variáveis e identificadores. @regismelo 166
    167. 167. Objects and Classes Conceitos Gerais de O.O. • Objetos; • Herança; • Classes; • Polimorfismo; • Interfaces; • Encapsulamento; • Abstração; • Hierarquia;@regismelo 167
    168. 168. Objects and Classes Overloading and Overriding• Overload – dois métodos com o mesmo nome e parâmetros diferentes;• Override – redefinição de um método declarado na classe pai. @regismelo 168
    169. 169. Objects and Classes Overloading 1. public void aMethod(String s) { } 2. public void aMethod() { } 3. public void aMethod(int i, String s) { } 4. public void aMethod(String s, int i) { } 5. public int aMethod() { } // Erro! 6. public void aMethod( short s ) { } 7. Public void aMethod( int i ) { }@regismelo 169
    170. 170. Objects and Classes Overloading• O compilador decide qual método utilizar dependendo da ordem dos argumentos passados;• Dois métodos com argumentos diferentes e mesmo nome pode ter retorno diferentes e disparar exceções diferentes;• Dois métodos com argumentos iguais e mesmo nome não podem ter retorno diferente. @regismelo 170
    171. 171. Objects and Classes Overriding• Redefinição ou especialização de um método;• Sobrescrever um método significa definir um novo método com a mesma assinatura – nome, argumentos e retorno; @regismelo 171
    172. 172. Objects and Classes Overriding@regismelo 172
    173. 173. Objects and Classes Overriding@regismelo 173
    174. 174. Objects and Classes Overriding• Para que um método seja sobrescrito corretamente, as seguintes regras deverão ser observadas: – O nome do método, o tipo e a ordem de seus argumentos deve ser idêntica; – O tipo de retorno deve ser idêntico; – A acessibilidade do método não pode ser mais restrita que o original; – O método não deverá disparar exceções que não podem ser disparadas no método original. @regismelo 174
    175. 175. Objects and Classes Construtores• Se a classe não tiver nenhum construtor, o compilador fornece um construtor padrão, sem argumentos.• Um construtor pode chamar outros construtores da seguinte forma: this(argumentos).• O construtor da classe não é executado até que o construtor da classe pai o seja.• Construtores não são herdados.• Construtores não tem valor de retorno. (Nem void). @regismelo 175
    176. 176. Objects and Classes Construtores@regismelo 176
    177. 177. Interfaces• É um tipo de classe que não possui implementação para os métodos;• O corpo de uma Interface possui somente uma lista de métodos;• Somente protótipos;• Por definição uma Interface é considerada abstract, portanto, não pode ser instanciada; @regismelo 177
    178. 178. Interfaces• A classe que implementa uma interface, é obrigada a implementar todos os métodos da mesma.• Existe uma contrato entre a classe e a interface;• Uma classe pode implementar mais de uma Interface; @regismelo 178
    179. 179. Interfacespublic interface Pilha { public push(Object ob); public Object pop();}public class PilhaImp implements Pilha { public push(Object ob) { //implementação } public Object pop() { //implementação }} @regismelo 179
    180. 180. Métodos de Interface• Todos os métodos de uma Interface também são considerados abstract.• Não é necessário especificar;• Os métodos só podem ter o escopo público ou de pacote;• Também não podem ser declarados como static.@regismelo 180
    181. 181. Implementado um Interface• Uma classe que implementa uma Interface deve declarar todos os métodos da mesma como public.Ex: public interface Pilha { push(Object ob); Object pop(); } public class PilhaImp implements Pilha { public push(Object ob) { //implementação } Object pop() { //erro! //implementação } } @regismelo 181
    182. 182. Interface estendendo uma Interface• Uma interface também possui a possibilidade de estender de outras Interfaces; Ex: public interface MicroSystem extends Radio, CDPlayer { public void playRadio(); public void playCD(); } @regismelo 182
    183. 183. Constantes em Interfaces• Uma interface pode declarar variáveis dentro do seu corpo;• Todas devem ser públicas, estáticas e finais;• Não é necessário especificar; Ex: public interface CalculosMatematicos { public static final double PI = 3.14; // ou double PI = 3.14; } @regismelo 183
    184. 184. Objects and Classes Inner Classes• É uma classe declarada dentro de outra classe(isto é, entre as chaves {} ), ou dentro de métodos. @regismelo 184
    185. 185. Objects and Classes Inner Classes Exemplo 1@regismelo 185
    186. 186. Objects and Classes Inner Classes Exemplo 2@regismelo 186
    187. 187. Objects and Classes Inner Classes• Para um exemplo mais completo, Adicionar ao codigo anterior... @regismelo 187
    188. 188. Objects and Classes 4 Tipos de Inner Classes• Top-level nested classes• Non-static inner classes• Local Classes• Classes anônimas @regismelo 188
    189. 189. Objects and Classes Top-level nested Classes• Declaradas como classes membro com o modificador “static”.• Podem ser acessadas / instanciadas sem uma instância de uma classe externa. Podem acessar somente membros estáticos da classe externa. Não podem acessar variáveis de instância ou métodos.• Muito parecida com outra classe/interface com nivel package. Fornecem uma extensão ao empacotamento pelo esquema de nomes. @regismelo 189
    190. 190. Objects and Classes Top-level nested classes• Classes podem declarar tantos membros estáticos como não estaticos.• Qualquer modificador de acesso pode ser especificado.• Interfaces são implicitamente estáticas (o modificador estático pode ser utilizado). Podem ter qualquer modificador de acesso. Não existem interfaces “inner” não estáticas(non-static inner), locais ou anônimas. @regismelo 190
    191. 191. Objects and ClassesExemplo Top-Level Nested Class @regismelo 191
    192. 192. Para referenciar...• Para referenciar a classe (3) :TopLevelClass.NestedTopLevelClass.NestedTopL evelInterface• Para referenciar a classe (4)TopLevelClass.NestedTopLevelClass.NestedTopL evelClass1 @regismelo 192
    193. 193. Objects and Classes Classes geradas...• Quando compilado, o exemplo anterior gerará as seguintes 4 classes:• TopLevelClass$NestedTopLevelClass$NestedT opLevelClass1.class• TopLevelClass$NestedTopLevelClass$NestedT opLevelInterface.class• TopLevelClass$NestedTopLevelClass.class• TopLevelClass.class@regismelo 193
    194. 194. Objects and Classes Exemplo 2@regismelo 194
    195. 195. Objects and Classes Non-Static Inner Classes• Declaradas como classes membro sem o identificador static.• Uma instância de uma inner class non-static só pode existir com uma instância de uma classe externa(enclosing class). Ela sempre terá de ser criada dentro do contexto de uma instância externa.• Podem acessar todas os membros da classe externa (até mesmo privados). Possui um referência implícita para a instância externa (enclosing instance).• Não pode ter membros estáticos.• Pode ter qualquer modificador de acesso.(public, default, protected, private) @regismelo 195
    196. 196. Objects and ClassesDefinindo Non-Static Inner Class@regismelo 196
    197. 197. Objects and Classes Classes Locais• São classes que são definidas em um bloco. Pode ser em um corpo de um método, um construtor, um bloco local, um inicializador estático ou um inicializador de instância.• Não podem ser especificadas com o modificador estático. @regismelo 197
    198. 198. Objects and Classes Classes Locais(Cont.)• Não podem ter modificadores de acesso.• Podem acessar todas as caracteristicas da classe que a contem (porque elas são definidas dentro do método da classe.• Podem acessar somente variáveis finais definidas dentro do método (incluindo seus argumentos). @regismelo 198
    199. 199. Objects and Classes Classe Locais (cont.)• Não podem ser especificadas com o modificador estático, mas se elas são declaradas dentro de um contexto estatico ou de um inicializador estático, elas se tornam estáticas. @regismelo 199
    200. 200. Objects and Classes Exemplo Classes Locais (1/2)@regismelo 200
    201. 201. Objects and Classes Exemplo Classes Locais (2/2)@regismelo 201
    202. 202. Objects and Classes Classes Anônimas• Classes Anônimas são definidas onde elas são construidas. Elas podem ser criadas onde uma expressão de referência puder ser utilzada.• Classe anônimas não podem ter contrutores explicitos. Inicializadores de instância podem ser utilizados para fazerem esse papel.• Tipicamente utilizados quando criando objetos ”on the fly”.• Classes anônimas podem implementar uma interface ou estender uma classe, mas não ambos.• Syntaxe: new interface name() { } ou new class name() {} @regismelo 202
    203. 203. Objects and Classes Classes Anônimas• As mesmas regras de acesso para as classes locais se aplicam para classe anônimas. @regismelo 203
    204. 204. Objects and Classes Classes Anônimas@regismelo 204
    205. 205. Objects and Classes Classes Anônimas (1/2)@regismelo 205
    206. 206. Objects and Classes Classes Anônimas (2/2)@regismelo 206
    207. 207. Objects and Classes Simulado@regismelo 207
    208. 208. Thread Threads@regismelo 208
    209. 209. Thread O que é um Thread• Thread é uma maneira de Java criar e executar processos paralelos, sejam eles concorrentes ou não. Dando uma impressão que vários programas estão executando simultaneamente. @regismelo 209
    210. 210. Thread O que entender sobre Thread?• Quando ela executa.• Que código é executado.• Quais estados ela pode estar.• Como é feita a mudança de estado. @regismelo 210
    211. 211. Thread Quando ela executa• A Thread executa quando se chama o método start().• Ela não executa imediatamente.• É feito o registro, e espera ser posta para executar pela JVM no momento adequado. @regismelo 211
    212. 212. Thread Que código é executado• Todo o código contido no método run().//Imprime os número de 0 a 9 na tela.public void run() { for (int i = 0; i < 10; i++) { System.out.println( i ); } } @regismelo 212
    213. 213. ThreadDe onde vem o método run()?• Você pode estender a classe Thread. public class MyThread extends Thread { public void run() { //código a ser executado pela thread } }• Ou implementar a interface Runnable.public class MyRunnable implements Runnable { public void run() { //código a ser executado pela thread } } @regismelo 213
    214. 214. Thread Como executar uma Thread que implementa Runnable? Passar a instância de um objeto que implementa Runnable para o construtor da classe Thread. Thread myT = new Thread( new MyRunnable ); myT.start();@regismelo 214
    215. 215. Thread Quando um Thread termina?• No momento que termina o seu método run().• O seu estado muda para DEAD.• Não pode mais ser reiniciada.• Os métodos da Thread ainda podem ser chamados, ela ainda é um objeto como outro qualquer. @regismelo 215
    216. 216. Thread Estados de uma Thread• Ready-to-Run• Running• Estados de espera: Sleeping, suspended, blocked e waiting.• Dead @regismelo 216
    217. 217. Thread Ready-to-Run• Quando o método start() é chamado, a Thread não é posta imediatamente para executar. Ela é posta como pronta, ready- to-run. E permanece até o momento em que é colocada para executar. @regismelo 217
    218. 218. Thread Running• No momento em que a Thread está sendo executada. @regismelo 218
    219. 219. Thread Sleeping• Uma Thread é considerada no estado sleeping, quando é chamado o método sleep() da classe Thread. Ela permanece até o momento que termina o tempo determinado pelo argumento do método. @regismelo 219
    220. 220. Thread Blocked• Quando a Thread não consegue adquirir a posse do monitor de um objeto. @regismelo 220
    221. 221. Thread Waiting• Uma Thread é considerada no estado waiting, quando é feita a chamada do método wait() para que ela aguarde por uma determinada ação que está impedindo o prosseguimento de sua execução. @regismelo 221
    222. 222. Thread Seqüência dos Estados@regismelo 222
    223. 223. Thread Prioridades• Threads tem prioridades que vão de 1 a 10.• Se várias Threads estão esperando para ser executada, a de maior prioridade é colocada para executar.• O valor 5 é a prioridade default. setPriority(int); //seta a prioridade getPriority(); //retorna a prioridade atual @regismelo 223
    224. 224. Thread Método yield()• A Thread em execução move-se do estado running para o ready-to-run, dando a vez da execução para outra Thread.• Método da classe Thread.• public static void yield() @regismelo 224
    225. 225. Thread Cenários do yield()• 1. Vai para o estado de ready-to-run, e fica esperando execução como outra Thread qualquer.• 2. Pode voltar imediatamente a executar, se não houver Threads prontas.• 3. Talvez todas as Threads que estão prontas, sejam de menor prioridade, daí ela continua executando. @regismelo 225
    226. 226. Thread Método sleep()• Faz com que a Thread vá para o estado de sleeping por um determinado tempo.• Método da classe Thread. public static sleep(long mili) public static sleep(long mili, int nano)• Ambos lançam InterruptedException @regismelo 226
    227. 227. Thread Implementação de Escalonamento• Existem duas maneiras que fazem com que uma Thread pare de executar sem a explícita chamada de do método wait() ou suspend(). 1. Devido a uma operação de I/O. 2. Uma outra Thread de maior prioridade está pronta para executar. @regismelo 227
    228. 228. Thread Escalonamento depende da plataforma• A forma de escalonamento das Threads depende da plataforma. Algumas implementam Escalonamento Preemptivo, já outras Time sliced ou Roud-Robin.• Obs: Nunca implemente suas Threads dependendo do tipo de escalonamento. @regismelo 228
    229. 229. Thread Todo objeto possui um monitor• O que o monitor proporciona? 1. Uma trava (lock) para o objeto. 2. O uso da keyword synchronized para criar uma região sincronizada do objeto (região crítica). @regismelo 229
    230. 230. Thread Sincronização• A sincronização serve para garantir que somente um processo acesse uma determinada posição de memória simultaneamente. @regismelo 230
    231. 231. Thread Keyword synchonized• Serve para criar dentro de um objeto uma região sincronizada.• Para uma Thread acessar um região sincronizada, antes ela tem que conseguir o lock do objeto, ou seja o monitor.• Caso o lock do objeto já tenha algum dono, a Thread irá para o estado de bloqueado (blocked).• Caso haja mais de um método synchronized e já existe uma Thread dona do lock do objeto, nenhuma outra Thread conseguirá acessar nenhum outro método synchronized do objeto, antes que o lock esteja livre. @regismelo 231
    232. 232. Thread Keyword synchonized• Existem duas maneira de marcar um código como sincronizado. 1. Sincronização de um método inteiro. boolean valid = false; public synchronized void method() { valid = !valid; } @regismelo 232
    233. 233. Thread Keyword synchonized2. Ou um trecho do código. StringBuffer message = new StringBuffer(“Java”); public void change(String arg) { synchronized ( message ) { message.append( arg ); } }• O objeto sincronizado, não necessariamente precisa ser o que contém o código. @regismelo 233

    ×