SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Curso Superior de Tecnologia em Telemática
                                   Programação Orientada a Objetos

Tipos, literais, operadores e controle de fluxo
                                                            Copyright©2010
                                 Prof. César Rocha – cesarocha@ifpb.edu.br
Roteiro

• Em poucos slides, apresentar alguns fundamentos importantes
  relacionados à parte procedural da linguagem Java
   – Operadores lógicos, aritméticos, de concatenação, binários, etc...
• Estruturas de controle execução em Java
                 if-else
                 for, while, do-while
                 break, continue e rótulos
                 switch (case)

   – Java possui uma sintaxe muito familiar com C, e você já possui algum
     embasamento nesta linguagem imperativa
                                                                            2
Identificadores em Java

• Identificadores são palavras que utilizamos para nomear nossas
  variáveis, métodos, classes e interfaces em Java
   – Não utilize keywords para nomear tudo isso que foi dito.
• Podemos utilizar $, _, e números (mas não podem aparecer primeiro)‫‏‬
   – (válidos): $valor, _valor, valor2, umSalário,
   – (inválidos): 2valor, !achou, “um salario”
       • É possível inserir caracteres Unicode no código fonte utilizando-se o formato
         uXXX Ex.: char w = u0057; (w)
• Java é uma linguagem “case-sensitive”
                             sensitive
   – ou seja, MAIÚSCULAS ≠ minúsculas
                                                                                         3
Identificadores em Java (cont.)

• Palavras-chave que não podem ser utilizadas como identificadores:




   Obs.: goto e const existem na linguagem por questão apenas de “segurança”. goto não constitui
   uma boa prática de programação. Eles existem, mas não possuem efeito algum.
Tipos de dados em Java

• Java é uma linguagem fortemente tipada. Isso significa que cada
                                    tipada
  variável deve ter um tipo associado a ela em tempo de compilação
   – Seja este tipo primitivo ou referência
• Um tipo primitivo consiste de um conjunto de valores possíveis
  juntamente com as operações que este tipo comporta
• As seguintes keyword’s definem oito tipos primitivos de dados (bits):
   – byte (8), short (16), int (32), long (64),
       byte (8), short (16), int (32), long (64),
   – float (32), double (64), char (16) e boolean
       float (32), double (64), char (16) e boolean

       Obs.: boolean possui os valores true e false. São implementados não como constantes (depende
       da JVM);são comumente usados bits de sinalização. Por isso, seu espaço de memória é mínimo.    5
Classes Wrapper

• Algumas classes são utilizadas para representar tipos primitivos sob
  forma de objeto, estas são denominadas classes Wrappers.
   – Ex.: Integer i = new Integer(10); // um                                      objeto inteiro

   – Pode-se tratar outros tipos primitivos como objetos:
        Boolean, Character, Double, Integer, Boolean, Long, Float e Double
• Alguns métodos úteis destas classes:                                Isso também vale para as outras classes
                                                                       Wrapper. Ex: Float.parseFloat(); …


      Integer.parseInt( “10” ); // transforma uma String em inteiro
      Integer.toString(); // imprime um objeto como uma String
      Integer.toHexString( 10 ); // converte para hexadecimal

       Obs.: a partir do JDK 1.5.0, Java instituiu o conceito de autoboxing e unboxing para facilitar a
       manipulação direta entre inteiros e classes Wrapper. Ex Integer k = 45; e int j = k;
Operadores

• Um operador produz um novo valor a partir de um ou mais operandos
    – Os operadores em Java são praticamente os mesmos encontrados em C
                      +, -, /, *, =, ==, <, >, >=, &&, etc.
• A maior parte dos operadores trabalha com valores de tipos primitivos. MAS,
                                                             primitivos
    – + e += são usados na concatenação de Strings
    – !=, = e == são usados também com objetos piblic bool
                                                       u

                                                         f ((          ean
    (embora não funcionem da mesma forma quanto
                                                              o =             eq u
                                                                   = n             a ls
                                                         re t          ul l             ( O
                                                              u rn          ) |             b je
                                                   if (             fal         | (              ct
                                                                                      !o
    aos valores armazenados nos objetos)                  o =            se ;             in s        o )
                                                  Cl i         = t                             t an        {
                                                       e nt         hi s                            c eO
                                                            e             )       c =            r et    f
                                                                      re t                                                    C li
                                                                                                      u rn
• Para comparar o conteúdo de objetos,
                                                                           u rn          (Cl                                       e nt
                                                                  }             thi           ie n         tr u                         e))
                                                                                    s. m           te)          e;
                                                                                         a tr          o;
                                                                                              ícu
                                                                                                  la

  não use ==, mas sobreponha equals() de Object
                                                                                                       ==
                                                                                                           c .m
                                                                                                                a tr
                                                                                                                     ícu
                                                                                                                         la ;

   – Seu comportamento default é apenas comparar referências
Operadores aritméticos

