Curso Java - Básico - Aula 5

Métodos Definem o Comportamento

  • O objeto mantêm o seu estado através dos valores armazenados nos seus atributos.
  • Os métodos são usados como serviços que modificam o estado do objeto, sem deixar transparecer a sua estrutura interna.
  • O objeto tem o seu comportamento definido pelos métodos que são oferecidos aos outros objetos seus clientes.

Tipos Primitivos

  • Tipos Numéricos.
  • Tipo Booleano.
  • Caracteres.
  • Strings.

Tipo Booleano

  • Tipos booleanos não são inteiros.
  • Não podem ser tratados como inteiros.
  • Nunca podem ser convertidos para outro tipo.
  • Um booleano contém o valor true ou false.
  • Ocupa 1 bit e tem valor default false.

Caracteres

  • Valores char representam caracteres.
  • Todos os caracteres de escape do C e do Unicode são representáveis:
    • Char newline= ‘\n’, apostrophe = ‘\’’, delete = ‘ÿ’, aleph = ‘U05D0’;
  • O tipo char ocupa dois bytes e contém caracteres Unicode.

Strings

  • String em Java não é um tipo primitivo, mas uma instância da classe String ? é um objeto.
  • Entretanto, devido ao uso intenso, strings podem aparecer no programa entre aspas
  • Quando o compilador encontra uma string no código, ele automaticamente cria o objeto String necessário:
    • String s = "nome";

Blocos e Expressões

  • Blocos e Variáveis Locais.
  • Expressões e Operadores.
  • Atribuição e Precedência.
  • Expressões com tipos numéricos.

Blocos e Variáveis Locais

  • Um bloco de comandos é uma seqüência de comandos delimitada por chaves:
  • Normalmente, blocos de comandos aparecem em comandos como if, while e outros.
  • Pode ser necessário definir variáveis dentro de um bloco de comandos. Esta só está disponível dentro desse bloco.

Expressões e Operadores

  • Operadores aritiméticos (+, -, *, /) e de atribuição (=) funcionam da mesma forma em qualquer linguagem de programação.
  • A maior parte dos operadores trabalham apenas com tipos primitivos.
  • As exceções são "=", "==" e "!=", que trabalham também com objetos.

Atribuição

  • A atribuição é feita com o operador =.
    • lvalor = rvalor;
  • rvalor pode ser qualquer constante, variável ou expressão que produza um valor.
  • lvalor deve ser uma variável.
  • Atribuição entre primitivos significa que um valor foi copiado de um lugar para outro na memória.

    ./images/atribuicao_prim.gif

  • Atribuição entre referências significa que a referência está sendo copiada para outro lugar e não o objeto.

    ./images/atribuicao_obj.gif

Precedência

  • A precedência de operadores define como uma expressão será avaliada quando muitos operadores estão presentes.
  • Podem ser usados parênteses para tornar explícita a ordem das operações:

    ./images/precedencia.jpg

Operadores

  • Operadores Aritméticos.
  • Operadores Relacionais e Lógicos.
  • Operadores Binários e Deslocadores.
  • Concatenação, If-else, Vírgula.
  • TypeCast.

Operadores Aritméticos

  • Os operadores aritméticos básicos:
    • adição(+), subtração(-), multiplicação(*) e divisão (/).
    • módulo ( %, que produz o resto da divisão inteira).
    • A divisão inteira trunca o resultado.
  • Pode ser usada uma notação sintetizada que faz uma operação e uma atribuição ao mesmo tempo.
    • x += 4 equivale a x = x + 4.

Operadores Relacionais

  • Operadores relacionais geram um resultado booleano.
  • Eles avaliam a relação entre os valores dos operandos.
  • Uma expressão relacional produz:
    • true se o relacionamento é verdadeiro.
    • false caso contrário.
  • Os operadores relacionais são:
    • menor que ( < ).
    • maior que ( > ).
    • menor ou igual a ( <= ).
    • maior ou igual a ( >= ).
    • igual ( == ).
    • diferente ( != ).

Operadores Lógicos

  • Os operadores lógicos produzem um valor booleano conforme o relacionamento lógico dos seus argumentos.
    • AND ( && )
    • OR ( || )
    • NOT ( ! )
  • Operadores lógicos apenas podem ser aplicados a valores booleanos.

Operadores Binários

  • Operadores binários permitem a manipulação de bits individuais em tipos primitivos.
    • AND(&)
    • OR(|)
    • XOR(^)
    • NOT(~)

Operador Ternário (if-Else)

  • Retorna um valor ou outro dependendo do resultado de uma expressao booleana.
  • Sempre retorna um valor.
          
                    variavel = expressao ? valor, se true : valor, se false;
    
        
  • Exemplo:
                  
            int x = (y != 0)?50:500;
    
            String titulo = (sexo == 'f')?"Sra.":"Sr.";
    
        

