SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

PPT
08.type systems
PPT
Java Básico
PPT
Java Básico :: Introdução
PDF
PDF
Introdução ao Cálculo Numérico S06
PDF
Jemcalculoi1
PDF
Linguagem Go
08.type systems
Java Básico
Java Básico :: Introdução
Introdução ao Cálculo Numérico S06
Jemcalculoi1
Linguagem Go

Mais procurados (19)

PDF
Tipos e valores
PDF
Algebra Linear cap 09
PDF
Tutorial aed iii 007 - algoritmo de ordenação heapsort
PDF
Introdução a Python - Python Poli
PDF
POO - 14 - Vetores
PDF
Tutorial aed iii 009 - algoritmo de ordenação heapsort
PDF
Aula 02 - Aspectos fundamentais - JAVA
PDF
Calculo1 aula15
PPTX
05 classes utilitarias
PDF
Aula 03 - Classes math e string - JAVA
ODP
Pymordida0 Semana de computação da SOCIESC - 2008/10
PDF
POO - 13 - Arrays em Java
PDF
Formulario
PDF
POO - 23 - Coleções da API do Java
PDF
Logica
PDF
Computação Científica com SciPy - Brevíssimo Tutorial
PDF
Tipos e valores
Algebra Linear cap 09
Tutorial aed iii 007 - algoritmo de ordenação heapsort
Introdução a Python - Python Poli
POO - 14 - Vetores
Tutorial aed iii 009 - algoritmo de ordenação heapsort
Aula 02 - Aspectos fundamentais - JAVA
Calculo1 aula15
05 classes utilitarias
Aula 03 - Classes math e string - JAVA
Pymordida0 Semana de computação da SOCIESC - 2008/10
POO - 13 - Arrays em Java
Formulario
POO - 23 - Coleções da API do Java
Logica
Computação Científica com SciPy - Brevíssimo Tutorial
Anúncio

Semelhante a Java 04 (20)

PPT
Introdução ao Python
PDF
Javafx Introdução
PDF
Unidade04
PDF
caelum-java-objetos-fj11.pdf
PDF
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
PDF
Minicurso Java && Cl
PDF
A linguagem java
PDF
Apostila de Java: Orientação a Objetos
PDF
K19 k51-design-patterns-em-java
PDF
Collections E Generics
PDF
Collections e Generics
DOC
Algoritmos
PDF
Scjp - Assignments
PDF
PDF
Java 02
PDF
PHP não é coisa de moleque
PDF
Scala - Uma Breve (breve mesmo) Introdução
PDF
Objetos Pythonicos - compacto
PDF
7194099-Manual-de-Java
PDF
Conhecendo ou relembrando C
Introdução ao Python
Javafx Introdução
Unidade04
caelum-java-objetos-fj11.pdf
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Minicurso Java && Cl
A linguagem java
Apostila de Java: Orientação a Objetos
K19 k51-design-patterns-em-java
Collections E Generics
Collections e Generics
Algoritmos
Scjp - Assignments
Java 02
PHP não é coisa de moleque
Scala - Uma Breve (breve mesmo) Introdução
Objetos Pythonicos - compacto
7194099-Manual-de-Java
Conhecendo ou relembrando C
Anúncio

Mais de samuelthiago (20)

PPTX
Eclipse i (1)
PPTX
Html básico
PPTX
Interface grafica em_java_parte_v
PPTX
Interface grafica em_java_parte_iv
PPTX
Interface grafica em_java_parte_iii
PPTX
Interface grafica em_java_parte_ii
PPTX
Interface grafica em_java_parte_i
PPTX
Poo interacao entre_objetos_blue_j_ii
PPTX
Introducao a poo_com_blue_j
PPT
Projeto calculadora em_java
PPT
Introducao a poo_com_blue_j
PDF
01 02 introdução aos bancos de dados (slides)
PDF
Java 08
PDF
Java 07
PDF
Java 06
PDF
Java 05
PDF
Java 04
PDF
Java 03
PDF
Java 01
PDF
Pged 08
Eclipse i (1)
Html básico
Interface grafica em_java_parte_v
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_i
Poo interacao entre_objetos_blue_j_ii
Introducao a poo_com_blue_j
Projeto calculadora em_java
Introducao a poo_com_blue_j
01 02 introdução aos bancos de dados (slides)
Java 08
Java 07
Java 06
Java 05
Java 04
Java 03
Java 01
Pged 08

Último (16)

PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Arquitetura de computadores - Memórias Secundárias
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Arquitetura de computadores - Memórias Secundárias
Custos e liquidação no SAP Transportation Management, TM130 Col18
Processos na gestão de transportes, TM100 Col18
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
COBITxITIL-Entenda as diferença em uso governança TI
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...

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