• Atribuições podem ser abreviadas
                   x += 4; //equivale a x = x + 4
• Você pode utilizar ainda -=, *=, /= e %=
   – Cuidado: o resultado da divisão depende do tipo dos operandos. Expressões com dois ou
     mais operandos de tipos distintos passarão por uma conversão automática, onde os
     operandos são convertidos para o tipo mais abrangente.

           int resultado = 10/4; //igual a 2
           float resultado = 10f/4f; // igual a
  2,5
        Obs.: para não haver ambiguidade, você pode guiar o compilador fornecendo estes “caracteres-tipo”.
        Isso também vale para long , como em long l = 20L, ou double d = 10.5d, ou octal int dez = 012;
        ou até mesmo em hexadecimal, com em int quinze = 0xF;(maiúsculo ou não)
Operadores de coerção

• Na coerção (cast), o programador assume os riscos da conversão de dados
    – No tipo byte cabem inteiros até 127
    – No tipo short cabem inteiros até 32767
    – Não há risco de perda de informação na atribuição a seguir
                       short s = 100; byte b = s;
      pois (100 cabe em byte) mas o compilador acusará erro porque um short não pode
      ser atribuído a byte
    – Solução: byte b = (byte) s; // operador de coerção
    – O programador “assume o risco”, declarando entre parênteses, que o conteúdo de s
      cabe em byte
    – O operador de coerção tem maior precedência que os outros operadores!
Precedência

• A precedência determina em que ordem as operações em uma
  expressão serão realizadas
              int x = 3 + 4 * 2 – 9 / 3; // 3+8-3 = 8

• Parênteses podem ser usados para sobrepor a precedência
         int x = (2 + 2) * (3 – 9) / 3; // 4*(-6)/3 = -8

• A maior parte das expressões de mesma precedência é calculada da
  esquerda para a direita
          int y = 13 + 2 + 4 + 6; // (((13 + 2) + 4) + 6)

   – Há exceções. Por exemplo, atribuição.
Incremento e decremento

• Exemplo
   int a = 10;
   int b = 5;
• Incrementa ou decrementa antes de usar a variável
   int x = ++a; // a contém 11, x contém 11
   int y = --b;   // b contém 4, y contém 4
   – a atribuição foi feita DEPOIS!
• Incrementa ou decrementa depois de usar a variável
   int x = a++; // a contém 11, x contém 10
   int y = b--;   // b contém 4, y contém 5
   – a atribuição foi feita ANTES!
Operadores relacionais

• == igual
• !=        diferente
•<          menor
• <= menor igual
•>          maior
• >= maior igual
• Sempre produzem um resultado booleano
   – Comparam os valores de duas variáveis ou de uma variável e uma constante
   – Comparam as referências de objetos (apenas == e !=)
Operadores relacionais

• &&         E(and)
• ||         Ou(or)
•!           Negação(not)

• Produz sempre um valor booleano (true ou false)
    – Argumentos precisam ser valores booleanos ou expressões com resultado booleano
    – Ex. (3 > x) && (y <= 10)
• Compiladores podem otimizar a avaliação das expressões. Ex:
    – “short-circuit” (false && <qualquer coisa>)
    (A expressão <qualquer coisa> não será calculada)
Atribuição

• A atribuição é realizada com o operador ‘=’
   – ‘=’ serve apenas para atribuição, não pode ser usado em comparações
     (que usa ‘==’)!
• A atribuição copia valores
   – O valor armazenado em uma variável de tipo primitivo é o valor do
     número, caractere ou literal booleana (true ou false)
   – O valor armazenado em uma variável de tipo de classe (referência para
     um objeto) é o ponteiro para o objeto ou null
   – Conseqüentemente, copiar referências por atribuição não copia objetos,
     mas apenas cria novas referências para o mesmo objeto!
            Obs.: o nome dado a esta situação é aliasing.
Passagem de valores via atribuição




                  Obs.: figura obtida de [1]
Operador ternário (if-else)

• Retorna um valor ou outro, dependendo do resultado de uma
  expressão booleana
   variável = expressão ? valor, se true
                        : valor, se false;
   Exemplo:
      int x = (y != 0) ? 50 : 500;
      String s = num + “ pagina” + (num > 1) ? “s” : “”;


   – Apesar de não ser tão legível quanto o if, é bastante útil em
     alguns casos
Controle de execução

• Por padrão, a ordem de execução de um programa é linear: ou seja,
  um comando será executado em sequência um após o outro
• Entretanto, podemos alterar esta ordem, utilizando-se de comandos
  de controle de fluxo:
   – Repetição: for, while, do-while
   – Seleção: if-else, switch-case
   – Desvios (somente em estruturas de repetição): continue, break, rótulos
• Como foi dito no início do módulo, não há comando goto
   – goto, porém, é uma palavra reservada (keyword) da linguagem
if-else e switch