Operadores Deslocadores

  • Os operadores deslocadores também manipulam bits.
  • O operadores deslocadores fazem com que o operando seja deslocado de tantos bits quanto os especificados após o operador.
  • O operador desloca para a esquerda, e desloca para a direita.
  • No caso do operador >>, se o valor é positivo, zeros são inseridos como bits de mais alta ordem; se o valor é negativo, uns são inseridos como bits de mais alta ordem.

Operador de Concatenação

  • O operador + aplicado a strings tem o objetivo de concatená-las.
  • Numa concatenação de valores, se pelo menos um deles é uma string, os outros são convertidos para string.
  • A conversão é feita automaticamente para primitivos. Para os demais tipos a conversão é feita chamando-se o método toString().
  • Exemplo:
                  
            String s = 1 + 2 + 3 + "=" + 4 + 5 + 6;
    
            Resultado: s contem a String "6=456"
    
        

instanceof

  • instanceof e um operador usado para comparar uma referencia com uma classe.
  • A expressao sera true se a referência for do tipo de uma classe ou subclasse testada e false, caso contrario.
  • Sintaxe:
    • referencia instanceof Classe
  • Exemplo:

    ./images/instanceof.gif

Conversão de Referências

  • Pode-se atribuir uma referencia A a uma outra referencia B de um tipo diferente, desde que.
    • B seja uma superclasse (direta ou indireta) de A.

      Qualquer referencia pode ser atribuida a uma referencia da classe Object.

    • B seja uma interface implementada por A.

      ./images/typecast_ref.gif

TypeCast

  • TypeCast é a capacidade de trocar dinamicamente o tipo de um dado para um outro tipo compatível.
  • Quando possível, Java troca automaticamente o tipo de um dado.
  • É necessário fazer TypeCast quando queremos explicitar a conversão de tipos ou para forçar o compilador a fazer uma conversão que normalmente ele não poderia fazer.
  • A sintaxe do TypeCast é (tipo) valor;
  • No exemplo do slide anterior, para ser possível fazer:

    ./images/typecast_exe.gif

  • Precisa-se fazer o TypeCast

    Carro c = (Carro)v;

Controle de Execução

  • Condições de teste: true e false
  • Comando if-else
  • Comandos Iterativos
  • Comandos while e do-while
  • Comando for
  • Comandos break e continue
  • Comandos break e continue com label
  • Comando switch

Condições de teste

  • Todas os testes condicionais avaliam se uma expressão condicional é verdadeira ou falsa para determinar o caminho de execução.
  • A expressão condicional A == B usa o operador == para verificar se o valor de A é igual ao valor de B.
  • Qualquer operador relacional pode ser usado para produzir um teste condicional.

Comando if-else

  • O comando if-else é uma das formas mais básicas de controlar o fluxo de execução do programa.
  • O if tem duas formas, sendo que else é opcional:

    ./images/comandoIf.jpg

    ./images/if_else.gif

  • A condição deve produzir um resultado booleano. O bloco de comandos pode ser apenas um comando ou uma lista de comandos.

Comandos Iterativos

  • Os comandos que controlam loops são chamados de iterativos:
    • while
    • do-while
    • for
  • Um bloco de comandos é repetido até que a expressão booleana retorne false.

Comando while

  • A forma básica do loop while é:
    • while (expressão booleana) bloco de comandos

      ./images/while.gif

  • Primeiro, a expressão booleana é avaliada.
  • Se retornar true, o bloco de comandos é executado.
  • Após cada execução do bloco de comandos a expressão e novamente avaliada.

Comando do-while

  • A forma básica do loop do-while é:

    ./images/dowhile.jpg

    ./images/do_while.gif

  • A principal diferença entre while e do-while é, que no do-while o bloco de comandos é sempre executado pelo menos uma vez.

Comando for

  • A forma básica do loop for é:

    ./images/comandoFor.jpg

    • Primeiro é feita a inicialização antes da primeira iteração.
    • A expressão booleana é testada antes de cada iteração.
    • Se retornar true, o bloco de comandos é executado.
    • Ao final de cada loop, a ação é executada.

      ./images/comandoFor2.jpg

      ./images/for.gif

Comandos break e continue

  • Dentro do corpo de qualquer comando iterativo também pode ser controlado o fluxo de execução do loop usando break e continue.
  • break termina o loop sem a execução do resto dos comandos.
  • continue pára a execução da iteração corrente, vai para o início do loop e inicia a próxima iteração.

    ./images/break_continue.gif

Comando switch

  • A forma básica do comando switch é:

    ./images/switch.gif

  • O selecionadorInteiro produz um valor inteiro.
  • O switch compara o resultado com cada valorInteiro.
  • Quando encontra, executa o bloco de comandos correspondente.
  • Caso contrário, executa o bloco de comandos default.
  • O uso de break é opcional. Na sua ausência, o código dos blocos de comandos seguintes é executado até que o break seja encontrado.
  • O selecionadorInteiro deve produzir valores do tipo int ou char.
û£