• Você já deve ter visto algumas destas instruções antes:
    – decisão: utilizada com if-else; onde o else é opcional
                                                                                          Lembre-se de que
                                               if ( expressão_booleana )              expressões booleanas irão
   if( expressão_booleana )                       comando;                              retornar true ou false.
       comando;                                else
                                                  outro_comando;                       .. opção pode ser um char,
                                                                                      int ou até uma enumeração
         Observe que comando poderia ser um bloco de comandos delimitados por { e }

    – seleção: utilizada com switch-case                        switch ( opção ) {
                                                                   case 1 :
                                      switch ( key ) {
 Se esquecermos de colocar um                                          salvar();
                                         case value :
  break no final de um case, o                                              break;
                                                   break;
    próximo será executado.                                        case 2:
                                         case value :                       abrir( arquivo );
                                                   break;                   break;
                                         default :                 default:
 A cláusula default é opcional. Ela   }                                //“opção inválida”
 será executada quando nenhum
                                                                }
        case for escohido.
O comando return

• Ao invocar uma sub-rotina, você poderá utilizar a keyword return
   – Especifica que um método irá retornar (se este não retornar void)
   – Causa o retorno imediato a linha de controle imediatamente posterior à
     chamada do método
• Exemplos de sintaxe:
   public boolean maiorIdade( int idade ){
                return idade >= 18;
   }                                 public void setIdade( int idade ){
                                            if( idade < 0 || idade > 130 )
  Você também pode usar o comando            return;
   return em um método void. Neste       this.idade = idade
      caso, o return causará a saída }
       imediata do método
while e do-while

• Você já deve ter visto algumas destas instruções antes:
    – while: estrutura de repetição; avalia a condição antes da execução
      while
                                                 while( página <= 10 )           Lembre-se de que você é o
   while( expressão_booleana )                                                 responsável por fazer com que a
                                                    leia();
       comando;
                                                    página++;                  condição de saída seja alcançada.
                                                 }                                Não é como o for, onde o
                                                                              incremento pode ser automático!
        Observe que comando poderia ser um bloco de comandos delimitados por { e }

    – do-while: parecido com while, mas…
         while
  O bloco será executado pelo               int x = 20;
                                            do {
   menos uma vez, ainda que
                                              System.out.printf(“%d”, x);
      condição seja falsa.                  }while( x < 10);
                                                          int x = 20;
                                                          while( x < 10 ){
            .. e se este mesmo código-condição
                                                              System.out.printf(“%d”, x);
           fosse executado agora com um while
                                                          }
             “norma” ao invés de um do-while?
for e for-each

• Você já deve ter visto algumas destas instruções antes:
     – for: estrutura de repetição; avalia a condição antes de executar
       for
  for(inicialização;
       condição; passo)               for(int i=0, k=2; i<10 && k != 12; i++, k*=2){
                                         comando;
      comando;
                                      }               Você pode inicializar mais de uma variável

  Observe que comando poderia ser um bloco de comandos delimitados por { e }

     – for-each: parecido com for, mas…
           each
    São duas partes: a primeira                // for-each foi introduzido no JDK 1.5
  refere-se ao elemento que irá                for( int k : array )
   visitar cada célula do vetor; a               System.out.printf(“%d”, k);
 segunda é o que será percorrido
                                                         for(int k=0; k < array.length; k++)
              .. e se este mesmo código fosse
                                                                    System.out.printf(“%d”, array[k]);
            executado “à moda antiga?”, ou seja,
            varrendo um array “normalmente”?
break e continue

• break: interrompe a execução do bloco de execução
   – Continua com a próxima instrução, logo após o bloco
• continue: interrompe a execução da iteração
   – Testa e condição e reinicia o bloco com a próxima iteração




                                                      Obs.: figura obtida de [1]
break e continue com rótulos

• break e continue atuam sobre o bloco de repetição onde são chamados
   – Em blocos de repetição contidos em outros blocos, pode-se usar rótulos para fazer
     break e continue atuarem em blocos externos
   – Os rótulos só podem ser usados antes de do, while e for
   – As chamadas só podem ocorrem dentro dos blocos de repetição




                                                          Obs.: figura obtida de [1]
Operador de concatenação

• Em uma expressão usando o “+” com dois operandos, se um deles
  for String, o outro será convertido automaticamente para String e
  ambos serão concatenados
• A operação de concatenação, assim como a de adição, ocorre da
  direita para a esquerda
   String s = 1 + 2 + 3 + “=” + 4 + 5 + 6;
   – Resultado: s contém a String “6=456”
Para um melhor aproveitamento…

• Ao codificar exemplos mostrados em sala, procure verificar pontos de
  dúvidas com o professor.
• Não estude apenas por slides (são apenas tópicos)!
• Mantenha em dia todas as questões das listas de exercícios e práticas
  de laboratório.
• Não se acanhe! Procure-me (ou monitor da disciplina, quando houver
  algum) e questione conceitos, listas, etc.
• Não deixe para começar a estudar em cima da hora.
                                                                          25
Créditos para geração desta nota de aula
• [1] ROCHA, Helder da. Desenvolvimento de Aplicações com Java. Disponível em:
  <http://www.argonavis.com.br/cursos/java/j100/index.html>

• [2] Booch, G.; Maksimchuk, R. A.; Engel, M. W.; Young, B.J. Object-Oriented-Analysis-
  Design-Applications. 3rd.Ed. Addison Wesley, 2007

• [3] The Java Tutorial. Disponível em: http://java.sun.com/docs/books/tutorial/

• [4] PEREIRA, Frederico C. G.; Slides do Curso de Java. Disponível por WWW em
  http://asterix.coinfo.cefetpb.edu.br/~fred




                                                                                          26
Bibliografia Complementar
• Bibliografia principal:
     – (1) SIERRA, K.; BATES, B. Use a Cabeça JAVA. Editora Alta Books, 2ª ed. Rio de Janeiro 2007.
     – (1)DEITEL, H. M. ; DEITEL, P. Java - Como programar. 6ª Edição, Prentice-Hall, 2005.
     – FLANAGAN, D., Java in a Nutshell : A Desktop Quick Reference, O'Reilly & Associates,
       1999 (bom para consultar a documentação)‫‏‬


• Bibliografia disponível para download (grátis):
     – CAMPIONE, M. e WALRATH, K. The Java Tutorial: Object-Oriented Programming for
       the Internet. Addison-Wesley (http://java.sun.com/docs/books/)
     – (2) ECKEL, B., Thinking in Java. Prentice Hall. (http://www.mindview.net/Books/TIJ/)‫‏‬



                                                                                                      27

Weitere ähnliche Inhalte

Was ist angesagt?

Algebra Linear cap 09
Algebra Linear cap 09Algebra Linear cap 09
Algebra Linear cap 09Andrei Bastos
 
Tutorial aed iii 007 - algoritmo de ordenação heapsort
Tutorial aed iii   007 - algoritmo de ordenação heapsortTutorial aed iii   007 - algoritmo de ordenação heapsort
Tutorial aed iii 007 - algoritmo de ordenação heapsortFlávio Freitas
 
Introdução a Python - Python Poli
Introdução a Python  - Python PoliIntrodução a Python  - Python Poli
Introdução a Python - Python PoliRodrigo Lira
 
Tutorial aed iii 009 - algoritmo de ordenação heapsort
Tutorial aed iii   009 - algoritmo de ordenação heapsortTutorial aed iii   009 - algoritmo de ordenação heapsort
Tutorial aed iii 009 - algoritmo de ordenação heapsortFlávio Freitas
 
Aula 02 - Aspectos fundamentais - JAVA
Aula 02  -  Aspectos fundamentais - JAVAAula 02  -  Aspectos fundamentais - JAVA
Aula 02 - Aspectos fundamentais - JAVAULBRA
 
Aula 03 - Classes math e string - JAVA
Aula 03   - Classes math e string - JAVAAula 03   - Classes math e string - JAVA
Aula 03 - Classes math e string - JAVAULBRA
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Marco Mendes
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialFabio Spanhol
 

Was ist angesagt? (19)

Java
JavaJava
Java
 
Tipos e valores
Tipos e valoresTipos e valores
Tipos e valores
 
Algebra Linear cap 09
Algebra Linear cap 09Algebra Linear cap 09
Algebra Linear cap 09
 
Tutorial aed iii 007 - algoritmo de ordenação heapsort
Tutorial aed iii   007 - algoritmo de ordenação heapsortTutorial aed iii   007 - algoritmo de ordenação heapsort
Tutorial aed iii 007 - algoritmo de ordenação heapsort
 
Introdução a Python - Python Poli
Introdução a Python  - Python PoliIntrodução a Python  - Python Poli
Introdução a Python - Python Poli
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
Tutorial aed iii 009 - algoritmo de ordenação heapsort
Tutorial aed iii   009 - algoritmo de ordenação heapsortTutorial aed iii   009 - algoritmo de ordenação heapsort
Tutorial aed iii 009 - algoritmo de ordenação heapsort
 
Aula 02 - Aspectos fundamentais - JAVA
Aula 02  -  Aspectos fundamentais - JAVAAula 02  -  Aspectos fundamentais - JAVA
Aula 02 - Aspectos fundamentais - JAVA
 
Calculo1 aula15
Calculo1 aula15Calculo1 aula15
Calculo1 aula15
 
05 classes utilitarias
05   classes utilitarias05   classes utilitarias
05 classes utilitarias
 
Aula 03 - Classes math e string - JAVA
Aula 03   - Classes math e string - JAVAAula 03   - Classes math e string - JAVA
Aula 03 - Classes math e string - JAVA
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
Formulario
FormularioFormulario
Formulario
 
Python
PythonPython
Python
 
POO - 23 - Coleções da API do Java
POO -  23 - Coleções da API do Java POO -  23 - Coleções da API do Java
POO - 23 - Coleções da API do Java
 
Logica
LogicaLogica
Logica
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
 
String
StringString
String
 

Ähnlich wie Java 04

Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosAdriano Teixeira de Souza
 
Aula 06 vetores e matrizes
Aula 06   vetores e matrizesAula 06   vetores e matrizes
Aula 06 vetores e matrizesTácito Graça
 
Curso De Algoritmo Aula 10
Curso De Algoritmo   Aula 10Curso De Algoritmo   Aula 10
Curso De Algoritmo Aula 10Felipe Santos
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Marcelo Barros de Almeida
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dadosgjpbg
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2Leandro Lopes
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IVGabriel Faustino
 
Resumo tipo primitivo_java
Resumo tipo primitivo_javaResumo tipo primitivo_java
Resumo tipo primitivo_javaMarcos Souza
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doublePAULO Moreira
 
Java: Estruturas de Repetição
Java: Estruturas de RepetiçãoJava: Estruturas de Repetição
Java: Estruturas de RepetiçãoArthur Emanuel
 
Poo1 aula 6 - conversão de tipos primitivos
Poo1   aula 6 - conversão de tipos primitivosPoo1   aula 6 - conversão de tipos primitivos
Poo1 aula 6 - conversão de tipos primitivosDenis Sobrenome
 

Ähnlich wie Java 04 (20)

Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 
Aula 06 vetores e matrizes
Aula 06   vetores e matrizesAula 06   vetores e matrizes
Aula 06 vetores e matrizes
 
Trabalho vetores
Trabalho vetoresTrabalho vetores
Trabalho vetores
 
Curso De Algoritmo Aula 10
Curso De Algoritmo   Aula 10Curso De Algoritmo   Aula 10
Curso De Algoritmo Aula 10
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IV
 
Pged 03
Pged 03Pged 03
Pged 03
 
Resumo tipo primitivo_java
Resumo tipo primitivo_javaResumo tipo primitivo_java
Resumo tipo primitivo_java
 
Apostila c++
Apostila c++Apostila c++
Apostila c++
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-double
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Aula 13
Aula 13Aula 13
Aula 13
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Java: Estruturas de Repetição
Java: Estruturas de RepetiçãoJava: Estruturas de Repetição
Java: Estruturas de Repetição
 
Apostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em CApostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em C
 
Java 06 Strings Arrays
Java 06 Strings ArraysJava 06 Strings Arrays
Java 06 Strings Arrays
 
Poo1 aula 6 - conversão de tipos primitivos
Poo1   aula 6 - conversão de tipos primitivosPoo1   aula 6 - conversão de tipos primitivos
Poo1 aula 6 - conversão de tipos primitivos
 

Mehr von samuelthiago

Interface grafica em_java_parte_v
Interface grafica em_java_parte_vInterface grafica em_java_parte_v
Interface grafica em_java_parte_vsamuelthiago
 
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_ivInterface grafica em_java_parte_iv
Interface grafica em_java_parte_ivsamuelthiago
 
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_iiiInterface grafica em_java_parte_iii
Interface grafica em_java_parte_iiisamuelthiago
 
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_iiInterface grafica em_java_parte_ii
Interface grafica em_java_parte_iisamuelthiago
 
Interface grafica em_java_parte_i
Interface grafica em_java_parte_iInterface grafica em_java_parte_i
Interface grafica em_java_parte_isamuelthiago
 
Poo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iiPoo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iisamuelthiago
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_jsamuelthiago
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_javasamuelthiago
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_jsamuelthiago
 
01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)samuelthiago
 

Mehr von samuelthiago (20)

Eclipse i (1)
Eclipse i (1)Eclipse i (1)
Eclipse i (1)
 
Html básico
Html básicoHtml básico
Html básico
 
Interface grafica em_java_parte_v
Interface grafica em_java_parte_vInterface grafica em_java_parte_v
Interface grafica em_java_parte_v
 
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_ivInterface grafica em_java_parte_iv
Interface grafica em_java_parte_iv
 
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_iiiInterface grafica em_java_parte_iii
Interface grafica em_java_parte_iii
 
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_iiInterface grafica em_java_parte_ii
Interface grafica em_java_parte_ii
 
Interface grafica em_java_parte_i
Interface grafica em_java_parte_iInterface grafica em_java_parte_i
Interface grafica em_java_parte_i
 
Poo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iiPoo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_ii
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
 
01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)
 
Java 08
Java 08Java 08
Java 08
 
Java 07
Java 07Java 07
Java 07
 
Java 06
Java 06Java 06
Java 06
 
Java 05
Java 05Java 05
Java 05
 
Java 04
Java 04Java 04
Java 04
 
Java 03
Java 03Java 03
Java 03
 
Java 02
Java 02Java 02
Java 02
 
Java 01
Java 01Java 01
Java 01
 

Java 04

  • 1. Curso Superior de Tecnologia em Telemática Programação Orientada a Objetos Tipos, literais, operadores e controle de fluxo Copyright©2010 Prof. César Rocha – cesarocha@ifpb.edu.br
  • 2. Roteiro • Em poucos slides, apresentar alguns fundamentos importantes relacionados à parte procedural da linguagem Java – Operadores lógicos, aritméticos, de concatenação, binários, etc... • Estruturas de controle execução em Java if-else for, while, do-while break, continue e rótulos switch (case) – Java possui uma sintaxe muito familiar com C, e você já possui algum embasamento nesta linguagem imperativa 2
  • 3. Identificadores em Java • Identificadores são palavras que utilizamos para nomear nossas variáveis, métodos, classes e interfaces em Java – Não utilize keywords para nomear tudo isso que foi dito. • Podemos utilizar $, _, e números (mas não podem aparecer primeiro)‫‏‬ – (válidos): $valor, _valor, valor2, umSalário, – (inválidos): 2valor, !achou, “um salario” • É possível inserir caracteres Unicode no código fonte utilizando-se o formato uXXX Ex.: char w = u0057; (w) • Java é uma linguagem “case-sensitive” sensitive – ou seja, MAIÚSCULAS ≠ minúsculas 3
  • 4. Identificadores em Java (cont.) • Palavras-chave que não podem ser utilizadas como identificadores: Obs.: goto e const existem na linguagem por questão apenas de “segurança”. goto não constitui uma boa prática de programação. Eles existem, mas não possuem efeito algum.
  • 5. Tipos de dados em Java • Java é uma linguagem fortemente tipada. Isso significa que cada tipada variável deve ter um tipo associado a ela em tempo de compilação – Seja este tipo primitivo ou referência • Um tipo primitivo consiste de um conjunto de valores possíveis juntamente com as operações que este tipo comporta • As seguintes keyword’s definem oito tipos primitivos de dados (bits): – byte (8), short (16), int (32), long (64), byte (8), short (16), int (32), long (64), – float (32), double (64), char (16) e boolean float (32), double (64), char (16) e boolean Obs.: boolean possui os valores true e false. São implementados não como constantes (depende da JVM);são comumente usados bits de sinalização. Por isso, seu espaço de memória é mínimo. 5
  • 6. Classes Wrapper • Algumas classes são utilizadas para representar tipos primitivos sob forma de objeto, estas são denominadas classes Wrappers. – Ex.: Integer i = new Integer(10); // um objeto inteiro – Pode-se tratar outros tipos primitivos como objetos: Boolean, Character, Double, Integer, Boolean, Long, Float e Double • Alguns métodos úteis destas classes: Isso também vale para as outras classes Wrapper. Ex: Float.parseFloat(); … Integer.parseInt( “10” ); // transforma uma String em inteiro Integer.toString(); // imprime um objeto como uma String Integer.toHexString( 10 ); // converte para hexadecimal Obs.: a partir do JDK 1.5.0, Java instituiu o conceito de autoboxing e unboxing para facilitar a manipulação direta entre inteiros e classes Wrapper. Ex Integer k = 45; e int j = k;
  • 7. Operadores • Um operador produz um novo valor a partir de um ou mais operandos – Os operadores em Java são praticamente os mesmos encontrados em C +, -, /, *, =, ==, <, >, >=, &&, etc. • A maior parte dos operadores trabalha com valores de tipos primitivos. MAS, primitivos – + e += são usados na concatenação de Strings – !=, = e == são usados também com objetos piblic bool u f (( ean (embora não funcionem da mesma forma quanto o = eq u = n a ls re t ul l ( O u rn ) | b je if ( fal | ( ct !o aos valores armazenados nos objetos) o = se ; in s o ) Cl i = t t an { e nt hi s c eO e ) c = r et f re t C li u rn • Para comparar o conteúdo de objetos, u rn (Cl e nt } thi ie n tr u e)) s. m te) e; a tr o; ícu la não use ==, mas sobreponha equals() de Object == c .m a tr ícu la ; – Seu comportamento default é apenas comparar referências
  • 8. Operadores aritméticos • Atribuições podem ser abreviadas x += 4; //equivale a x = x + 4 • Você pode utilizar ainda -=, *=, /= e %= – Cuidado: o resultado da divisão depende do tipo dos operandos. Expressões com dois ou mais operandos de tipos distintos passarão por uma conversão automática, onde os operandos são convertidos para o tipo mais abrangente. int resultado = 10/4; //igual a 2 float resultado = 10f/4f; // igual a 2,5 Obs.: para não haver ambiguidade, você pode guiar o compilador fornecendo estes “caracteres-tipo”. Isso também vale para long , como em long l = 20L, ou double d = 10.5d, ou octal int dez = 012; ou até mesmo em hexadecimal, com em int quinze = 0xF;(maiúsculo ou não)
  • 9. Operadores de coerção • Na coerção (cast), o programador assume os riscos da conversão de dados – No tipo byte cabem inteiros até 127 – No tipo short cabem inteiros até 32767 – Não há risco de perda de informação na atribuição a seguir short s = 100; byte b = s; pois (100 cabe em byte) mas o compilador acusará erro porque um short não pode ser atribuído a byte – Solução: byte b = (byte) s; // operador de coerção – O programador “assume o risco”, declarando entre parênteses, que o conteúdo de s cabe em byte – O operador de coerção tem maior precedência que os outros operadores!
  • 10. Precedência • A precedência determina em que ordem as operações em uma expressão serão realizadas int x = 3 + 4 * 2 – 9 / 3; // 3+8-3 = 8 • Parênteses podem ser usados para sobrepor a precedência int x = (2 + 2) * (3 – 9) / 3; // 4*(-6)/3 = -8 • A maior parte das expressões de mesma precedência é calculada da esquerda para a direita int y = 13 + 2 + 4 + 6; // (((13 + 2) + 4) + 6) – Há exceções. Por exemplo, atribuição.
  • 11. Incremento e decremento • Exemplo int a = 10; int b = 5; • Incrementa ou decrementa antes de usar a variável int x = ++a; // a contém 11, x contém 11 int y = --b; // b contém 4, y contém 4 – a atribuição foi feita DEPOIS! • Incrementa ou decrementa depois de usar a variável int x = a++; // a contém 11, x contém 10 int y = b--; // b contém 4, y contém 5 – a atribuição foi feita ANTES!
  • 12. Operadores relacionais • == igual • != diferente •< menor • <= menor igual •> maior • >= maior igual • Sempre produzem um resultado booleano – Comparam os valores de duas variáveis ou de uma variável e uma constante – Comparam as referências de objetos (apenas == e !=)
  • 13. Operadores relacionais • && E(and) • || Ou(or) •! Negação(not) • Produz sempre um valor booleano (true ou false) – Argumentos precisam ser valores booleanos ou expressões com resultado booleano – Ex. (3 > x) && (y <= 10) • Compiladores podem otimizar a avaliação das expressões. Ex: – “short-circuit” (false && <qualquer coisa>) (A expressão <qualquer coisa> não será calculada)
  • 14. Atribuição • A atribuição é realizada com o operador ‘=’ – ‘=’ serve apenas para atribuição, não pode ser usado em comparações (que usa ‘==’)! • A atribuição copia valores – O valor armazenado em uma variável de tipo primitivo é o valor do número, caractere ou literal booleana (true ou false) – O valor armazenado em uma variável de tipo de classe (referência para um objeto) é o ponteiro para o objeto ou null – Conseqüentemente, copiar referências por atribuição não copia objetos, mas apenas cria novas referências para o mesmo objeto! Obs.: o nome dado a esta situação é aliasing.
  • 15. Passagem de valores via atribuição Obs.: figura obtida de [1]
  • 16. Operador ternário (if-else) • Retorna um valor ou outro, dependendo do resultado de uma expressão booleana variável = expressão ? valor, se true : valor, se false; Exemplo: int x = (y != 0) ? 50 : 500; String s = num + “ pagina” + (num > 1) ? “s” : “”; – Apesar de não ser tão legível quanto o if, é bastante útil em alguns casos
  • 17. Controle de execução • Por padrão, a ordem de execução de um programa é linear: ou seja, um comando será executado em sequência um após o outro • Entretanto, podemos alterar esta ordem, utilizando-se de comandos de controle de fluxo: – Repetição: for, while, do-while – Seleção: if-else, switch-case – Desvios (somente em estruturas de repetição): continue, break, rótulos • Como foi dito no início do módulo, não há comando goto – goto, porém, é uma palavra reservada (keyword) da linguagem
  • 18. if-else e switch • Você já deve ter visto algumas destas instruções antes: – decisão: utilizada com if-else; onde o else é opcional Lembre-se de que if ( expressão_booleana ) expressões booleanas irão if( expressão_booleana ) comando; retornar true ou false. comando; else outro_comando; .. opção pode ser um char, int ou até uma enumeração Observe que comando poderia ser um bloco de comandos delimitados por { e } – seleção: utilizada com switch-case switch ( opção ) { case 1 : switch ( key ) { Se esquecermos de colocar um salvar(); case value : break no final de um case, o break; break; próximo será executado. case 2: case value : abrir( arquivo ); break; break; default : default: A cláusula default é opcional. Ela } //“opção inválida” será executada quando nenhum } case for escohido.
  • 19. O comando return • Ao invocar uma sub-rotina, você poderá utilizar a keyword return – Especifica que um método irá retornar (se este não retornar void) – Causa o retorno imediato a linha de controle imediatamente posterior à chamada do método • Exemplos de sintaxe: public boolean maiorIdade( int idade ){ return idade >= 18; } public void setIdade( int idade ){ if( idade < 0 || idade > 130 ) Você também pode usar o comando return; return em um método void. Neste this.idade = idade caso, o return causará a saída } imediata do método
  • 20. while e do-while • Você já deve ter visto algumas destas instruções antes: – while: estrutura de repetição; avalia a condição antes da execução while while( página <= 10 ) Lembre-se de que você é o while( expressão_booleana ) responsável por fazer com que a leia(); comando; página++; condição de saída seja alcançada. } Não é como o for, onde o incremento pode ser automático! Observe que comando poderia ser um bloco de comandos delimitados por { e } – do-while: parecido com while, mas… while O bloco será executado pelo int x = 20; do { menos uma vez, ainda que System.out.printf(“%d”, x); condição seja falsa. }while( x < 10); int x = 20; while( x < 10 ){ .. e se este mesmo código-condição System.out.printf(“%d”, x); fosse executado agora com um while } “norma” ao invés de um do-while?
  • 21. for e for-each • Você já deve ter visto algumas destas instruções antes: – for: estrutura de repetição; avalia a condição antes de executar for for(inicialização; condição; passo) for(int i=0, k=2; i<10 && k != 12; i++, k*=2){ comando; comando; } Você pode inicializar mais de uma variável Observe que comando poderia ser um bloco de comandos delimitados por { e } – for-each: parecido com for, mas… each São duas partes: a primeira // for-each foi introduzido no JDK 1.5 refere-se ao elemento que irá for( int k : array ) visitar cada célula do vetor; a System.out.printf(“%d”, k); segunda é o que será percorrido for(int k=0; k < array.length; k++) .. e se este mesmo código fosse System.out.printf(“%d”, array[k]); executado “à moda antiga?”, ou seja, varrendo um array “normalmente”?
  • 22. break e continue • break: interrompe a execução do bloco de execução – Continua com a próxima instrução, logo após o bloco • continue: interrompe a execução da iteração – Testa e condição e reinicia o bloco com a próxima iteração Obs.: figura obtida de [1]
  • 23. break e continue com rótulos • break e continue atuam sobre o bloco de repetição onde são chamados – Em blocos de repetição contidos em outros blocos, pode-se usar rótulos para fazer break e continue atuarem em blocos externos – Os rótulos só podem ser usados antes de do, while e for – As chamadas só podem ocorrem dentro dos blocos de repetição Obs.: figura obtida de [1]
  • 24. Operador de concatenação • Em uma expressão usando o “+” com dois operandos, se um deles for String, o outro será convertido automaticamente para String e ambos serão concatenados • A operação de concatenação, assim como a de adição, ocorre da direita para a esquerda String s = 1 + 2 + 3 + “=” + 4 + 5 + 6; – Resultado: s contém a String “6=456”
  • 25. Para um melhor aproveitamento… • Ao codificar exemplos mostrados em sala, procure verificar pontos de dúvidas com o professor. • Não estude apenas por slides (são apenas tópicos)! • Mantenha em dia todas as questões das listas de exercícios e práticas de laboratório. • Não se acanhe! Procure-me (ou monitor da disciplina, quando houver algum) e questione conceitos, listas, etc. • Não deixe para começar a estudar em cima da hora. 25
  • 26. Créditos para geração desta nota de aula • [1] ROCHA, Helder da. Desenvolvimento de Aplicações com Java. Disponível em: <http://www.argonavis.com.br/cursos/java/j100/index.html> • [2] Booch, G.; Maksimchuk, R. A.; Engel, M. W.; Young, B.J. Object-Oriented-Analysis- Design-Applications. 3rd.Ed. Addison Wesley, 2007 • [3] The Java Tutorial. Disponível em: http://java.sun.com/docs/books/tutorial/ • [4] PEREIRA, Frederico C. G.; Slides do Curso de Java. Disponível por WWW em http://asterix.coinfo.cefetpb.edu.br/~fred 26
  • 27. Bibliografia Complementar • Bibliografia principal: – (1) SIERRA, K.; BATES, B. Use a Cabeça JAVA. Editora Alta Books, 2ª ed. Rio de Janeiro 2007. – (1)DEITEL, H. M. ; DEITEL, P. Java - Como programar. 6ª Edição, Prentice-Hall, 2005. – FLANAGAN, D., Java in a Nutshell : A Desktop Quick Reference, O'Reilly & Associates, 1999 (bom para consultar a documentação)‫‏‬ • Bibliografia disponível para download (grátis): – CAMPIONE, M. e WALRATH, K. The Java Tutorial: Object-Oriented Programming for the Internet. Addison-Wesley (http://java.sun.com/docs/books/) – (2) ECKEL, B., Thinking in Java. Prentice Hall. (http://www.mindview.net/Books/TIJ/)‫‏‬ 27